The simplest bridge example won't work - Arduino Yun

NoBugs picture NoBugs · Jul 5, 2014 · Viewed 7.5k times · Source

I tried to modify the Temperature Web Panel example (found in arduino-1.5.6-rw/libraries/Bridge/examples/TemperatureWebPanel) for a light sensor. Unfortunately it seems even the simplest receive and transmit result over wifi doesn't work! I even commented out the working part to just send back some text to the browser as you can see, but I still see nothing in the browser:

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

// Listen on default port 5555, the webserver on the Yun
// will forward there all the HTTP requests for us.
YunServer server;
String startString;
long hits = 0;

void setup() {
  Serial.begin(9600);

  // For debugging, wait until the serial console is connected.
  /*delay(4000);
  while(!Serial);
  Bridge.begin();
*/
  // Bridge startup
  pinMode(13, OUTPUT);
  Bridge.begin();
  digitalWrite(13, HIGH);

  pinMode(A0, INPUT);


  // Listen for incoming connection only from localhost
  // (no one from the external network could connect)
  server.listenOnLocalhost();
  server.begin();

  // get the time that this sketch started:
  Process startTime;
  startTime.runShellCommand("date");
  while (startTime.available()) {
    char c = startTime.read();
    startString += c;
  }

  Serial.println("yeah\n");
  Serial.println(startTime);
}

void loop() {
  // Get clients coming from server
  Serial.println("a\n");
  YunClient client = server.accept();

  // There is a new client?
  if (client) {
    Serial.println("Client!\n");
    // read the command
    String command = client.readString();
    client.print('(This should definitely be sent over bridge)');
    /*command.trim();        //kill whitespace
    Serial.println(command);
    // is "temperature" command?
    if (command == "temperature") {

      // get the time from the server:
      Process time;
      time.runShellCommand("date");
      String timeString = "";
      while (time.available()) {
        char c = time.read();
        timeString += c;
      }
      Serial.println(timeString);
      int sensorValue = analogRead(A0);
      // convert the reading to millivolts:
      client.print("Current time on the Yún: ");
      client.println(timeString);
      client.print("<br>Current value: ");
      client.print(sensorValue);
      client.print("<br>This sketch has been running since ");
      client.print(startString);
      client.print("<br>Hits so far: ");
      client.print(hits);
    }*/

    // Close connection and free resources.
    client.stop();
    hits++;
  }

  delay(50); // Poll every 50ms
}

I see the "a" multiple times in the serial monitor, but never see anything in the arduino.local/arduino/temperature url, just a blank response.

Furthurmore, after awhile it seems the Yun was disconnecting from the network, not accessible over http or ssh. How does one debug an issue like this, considering ssh is the main way to communicate with this computer?

Answer

user1052441 picture user1052441 · Sep 5, 2014

After debugging step by step on my own configuration, I found that the code never advanced past Bridge.begin().

Upon further investigation, I found that the default Bridge baud rate of 250000 no longer matched the kernel baud rate of 115200.

Changing to: Bridge.begin(115200) ... fixed the issue for me.

To determine your kernel speed, run cat /proc/cmdline from a terminal into your Yun

See this link for more info: https://groups.google.com/forum/#!msg/linino/-rSmpjX4UOM/Cnjv-uzrlfgJ

If this isn't your issue, consider adding debug information (ie.. Serial.print()) in the actual source files for Bridge.cpp, etc. Unfortunately, it appears that Arduino/Linino devs often make breaking changes and do not have the resources to update documentation, examples, etc.