ArduinoYúnBridge:简单命令失败

时间:2014-11-25 05:46:11

标签: c++ c rest arduino arduino-yun

我创建了以下草图,几乎完全基于Bridge tutorial provided on arduino.cc

我无法弄清楚为什么示例Bridge脚本对我有用(通过像arduino.local/arduino/digital/13/1这样的URI来切换引脚13上的LED,但是这个更简单的草图用我的失败字符串响应,“无法识别的命令:你好,“当我卷曲arduino.local/arduino/hello/

我错过了什么?

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

YunServer server;

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

  // Bridge startup
  pinMode(13,OUTPUT);
  digitalWrite(13, HIGH);
  Bridge.begin();
  digitalWrite(13, LOW);
  server.begin();
}

void loop() {
  // Get clients coming from server
  YunClient client = server.accept();

  // There is a new client?
  if (client) {
    // Process request
    process(client);

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

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

void process(YunClient client) {
  // read the command
  String command = client.readStringUntil('/');

  if (command == "hello") {
    client.println(F("I will do your bidding"));
    return;
  }

  client.print(F("Unrecognized command: "));
  client.println(command);
}

最终,我想使用更长的随机字符串作为键 - 代替“你好” - 允许我从存储了秘密的设备激活连接的组件(例如,带有智能手机的设备) URI存储为主屏幕上的按钮)。

1 个答案:

答案 0 :(得分:0)

我在示例中遗漏的是这些Stream函数的确切行为:

String command = client.readStringUntil('/');
if (command == "hello") { ... }

如果“hello”不是URI的最后一段,那么这种情况才会成立。让我感到惊讶的是Bridge示例代码中的mode命令。它解析了最后一段(期望“输入”或“输出”),如下所示:

String mode = client.readStringUntil('\r');

这令人困惑,因为我没有假设Yun服务器在我卷曲时会剥离最后的'/'

$ curl "arduino.local/arduino/digital/hello/" -v

TL; DR:

使用readStringUntil('\r')解析URI的最后一段。