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

esp8266, arduino uno, парсер погоды с сайта

Salavat

New member
Добрый день.
Решил сделать погодную станцию.
К Adruino Uno подключены DHT22, esp8266, LCD Odroid-Show.
LCD Odroid-Show принимает с ардуино строку, разделенную символами "#", в которой находятся параметры с датчика температуры и влажности + хочу чтоб передавались в этой строке данные прогноза погоды на сегодня и на завтра (ночь+день). LCD Odroid-Show принимает строку, разбирает и отображает на экране. Благо он самодостаточен, построен на arduino uno.
Передача по I2C - работает.

Для получения прогноза погоды я у себя на сайте разместил php скрипт, который разбирает XML прогноз с Яндекса и отображает это всё в виде простой строки вида: -11#yasno#63#731#-10#-7*
где: Текущая температура # Облачно/ясно и т.п.#влажность#давление#темп. завтра ночью#температура завтра днем*

Проблема простая - не могу прочитать эту строку с сайта(.
Модуль соединяется с роутером нормально.

Команда запроса:
Код:
String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += DST_IP;
  cmd += "\",80";
  Serial.println(cmd);
  dbgSerial.println(cmd);
  delay(2000);
  if(Serial.find("Error")) return;
  cmd = "GET [URL]http://mysite.ru/weather/index.php[/URL]";
  cmd += " HTTP/1.0\r\nHost: [URL]http://mysite.ru\r\n\r\n[/URL]";
  Serial.print("AT+CIPSEND=");
  Serial.println(cmd.length());
  if(Serial.find(">")){
    dbgSerial.print(">");
  }else{
    Serial.println("AT+CIPCLOSE");
    dbgSerial.println("connection timeout");

    delay(3000);
    return;
  }
  Serial.print(cmd);
Как мне вытащить текст с сайта?

И еще, почему-то SoftwareSerial не работает для отладки.
Если вывожу результат в Serial, то в мониторе:
Код:
AT+RST
AT+CWMODE=1
AT+CWJAP="380v","passw"
AT+CIPMUX=0
AT+CIPSTART="TCP","92.53.125.54",80
AT+CIPSEND=89
GET [URL]http://mysite.ru/weather/index.php[/URL] HTTP/1.0
Host: [URL]http://mysite.ru[/URL]

÷ GET [URL]http://mysit)üÕ;öÿÓû1{¥Þ7ì¹÷<èÄŸmÙÌ~~al.^i/ýOÿÿÍÍ÷v.ru/weather/index.php[/URL] HTTP/1.0
Host: [URL]http://mysite.ru[/URL]


AT+CIPSTART="TCP","92.53.125.54",80
AT+CIPSEND=89
AT+CIPCLOSE
v.ru/weather/index.php HTTP/1.0
Host: [URL]http://mysite.ru[/URL]

AT+CIPCLOSE
 
Последнее редактирование:

Victor

Administrator
Команда форума
Ваш пост будет более читабельным, если код поместить в тег CODE
Но спасибо, что заполнили теги :)
 

Victor

Administrator
Команда форума
Вот посмотрите скриншот. Далее в выпадающем списке можно выбрать язык программирования, чтобы все стало еще красивее :)
Или ввести вручную [ CODE=Brainfuck ] (без пробелов)
Поддерживается около 200 языков программированияbbcode.png
 

Victor

Administrator
Команда форума
Я думаю, что вы рано закрываете соединение, вернее даже не так: рано пытаетесь получить ответ.
Считывайте данные в буфер, по его наполнению ищите нужный паттерн. Для начала просто выводите все данные в отладочную консоль.
 

JustACat

Moderator
Команда форума
Salavat, по своему (и не только) опыту скажу сразу: работать с ESP под Arduino на delay и Serial.find - неблагодарное дело...
Если это все у вас в итоге и заработает, то от любой вспышки на солнце или изменения погоды в Тихуане работать будет переставать.
Так что лучше сразу отказывайтесь от этой затеи и смотрите в сторону чего-то более серьезного...

Если же все таки очень хочется, в который раз повторю (тут на форуме): при работе с AT прошивкой (если уж решились вообще на это) для начала нужно отладить весь алгоритм общения с ESP через терминал с ПК (без Arduino)! При этом составить для себя список всех возможных вариантов реакции ESP на разные непредвиденные ситуации.

Программы терминалы, и ссылка на документацию - по которой, кстати, есть множество примеров (включая, думаю, и ваш) - все у меня в подписи (прямо красным выделено), почитайте, пожалуйста.

Update: проверьте, пожалуйста, выводит ли Ардуинишный println оба символа переноса строки?
ESP обязательно нужны оба: CR+LF (либо "\r\n").
Лучше явно дописывать их в команду и выводить в итоге через Serial.print();

Ну и на всякий напишу:
- не используйте SoftwareSerial для общения с ESP. Они почти не дружат (только на 9600).
- проверьте, какие у вас в настройках SoftwareSerial и HardwareSerial стоят размеры буферов приема/отправки?
 
Последнее редактирование:
Сверху Снизу