• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Непонятный ответ от OpenWeatherMap

Mihay

New member
Модуль ESP-01 подключен к Ардуине. Часть кода на запрос и попытка парсить полученные данные:

cmd = "GET /data/2.5/weather?id=" + String(city) + "&appid=" + String(api);
cmd += " HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n";

dbgSerial.print("AT+CIPSEND=");
dbgSerial.println(cmd.length());
if(dbgSerial.find(">")){
Serial.print(">");
}
else
{
dbgSerial.println("AT+CIPCLOSE");
Serial.println("connection timeout");
delay(1000);
return;
}
Serial.println(cmd);
dbgSerial.println(cmd);
delay(3000);
if(dbgSerial.find("SEND OK"))
{
Serial.println("Request send");
delay(5000);
}
Serial.println("Begin JSON");
while(dbgSerial.available()){ //Если получили ответ от сервера...
line = dbgSerial.readStringUntil('\r'); //Добавляем полученные данные в строку line
}
Serial.println(line);

DeserializationError error = deserializeJson(root, line);

получаю ответ от сервера
+IPD,784:HTTP/1.1

784 размер полученных данных. Где они? Говорят они во второй строке. Как причитать вторую строку?
 

CodeNameHawk

Moderator
Команда форума
Код:
while(dbgSerial.available()){ //Если получили ответ от сервера...

line = dbgSerial.readStringUntil('\r'); //Добавляем полученные данные в строку line

Serial.println(line);

}
 

Mihay

New member
Я так понимаю что там 2 строки в ответе от сервера приходит. Первая строку я получаю без проблем, а вторую не могу никак получить. Ответ с кодом .
while(dbgSerial.available()){ //Если получили ответ от сервера...
line = dbgSerial.readStringUntil('\r'); //Добавляем полученные данные в строку
line Serial.println(line);
}
не помог. Там все равно 1 строка читается а 2 вторая нет.
Не хватает знаний чтоб изменить
dbgSerial.readStringUntil('\r')
на что-то другое, которое бы читало 2 строки
 

CodeNameHawk

Moderator
Команда форума
Читайте посимвольно Serial.read()
Проще всего залить скетч в саму есп.
 

nikolz

Well-known member
Я так понимаю что там 2 строки в ответе от сервера приходит. Первая строку я получаю без проблем, а вторую не могу никак получить. Ответ с кодом .

не помог. Там все равно 1 строка читается а 2 вторая нет.
Не хватает знаний чтоб изменить
dbgSerial.readStringUntil('\r')
на что-то другое, которое бы читало 2 строки
читайте учебники по программированию на ардуино
 
Сверху Снизу