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