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

0

Я создал следующий эскиз, основанный почти полностью на учебнике 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 как кнопка на главном экране).

Теги:
arduino
rest
arduino-yun

1 ответ

0
Лучший ответ

В этом примере я пропустил точное поведение этих функций 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню