Arduino Yún Bridge: простая команда не работает

Я создал следующий набросок, основанный почти полностью на Учебник по мосту на arduino.cc.

Я не могу понять, почему пример сценария Bridge сработал для меня (переключение светодиода на выводе 13 путем свертывания URI, например, arduino.local/arduino/digital/13/1), но этот гораздо более простой набросок отвечает моей строкой сбоя «Unrecognized command: hello», когда я скручиваюсь 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

Решение

В этом примере я упустил точное поведение этих функций потока:

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

Это условие будет выполнено только в том случае, если «привет» не является последним сегментом URI. Что меня удивило, так это команда mode в примере кода Bridge. Он проанализировал последний сегмент (ожидая «вход» или «выход») следующим образом:

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

Это сбивало с толку, потому что я не предполагал, что сервер Yun лишит финал '/' когда я свернулся

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

ТЛ; др:

использование readStringUntil('\r') для разбора последнего сегмента URI.

0

Другие решения