• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 строки
читайте учебники по программированию на ардуино
 
Сверху Снизу