Подписаться на получение новых статей на почту:

ESP8266. Передача данных на сайт GET-запросом. Шаг №59

Всем привет. Итак друзья, рассмотрев в прошлой статье подключение модулей ESP8266 друг к другу, нам осталось научиться делать два последних маневра с ними. А именно передача данных на сайт и управление модулем с сайта. Сегодня мы рассмотрим передачу на сайт. Ну что ж приступим.

Возможность просматривать удаленно информацию, например толи потребление  через розетку, то ли температуру и т.д. можно либо через  специальный сервис, предварительно пройдя регистрацию себя и модуля, например thingspeak.com ( облачный сервис, где необходимо получить свой уникальный код канала, по которому будет проходить идентификация), либо создать у себя на ПК локальный сервис. Либо же, чем мы и воспользуемся, будем передавать информацию на свой сайт или блог. Что для этого надо? Все просто, модуль переводим в режим клиента. Это мы уже умеем делать из предыдущих двух статей. И посылаем GET-запрос. Итак ниже кусок лога настройки и передачи информации, а также приходящего ответа. !!! Дорогие читатели, хочу напомнить Вам, что в конце каждой строки отправленной АТ-команды необходимо ставить возврат каретки с переводом строки \r\n, как мы рассматривали в статье №57 (ESP8266 и AVR). Если в терминале не включена данная функция то не забудьте включить (Append CR-LF). Отправка параметра должна быть без пробела ?t=20.8. Если вдруг не работает , то количество передачи данных можно немного увеличить. Спасибо за справедливые замечания автору Guest ниже приведенных комментариев.

AT+CWMODE=3
AT+RST
AT+CWJAP="ssid","password"
AT+CIPSTART="TCP","ap-impulse.ru",80
CONNECT
OK
AT+CIPSEND=78
OK
> GET /termometer.php?t=20.8 HTTP/1.1
Host:ap-impulse.ru
Connection: close
SEND OK

+IPD,346:HTTP/1.1 200 OK
Server: nginx
Date: Thu, 25 Feb 2016 20:50:12 GMT
Content-Type: text/html
Content-Length: 149
Connection: close
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Vary: Accept-Encoding

<html lang="ru-RU">
<head><meta charset="UTF-8">
<title>Градусник</title>
</head>
<body><br>
<img src="thermometer.png"?t=476 >
</body>
</html>CLOSED

До знака > нам все знакомо. Единственное обратите внимание, что вместо IP которое мы указывали в предыдущей статье для обращения к другому модулю, мы указали доменное имя, также укажите имя и пароль точки доступа (роутер) и длина отправляемого сообщения. Давайте разберем строки после знака  >.  А дальше идет GET –запрос – это один из видов HTTP запроса. С помощью него браузер запрашивает любой файл веб-сервера. Данный запрос состоит только из HTTP запроса без тела. Как видите в первой строке запроса GET /termometer.php?t= 20.8 HTTP/1.1  идет ключевое слово GET, далее  путь к запрашиваемой странице, знак вопроса обозначает конец пути, далее GET параметр t= 20.8 (передаем температуру). HTTP/1.1 - текущая версия протокола. Host:ap-impulse.ru доменное имя ресурса на который передаем данные. Connection: close   даем команду закрыть соединение. Используем программу, в которой выводили температуру в браузер с помощью мк avr. Вставляем в нее выше приведенные AT комманды, в параметр t= подставляем значение тепературы с датчика и показания на сайте.

Итак далее запрос пошел в файл termometer.php, который я заранее создал и  поместил в корень блога. На самом деле путей решения очень много, и я представляю один из них.  Как видите  у нас расширение php, что означает файл будет написан на скриптовом языке общего назначения PHP (PHP Hypertext Preprocessor) и находится на стороне сервера. Данный код обрабатывается движком PHP на веб-сервере, который динамически генерирует HTML. HTML содержит содержимое веб-страницы затем отправляется в веб-браузер пользователя. Таким образом, пользователь никогда не видит реальный код PHP. Данная тема выходит за рамки данной статьи. Поэтом все что нам необходимо, так это для принятия параметра который содержится в запросе прописать следующий код в файле.

<html lang="ru-RU">
<head><meta charset="UTF-8">
<title>data collection</title>
</head>
<body><?php
if (isset ($_GET["t"]))  { $t=$_GET["t"]; }
echo «$t»;  //обратите внимание на кавычки, они должны быть как в строке выше
?>
</body>
</html>

Как видите здесь всего 2 строчки php скрипта,сначала принимает параметр, потом выводит.

ESP8266 and GET-query

На скриншоте слева пример отправки температуры в запросе, а также ручной ввод данных в адресной строке браузера http://www.ap-impulse.ru/termometer.php?t=13, где значение 13 у нас выводится на станице (обведено красным кружочком). Код рисунков мы здесь не рассматриваем, т.к. целью было научится отправлять запросы. И последнее код сверху который начинается с  +IPD,346:HTTP/1.1 200 OK, как вы догадались это ответ, который содержит в себе 346 символов.  Для обработки контролером нам достаточно в этой строке OK. Вот таким образом можно просматривать удаленно какие-нибудь данные. Что ж мы с Вами рассмотрели все варианты работы с модулем ESP8266, кроме одного – это запрос модулю с сайта. Его мы рассмотрим попозже. Ну все друзья мы с Вами реализовали передачу данных на сайт, теперь можем подключать модуль к контроллеру сбора данных и передавать информацию. Но для этого нам потребуется написать веб интерфейс, т.е. на примере пошагово реализуем еще один небольшой проект. Научимся пользоваться веб технологиями, выводить данные наших устройств и ими же удаленно управлять. Этим мы с Вами и займемся в следующей статье. На этом и остановимся. Всем пока.

 

