Я создал следующий эскиз, основанный почти полностью на учебнике Bridge, представленном на arduino.cc.
Я не могу понять, почему сценарий Bridge Bridge работал для меня (переключая светодиод на контакт 13, свернув URI, например arduino.local/arduino/digital/13/1
), но этот намного более простой эскиз отвечает моей строкой отказа, "Непризнанная команда: привет", когда я свертываю 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);
}
В конечном счете, я хотел бы использовать более длинную случайную строку в качестве ключа - вместо "привет" --allowing меня активировать подключенный компонент с устройства, которое хранило секрет (например, смартфон с сохраненным URI как кнопка на главном экране).
В этом примере я пропустил точное поведение этих функций Stream:
String command = client.readStringUntil('/');
if (command == "hello") { ... }
Это условие будет истинным только в том случае, если "привет" не является конечным сегментом URI. Что меня опрокинула, так это команда режима в примере примера Bridge. Он проанализировал конечный сегмент (ожидая "enter" или "вывод") следующим образом:
String mode = client.readStringUntil('\r');
Это было недоумение, потому что я не предполагал, что Yun-сервер лишит финальную '/'
когда я свернусь:
$ curl "arduino.local/arduino/digital/hello/" -v
ТЛ; др:
Используйте readStringUntil('\r')
для синтаксического анализа конечного сегмента URI.