Arduino mkr1000 не печатает серийно после GET с использованием библиотеки aRest - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать REST-сервер на Arduino MKR1000.после поиска в Google я наткнулся на библиотеку aRest, которая обрабатывает большую часть необходимого мне материала.

документация библиотеки aRest

Поэтому я создал образец эскиза на основе руководств.Вот код:

#include < SPI.h >
#include < WiFi101.h >
#include < aREST.h >

aREST rest = aREST();

int status = WL_IDLE_STATUS;
WiFiServer restServer(80);

char ssid[] = "user";  // not actual username
char pass[] = "pass";  // not actual password


int clapMode(String data){
  Serial.println("Request Recieved: " + data);
}


void setup() {

 Serial.begin(115200);

 rest.set_id("000");
 rest.set_name("MKR1000");
 rest.function("test",clapMode);

 while ( status != WL_CONNECTED) {
   Serial.print("Attempting to connect to SSID: ");
   Serial.println(ssid);
   // Connect to WPA/WPA2 network. Change this line if using open or WEP 
network:
   status = WiFi.begin(ssid, pass);
   // wait 10 seconds for connection:
   delay(10000);
 }

 Serial.println();

 // you're connected now, so print out the status:
 printWifiStatus();

 // Start server
 restServer.begin();
 Serial.println(F("Listening for connections..."));

}

void loop() {
  WiFiClient client = restServer.available();
    if (!client) {
    return;
  }
  while(!client.available()){
    delay(1);
  }
  rest.handle(client);
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip); 

  IPAddress subnet = WiFi.subnetMask();
  Serial.print("Netmask: ");
  Serial.println(subnet);

  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("Gateway: ");
  Serial.println(gateway);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Код работает в основном.После использования POSTMAN для выполнения GET arduino может дать соответствующий ответ.

Теперь для части, которая не работает, это конечная точка, которую я только что создал, используя этот код

rest.function("test",clapMode);

после выполнения GET в почтальоне, arduino может дать ответ, но он должен выполнить этот код

int clapMode(String data){
  Serial.println("Request Recieved: " + data);
}

, но на моем серийном мониторе я ничего не получаю.

Serial Monitor

GET Postman

Также я не смог найти, как адаптировать ответ arduino от запроса.Как мне это сделать?

Большое спасибо

1 Ответ

1 голос
/ 23 мая 2019

Вы должны отправить запрос на <host>/test?params=0, а не <host>/clapMode.

Кроме того, вы можете изменить идентификатор и имя с помощью

rest.set_id("device ID");
rest.set_name("device name");

и добавить переменные с помощью

rest.variable("variable name", &variable);

Ответ жестко запрограммирован в библиотеке, поэтому, если вы хотите добавить / удалить другой материал, вы должны отредактировать библиотеку самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...