Просмотрено 22248 раз.

Я на Google+

ESP8266. Передача данных на сайт GET-запросом. Шаг №59: 14 комментариев

  1. 1. В приведённом PHP ошибка, там два типа кавычек, если просто скопировать код, то не работает, нужно исправить «$t» на «$t»

    2. Почему перед GET запросом указано 83 байта (AT+CIPSEND=83)? В самом запросе как ни считаю, но 83 символа не выходит.

    3. При указанном варианте запроса и при любом переформатировании запроса выдаёт ошибку 400 Bad Request...

    • Уже разобрался сам.

      В статье есть ещё ошибки.

      В запросе GET /termometer.php?t= 20.8 HTTP/1.1 нужно убрать пробел после t=, иначе температура скидывается в 0

      После команды AT+CIPSEND= нужно указывать количество байт (символов), которое будет передано.

      В примере указано 83, но нужно 78:

      1 строка 35 символов +перевод строки +возврат каретки =37;

      2 строка 18 +пс +вк=20

      3 строка 17 +пс +вк=19

      И в конце обязательно снова перевод строки и возврат каретки, т.е. ещё + 2 символа, итого 78, тогда всё работает.

      Напишите, пожалуйста в тексте про перевод строки и возврат каретки в конце запроса, чтоб люди не мучались и исправьте те кавычки, пробел и AT+CIPSEND

      В целом статья полезная, спасибо, только эти мелочи на практике нивелируют ценность материала.

      Если поправите, то эти комменты можете удалить. Спасибо.

      • Здравствуйте. Насчет кавычек, как то не придал этому значению, когда делал публикацию. Насчет перевода строки и возврата каретки, писал две статьи когда встатвлял команды в Си, а в терминале автоматическидобавляется. Насчет пробела, да дал маху, просто с контроллера передавал строку с учетом первый символ либо + либо — . Спасибо обязательно доплню и поправлю.

  2. Использование нерекомендуемых GPIO 0,1,2,3,15 — эти выводы нерекомендуется использовать для подключения счетчиков и сухого контакта. Входы в некоторых случаях необходимо защищать через оптрон или компаратор для защиты от статики.

  3. Уважаемые господа, подскажите пожалуйста, а как получить данные с ESP8266, если к нему подключен датчик движения и при срабатывании датчика данные по Wi-Fi должны отправляться на сервер. Если я все правильно понял, то в данной статье описывается механизм GET запроса, когда я сам с сайта посылаю запрос на ESP8266 и получаю ответ, а как сделать наоборот что бы данные приходили автоматически при сработке датчика.

    • Не. Здесь идет отправка с модуля на сайт. Модуль первый AT+CIPSTART="TCP","ap-impulse.ru",80 и посылает запрос. Наоборот как раз сложнее сделать. Необходим белый IP. Рученьки мои пока не добрались. Так что в правильном направлении идете.

  4. здравствуйте не попадался ли Вам случайно кусок кода на Си для парсинга URI чтоб получить отдельно домен и строку с параметрами?

  5. Здравствуйте, все сделал как в статье, Ваш сайт открывается нормально. Пытался выполнить запрос на свою страницу, но выдает ошибку. Вот как все делал:

    AT+CIPSTART="TCP","economics.zzz.com.ua",80 CONNECT

    OK

    AT+CIPSEND=85

    OK

    > GET /termometer.php?t=20.8 HTTP/1.1

    Host:economics.zzz.com.ua

    Connection: close

    busy s...

    Recv 85 bytes

    SEND OK

    +IPD,311:HTTP/1.1 400 Bad Request

    Server: nginx

    Date: Fri, 07 Apr 2017 13:51:47 GMT

    Content-Type: text/html

    Content-Length: 166

    Connection: close

    400 Bad Request

    400 Bad Request

    nginx

    CLOSED

    Буду очень благодарен за Вашу помочь.

    • Здравствуйте. Такое может быть из-за посылки меньшего количества байтов, можно добавить парочку лишних байт в виде переноса строки

      • Спасибо Вам огромное за помощь, все получилось. А Вы пробовали подключить Arduino и ESP8266?

      • Пожалуйста. Не было надобности.

  6. Здравствуйте, следовала вашей инструкции, но почему-то не приходят данные- после ввода строки «Connection: close» сразу появляется надпись CLOSED. Не подскажете, в чем может быть проблема?

    • Здравствуйте. Спасибо за обращение. попробуйте еще раз все просмотреть внимательно. Либо я смотрю по коментам последний раз успешно пробовали в 2017 году. То могло что-то поменяться со стороны сервера, и какие-то функции на странице начали криво работать. На досуге посмотрю. Т.к. в дальнейшем мои проекты это также охватывает. Спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting