我创建了以下草图,几乎完全基于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存储为主屏幕上的按钮)。
答案 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的最后一段。