[C++, Разработка под Arduino, DIY или Сделай сам, Data Engineering] ESP 8266: отправка данных на сайт методом Get запроса
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет! Это мой первый пост здесь! Решил его написать, чтобы облегчить путь всем начинающим знакомство с ESP 8266. Итак, у нас есть ESP-01.
И USB-UART преобразователь.
Лично у меня такой, но это не суть.
Можно взять и другие модули изменится лишь схема подключения.
Соединяем для прошивки:
Сразу нужно сказать о подводных камнях. Во первых подтянуть ноги GPIO0 и EXT_RSBT к питанию резистором на 10кОм.
Во вторых, для общения с модулем необходимо отключать линии RTS и DTR.В третьих, напряжение питания модуля ESP-01 – 3,3В. Поэтому для питания необходим источник 3,3В.Изначально я хотел использовать 3,3В с USB-UART преобразователя, но как оказалось он не может выдать ток 220мА необходимый для работы ESP-01.Поэтому пришлось использовать стабилизатор на lm1117-3,3. Итак, для работы с ESP-01 можно использовать программу ESPlorer на языке Lua или Arduino.
Пока я пойду по пути наименьшего сопротивления – выбираю Arduino IDE.
Чтобы работать с платами esp8266 необходимо их установить.
Как это сделать расписано на многих ресурсах поэтому на этом останавливаться не буду.
Итак, открываем <Инструменты> и выбираем Generic ESP8266 Module.Далее вставляем скетч.
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
boolean recievedFlag;
String strData, Link;
//Вводим параметры своей точки доступа WIFI
const char *ssid = "**************"; //Название точки доступа
const char *password = "*************"; //Пароль точки доступа
const char *host = "**********************************"; //Адрес нашего веб сервера
const int httpsPort = 443; //Адрес порта для HTTPS= 443 или HTTP = 80
const char fingerprint[] PROGMEM = "5B:FB:D1:D4:49:D3:0F:A9:C6:40:03:34:BA:E0:24:05:AA:D2:E2:01"; //ключ для шифрования
// Обьявление функции подключения к точкt доступа WIFI
void setup() {
delay(1000); //Ждем
Serial.begin(9600); //Настройка скорости UART
WiFi.mode(WIFI_OFF); //Перезапуск точки доступа
delay(1000); //Ждем
WiFi.mode(WIFI_STA); //Настраиваем ESP в режиме клиента
WiFi.begin(ssid, password); //Подключаемся к точке доступа
Serial.println("");
Serial.print("Connecting"); //Пишем в UART что соединяемся
// Ждем соединения
while (WiFi.status() != WL_CONNECTED) {delay(500);
Serial.print(".");} //Пока пытаемся соединиться отправляем в UART точки
Serial.println(""); //Если удачно подключились
Serial.print("Connected to "); //Пишем в UART:
Serial.println(ssid); //Название точки доступа
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //IP адрес назначенный нашему ESP
}
// Обьявление функции передачи данных
void transmit() {
WiFiClientSecure httpsClient; //Обьявляем обьект класса WiFiClient
Serial.println(host); //Пишем в UART: адрес нашего веб сервера,
Serial.printf("Using fingerprint '%s'\n", fingerprint); //Ключ для шифрования.
httpsClient.setFingerprint(fingerprint); //Присваиваем значения ключа для шифрования
httpsClient.setTimeout(15000); //Присваиваем значение паузы (15 секунд)
delay(1000); //Ждем
Serial.print("HTTPS Connecting"); //Пишем в UART: Соединяемся с нашим веб сервером
int r=0; //Обьявляем переменную счетчика попыток подключения
while((!httpsClient.connect(host, httpsPort)) && (r < 30))
{delay(100);Serial.print(".");r++;} //Пока пытаемся соединиться с веб сервером отправляем в UART точки
if(r==30) {Serial.println("Connection failed");} //Если не получилось соединиться пишем в UART, что не получилось
else {Serial.println("Connected to web");} //Если получилось соединиться пишем в UART, что получилось
Link = "/get.php?" + strData; //Формируем строку для GET запроса
Serial.print("requesting URL: "); //Пишем в UART что отправляем GET запрос
Serial.println(host+Link); //Пишем в UART GET запрос
httpsClient.print(String("GET ") + Link + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n"); //Отправляем GET запрос через ESP
Serial.println("request sent"); //Пишем в UART что GET запрос отправлен
while (httpsClient.connected()) //Ловим ответ веб сервера
{String line = httpsClient.readStringUntil('\n');
if (line == "\r") {Serial.println("headers received");break;}}
Serial.println("reply was:"); //Пишем в UART что веб сервер ответил
Serial.println("=========="); //Для красоты выводим в UART разграничивающую линию
String line; //Формируем строку для ответа веб сервера
while(httpsClient.available()){ //Ловим строку от веб сервера
line = httpsClient.readStringUntil('\n');
Serial.println(line);} //Пишем в UART строку от веб сервера
Serial.println("=========="); //Для красоты выводим в UART разграничивающую линию
Serial.println("closing connection");} //Пишем в UART, что закрыли соединение с веб сервером
//Основная функция
void loop() {
while (Serial.available() > 0) // Прием данных из UART для передачи на веб сервер
{ strData +=(char)Serial.read(); // Забиваем строку принятыми данными
recievedFlag = true; delay(2); }; // Поднимаем флаг что получили данные
if (recievedFlag) // Если данные получены
{ Serial.println(strData); // Пишем в UART строку для передачи на веб сервер
transmit(); // Запускаем функцию передачи данных
strData =""; // Очищаем строку от принятых данных
recievedFlag = false;} // Опускаем флаг
}
Закомментировал каждую строчку. Поэтому думаю что особых вопросов возникнуть не должно.
Если кратко: Подключаемся к точке доступа Wi-Fi / Подключаемся к серверу / Отправляем данные принятые из UART.Особо хотел остановиться на строчке:
const char fingerprint[] PROGMEM = "5B:FB:D1:D4:49:D3:0F:A9:C6:40:03:34:BA:E0:24:05:AA:D2:E2:01"; //ключ для шифрования.Т.к. мы используем защищенный протокол HTTPS для общения с вашим сайтом необходимо использовать «ключ для шифрования».Чтобы его получить переходим на сайт: https://www.grc.com/fingerprints.htm
Вставляем в поле название своего хоста и жмем кнопку “Fingerprint Site”.Вставляем полученный ключ в скетч, компилируем и загружаем.Открываем монитор порта и видим:
Ура! Наш Esp подключился к точке доступа.Теперь пишем в верхней строке «id=123456789» и жмем кнопку «Отправить». Обратите внимание чтобы внизу были выставлены такие же настройки «Нет конца строки» и «9600 бод» .
Но для того чтобы сайт принял запрос, сайт нужно сначала создать.Итак для начала я нашел бесплатный хостинг «https://www.000webhost.com».
Это не реклама. Просто не все бесплатные хосты пропускают Get запросы (Пару раз обжегся).
Итак после регистрации получаем свой сайт.Нажимаем кнопку «Управлять сайтом» и…
… переходим в панель управления.
Заходим в «Менеджер файлов».
Здесь переходим в папку «public_html».
Щелкаем по кнопке «New File» и создаем два файла.Файл test.txt оставляем без изменений (сюда будут приходить наши передаваемые данные). Открываем файл «get.php» и вставляем туда следующий код:
<?php
$var1= $_GET['id'];
$fileContent = "Registrated id= ".$var1."\n";
$fileStatus = file_put_contents('test.txt',$fileContent,FILE_APPEND);
if($fileStatus != false)
{
echo "SUCCESS: data written to file";
}
else
{
echo "FAIL: could not write to file";
}
?>
Закрываем и сохраняем.
Теперь пробуем отправку.Если всё правильно настроено то мы должны получить ответ: «SUCCESS: data written to file». Теперь можете открывать файл test.txt….
и радоваться успешной передаче данных.Также просмотреть файл test.txt можно из браузера. Набираем в адресной строке «Название сайта/test.txt».
Вот как-то так.Данный проект является основой. К нему можно прикрутить всевозможные датчики, платы, модули. На стороне веб сервера подключить таблицы, базы данных и т.д. На этом пока все. Прошу сильно не пинать т.к. - мой первый пост. Удачи!
===========
Источник:
habr.com
===========
Похожие новости:
- [Умный дом, DIY или Сделай сам] Делаем систему контроля и управления доступом (СКУД) для умного дома
- [Open source, Программирование, C++] Overview of recent changes in rotor (v0.10… v0.14)
- [Open source, Программирование, C++] Обзор последних изменений в rotor'е (v0.10… v0.14)
- [Умный дом, Интернет вещей, DIY или Сделай сам] Умный дом с нуля своими руками или путешествие длинною в год
- [Программирование, C++, Работа с 3D-графикой, Разработка игр, CGI (графика)] Vulkan. Руководство разработчика. Image view (перевод)
- [Учебный процесс в IT, Карьера в IT-индустрии, Интервью, Data Engineering] Как строилась Data-практика в EPAM
- [Разработка под Arduino, 3D-принтеры, DIY или Сделай сам] Почему первый 3D-принтер стоит собирать самому
- [Программирование, C++, Параллельное программирование] OOX 2.0: Out of Order eXecution made easy
- [Open source, C++, Алгоритмы] Зачем PVS-Studio использует анализ потока данных: по мотивам интересной ошибки в Open Asset Import Library
- [Open source, C++, Алгоритмы] Why PVS-Studio Uses Data Flow Analysis: Based on Gripping Error in Open Asset Import Library
Теги для поиска: #_c++, #_razrabotka_pod_arduino (Разработка под Arduino), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_data_engineering, #_esp8266_arduino, #_c++, #_razrabotka_pod_arduino (
Разработка под Arduino
), #_diy_ili_sdelaj_sam (
DIY или Сделай сам
), #_data_engineering
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:23
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет! Это мой первый пост здесь! Решил его написать, чтобы облегчить путь всем начинающим знакомство с ESP 8266. Итак, у нас есть ESP-01. И USB-UART преобразователь. Лично у меня такой, но это не суть. Можно взять и другие модули изменится лишь схема подключения. Соединяем для прошивки: Сразу нужно сказать о подводных камнях. Во первых подтянуть ноги GPIO0 и EXT_RSBT к питанию резистором на 10кОм. Во вторых, для общения с модулем необходимо отключать линии RTS и DTR.В третьих, напряжение питания модуля ESP-01 – 3,3В. Поэтому для питания необходим источник 3,3В.Изначально я хотел использовать 3,3В с USB-UART преобразователя, но как оказалось он не может выдать ток 220мА необходимый для работы ESP-01.Поэтому пришлось использовать стабилизатор на lm1117-3,3. Итак, для работы с ESP-01 можно использовать программу ESPlorer на языке Lua или Arduino. Пока я пойду по пути наименьшего сопротивления – выбираю Arduino IDE. Чтобы работать с платами esp8266 необходимо их установить. Как это сделать расписано на многих ресурсах поэтому на этом останавливаться не буду. Итак, открываем <Инструменты> и выбираем Generic ESP8266 Module.Далее вставляем скетч. #include <ESP8266WiFi.h>
#include <WiFiClientSecure.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPClient.h> boolean recievedFlag; String strData, Link; //Вводим параметры своей точки доступа WIFI const char *ssid = "**************"; //Название точки доступа const char *password = "*************"; //Пароль точки доступа const char *host = "**********************************"; //Адрес нашего веб сервера const int httpsPort = 443; //Адрес порта для HTTPS= 443 или HTTP = 80 const char fingerprint[] PROGMEM = "5B:FB:D1:D4:49:D3:0F:A9:C6:40:03:34:BA:E0:24:05:AA:D2:E2:01"; //ключ для шифрования // Обьявление функции подключения к точкt доступа WIFI void setup() { delay(1000); //Ждем Serial.begin(9600); //Настройка скорости UART WiFi.mode(WIFI_OFF); //Перезапуск точки доступа delay(1000); //Ждем WiFi.mode(WIFI_STA); //Настраиваем ESP в режиме клиента WiFi.begin(ssid, password); //Подключаемся к точке доступа Serial.println(""); Serial.print("Connecting"); //Пишем в UART что соединяемся // Ждем соединения while (WiFi.status() != WL_CONNECTED) {delay(500); Serial.print(".");} //Пока пытаемся соединиться отправляем в UART точки Serial.println(""); //Если удачно подключились Serial.print("Connected to "); //Пишем в UART: Serial.println(ssid); //Название точки доступа Serial.print("IP address: "); Serial.println(WiFi.localIP()); //IP адрес назначенный нашему ESP } // Обьявление функции передачи данных void transmit() { WiFiClientSecure httpsClient; //Обьявляем обьект класса WiFiClient Serial.println(host); //Пишем в UART: адрес нашего веб сервера, Serial.printf("Using fingerprint '%s'\n", fingerprint); //Ключ для шифрования. httpsClient.setFingerprint(fingerprint); //Присваиваем значения ключа для шифрования httpsClient.setTimeout(15000); //Присваиваем значение паузы (15 секунд) delay(1000); //Ждем Serial.print("HTTPS Connecting"); //Пишем в UART: Соединяемся с нашим веб сервером int r=0; //Обьявляем переменную счетчика попыток подключения while((!httpsClient.connect(host, httpsPort)) && (r < 30)) {delay(100);Serial.print(".");r++;} //Пока пытаемся соединиться с веб сервером отправляем в UART точки if(r==30) {Serial.println("Connection failed");} //Если не получилось соединиться пишем в UART, что не получилось else {Serial.println("Connected to web");} //Если получилось соединиться пишем в UART, что получилось Link = "/get.php?" + strData; //Формируем строку для GET запроса Serial.print("requesting URL: "); //Пишем в UART что отправляем GET запрос Serial.println(host+Link); //Пишем в UART GET запрос httpsClient.print(String("GET ") + Link + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); //Отправляем GET запрос через ESP Serial.println("request sent"); //Пишем в UART что GET запрос отправлен while (httpsClient.connected()) //Ловим ответ веб сервера {String line = httpsClient.readStringUntil('\n'); if (line == "\r") {Serial.println("headers received");break;}} Serial.println("reply was:"); //Пишем в UART что веб сервер ответил Serial.println("=========="); //Для красоты выводим в UART разграничивающую линию String line; //Формируем строку для ответа веб сервера while(httpsClient.available()){ //Ловим строку от веб сервера line = httpsClient.readStringUntil('\n'); Serial.println(line);} //Пишем в UART строку от веб сервера Serial.println("=========="); //Для красоты выводим в UART разграничивающую линию Serial.println("closing connection");} //Пишем в UART, что закрыли соединение с веб сервером //Основная функция void loop() { while (Serial.available() > 0) // Прием данных из UART для передачи на веб сервер { strData +=(char)Serial.read(); // Забиваем строку принятыми данными recievedFlag = true; delay(2); }; // Поднимаем флаг что получили данные if (recievedFlag) // Если данные получены { Serial.println(strData); // Пишем в UART строку для передачи на веб сервер transmit(); // Запускаем функцию передачи данных strData =""; // Очищаем строку от принятых данных recievedFlag = false;} // Опускаем флаг } Если кратко: Подключаемся к точке доступа Wi-Fi / Подключаемся к серверу / Отправляем данные принятые из UART.Особо хотел остановиться на строчке: const char fingerprint[] PROGMEM = "5B:FB:D1:D4:49:D3:0F:A9:C6:40:03:34:BA:E0:24:05:AA:D2:E2:01"; //ключ для шифрования.Т.к. мы используем защищенный протокол HTTPS для общения с вашим сайтом необходимо использовать «ключ для шифрования».Чтобы его получить переходим на сайт: https://www.grc.com/fingerprints.htm Вставляем в поле название своего хоста и жмем кнопку “Fingerprint Site”.Вставляем полученный ключ в скетч, компилируем и загружаем.Открываем монитор порта и видим: Ура! Наш Esp подключился к точке доступа.Теперь пишем в верхней строке «id=123456789» и жмем кнопку «Отправить». Обратите внимание чтобы внизу были выставлены такие же настройки «Нет конца строки» и «9600 бод» . Но для того чтобы сайт принял запрос, сайт нужно сначала создать.Итак для начала я нашел бесплатный хостинг «https://www.000webhost.com». Это не реклама. Просто не все бесплатные хосты пропускают Get запросы (Пару раз обжегся). Итак после регистрации получаем свой сайт.Нажимаем кнопку «Управлять сайтом» и… … переходим в панель управления. Заходим в «Менеджер файлов». Здесь переходим в папку «public_html». Щелкаем по кнопке «New File» и создаем два файла.Файл test.txt оставляем без изменений (сюда будут приходить наши передаваемые данные). Открываем файл «get.php» и вставляем туда следующий код: <?php
$var1= $_GET['id']; $fileContent = "Registrated id= ".$var1."\n"; $fileStatus = file_put_contents('test.txt',$fileContent,FILE_APPEND); if($fileStatus != false) { echo "SUCCESS: data written to file"; } else { echo "FAIL: could not write to file"; } ?> Теперь пробуем отправку.Если всё правильно настроено то мы должны получить ответ: «SUCCESS: data written to file». Теперь можете открывать файл test.txt…. и радоваться успешной передаче данных.Также просмотреть файл test.txt можно из браузера. Набираем в адресной строке «Название сайта/test.txt». Вот как-то так.Данный проект является основой. К нему можно прикрутить всевозможные датчики, платы, модули. На стороне веб сервера подключить таблицы, базы данных и т.д. На этом пока все. Прошу сильно не пинать т.к. - мой первый пост. Удачи! =========== Источник: habr.com =========== Похожие новости:
Разработка под Arduino ), #_diy_ili_sdelaj_sam ( DIY или Сделай сам ), #_data_engineering |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:23
Часовой пояс: UTC + 5