получил ответ от сервера OpenWeatherMap

Mihay
Offline
Зарегистрирован: 07.08.2020

получил ответ от сервера OpenWeatherMap +IPD,792:HTTP/1.1

Я так понимаю что 792 это размер буфера данных. А как получить эти данные? 

Кто в курсе?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Следующую строку (две строки на самом деле) читать не пробовали? По идее данные идут через два перевода строки после заголовка. А у Вас в коде после чтения этой строки больше ничего не читается.

Mihay
Offline
Зарегистрирован: 07.08.2020

Вот я и хочу прочесть вторую строку, а как это сделать? Пожалуйста подскажите!

Вот  код который у меня:

  while(dbgSerial.available()){              //Если получили ответ от сервера...
    line = dbgSerial.readStringUntil('\r');  //Добавляем полученные данные в строку line
  }
  Serial.println(line);

 DeserializationError error = deserializeJson(root, line);

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mihay пишет:

Вот я и хочу прочесть вторую строку, а как это сделать? 

А как Вы первую читаете?
Вот здесь где у Вас чтение первой строки?

Mihay пишет:

  while(dbgSerial.available()){              //Если получили ответ от сервера...
    line = dbgSerial.readStringUntil('\r');  //Добавляем полученные данные в строку line
  }
  Serial.println(line);

 DeserializationError error = deserializeJson(root, line);

Вот также и читайте следующие строки.

Mihay
Offline
Зарегистрирован: 07.08.2020

Я не очень знаком с механизмом чтения строк. 

Первую строку я прочитал а дальше?

  Serial.println("Begin JSON");
  while(dbgSerial.available()){              //Если получили ответ от сервера...
    line = dbgSerial.readStringUntil('\n');  //Добавляем полученные данные в строку line
    line2 = dbgSerial.readStringUntil('\n'); 
    line3 = dbgSerial.readStringUntil('\n'); 
  }

Так не получается прочесть!

Я спрашиваю у Вас, как прочесть вторую строку?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, я не знаю, что Вам отвечать. То, что у Вас написано, ....

В общем, возьмите для начала какую-нибудь книжку (хоть Блума) и как следует изучите вопрос. Я думал, что Вы этот код сами писали, но теперь понял, что это не так и что Вы ни строчки в нём не понимаете. Пока не начнёте понимать, Вы ничего не напишете - разве что кто-то напишет за Вас, но для этого есть раздел "Ищу исполнителя".

Mihay
Offline
Зарегистрирован: 07.08.2020

Подскажите как? 

Использование кода

  while(dbgSerial.available()){              //Если получили ответ от сервера...
    char c = dbgSerial.read();
      line2+=c;
   }
  Serial.println(line2);

тоже выводит сообщение +IPD,792:HTTP/1.1

куда девается вторая строка - вообще не пойму. Если она там есть, то должна вывести 2 строки. 

Я прошу помочь мне, если вам не трудно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Слишком много надо подсказывать, я не зря Вам посоветовал изучить материал по книге.

Ну, для начала, например, Ваш цикл

while(dbgSerial.available())

предполагает, что ответ пришёл сразу весь целиком. 

Если же часть ответа задержится хоть на микросекунду, то Ваша проверка dbgSerial.available() выдаст, что больше ничего нет, а о том, что остаток ответа придёт через микросекунду Вы никогда не узнаете потому, что больше не проверяете.

И тут много таких тонкостей.

Mihay
Offline
Зарегистрирован: 07.08.2020

Я читал книгу Блума. О таких тонкостях там не говориться. О проверке полного сообщения тоже, особенно когда не знаешь какое оно.

В интернете все перекопал - не могу никак найти похожую ситуацию. 

Все варианты перепробовал, ну никак не могу получить 2 -ую строку. 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Попробуйте читать в буфер Serial.readBytes() и  увеличить ожидание Serial.setTimeout()

Вдруг поможет))

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

В http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/poluchil-otvet-ot-servera-openweathermap#comment-552724 дали ответ.

Перефразирую - нужна задержка в цикл.