POST запрос с библиотекой WiFiNina на Arduino Uno Wifi Rev 2 - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь написать код для платы Arduino Uno WiFi Rev2.В частности, я хотел бы отправить некоторые данные, используя HTTP-запрос POST, в конечную точку API, которую я написал.Я проверил эту конечную точку с Почтальоном, и она отлично работает.Однако, когда я пытаюсь отправить свои данные с помощью библиотеки WiFiNina (https://www.arduino.cc/en/Reference/WiFiNINA),, запрос никогда не достигает моей конечной точки.

Мой скриншот Arduino состоит из двух файлов. Первый - мой «основной» файлкоторая служит точкой входа для моего кода и имеет дело с большей частью функциональности моего кода. В этом файле я настраиваю WiFiClient, как указано в документации Arduino:

#define URL "myappdomain.azurewebsites.net"
...
WiFiClient client;
int status = WL_IDLE_STATUS;
...
void setup(){
...
status = WiFi.begin(WifiSSID, WifiPassword);

  while (WiFi.status() != WL_CONNECTED) {  //Wait for the WiFI connection completion
    delay(500);
    Serial.println("Waiting for connection");
  }
...
}
...

void loop(){
...
String requestBody = 
    "{\n    \"clientReadings\": {\n        \"sensorA\": [],\n        \"sensorB\": []\n    },\n    \"deviceId\": 1,\n    \"millilitersConsumed\" : 999\n}";

//send the request
postData(requestBody);
...
}

Во втором моем файле, вот часть моегокод, который обрабатывает этот запрос API:

void postData(String body){
  if(WiFi.status()== WL_CONNECTED){   //Check WiFi connection status

     if (client.connect(URL, 80)){
        client.println("POST /api/PGWC HTTP/1.1"); 
        client.print("Host: ");
        client.println(URL);
        client.println("Content-type: application/json");
        client.println("Accept: */*");
        client.println("Cache-Control: no-cache");
        client.print("Host: ");
        client.println(URL);
        client.println("Accept-Encoding: gzip, deflate");
        client.print("Content-Length: ");
        client.println(body.length());
        client.println("Connection: close");
        client.println();
        client.println(body);
     }else{
      Serial.println("Error connecting to server");
     }
  }
}

Я структурировал этот запрос на основе примеров и документации, которые я нашел в Интернете для библиотеки WiFiNina. (Вот один пример: https://www.arduino.cc/en/Reference/WiFiNINAClient). Заголовокинформация и тело основаны на запросах, которые я отправил через Почтальон, поэтому я считаю, что содержание моего запроса является точным. Я считаю, что могу подключиться к серверу через линию "client.connect", потому что яЯ никогда не видел сообщение об ошибке, напечатанное на мониторе Serial, но я видел, что Serial Monitor отображает содержимое "Serial.println"заявления, которые я поместил до моих заявлений "client.println".Тем не менее приложение-функция Azure, в котором размещаются конечные точки API, не показывает никаких признаков попадания в конечную точку API.Когда я отправляю эти же данные в Postman, приложение-функция прекрасно регистрирует соединение.

Когда я пытаюсь распечатать содержимое body, URL и body.length () на последовательном мониторе из postDataфункция, все выглядит так, как ожидалось.Кроме того, я пробовал разные варианты в строке «Соединение: закрыть», но безрезультатно.

Для справки, вот содержимое, которое Почтальон сообщает мне, что отправляет, когда оно успешно достигает конечной точки API.Я также попробовал порт 443. Он прекрасно работает в Почтальоне, но, опять же, не в Arduino.

Host: myappdomain.azurewebsites.net:80
Content-Type: application/json
User-Agent: PostmanRuntime/7.17.1
Accept: */*
Cache-Control: no-cache
Postman-Token: [some UUID, some other UUID]
Host: myappdomain.azurewebsites.net:80
Accept-Encoding: gzip, deflate
Content-Length: 130
Connection: keep-alive
cache-control: no-cache

{
    "clientReadings": {
        "sensorA": [],
        "sensorB": []
    },
    "deviceId": 1,
    "millilitersConsumed" : 123
}```

(I've changed the domain for this post, so this request won't work if you try to plug it into Postman because myappdomain.azurewebsites.net is not my real domain)

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