Привет! Это мой первый пост здесь! Решил его написать, чтобы облегчить путь всем начинающим знакомство с 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».
Вот как-то так.
Данный проект является основой. К нему можно прикрутить всевозможные датчики, платы, модули. На стороне веб сервера подключить таблицы, базы данных и т.д.
На этом пока все. Прошу сильно не пинать т.к. - мой первый пост. Удачи!
gsaw
Почему не POST? было бы логичнее. «Отправка данных методом GET» от этого словосочетания глаза щиплет.
mvv-rus
По поводу использования GET для посылки данных — оставлю здесь одну старую историю, почему так делать нельзя
(цитирую по книге А.Фримена про ASP.NET MVC Framework)
dopusteam
Непонятно, как это сработало, там авторизации не было что ли?
nochkin
Если разработчики не понимают разницу между POST и GET, то есть шанс, что они и про авторизацию не в курсе. Или просто могли сделать авторизацию через GET («Кликай тут, но только если ты реально админ»).