В этом руководстве по ESP8266 мы покажем, как создать простой веб-сервер ESP8266 с использованием библиотеки ESPAsyncWebServer. Веб-сервер закодирован для отображения «привет от модуля WiFi ESP12E!» в браузере, когда пользователи посещают сайт. Этот простой пример поможет понять, как создать веб-сервер на базе ESP8266. Этот простой пример можно легко расширить, включив в него дополнительные функции и возможности для создания любого веб-приложения IoT (Интернета вещей).

Здесь веб-сервер является асинхронным, он сможет принимать соединения от нескольких клиентов или пользователей и будет отображать «Привет из модуля ESP12E!». HTML-код хранится в программной флэш-памяти ESP8266 с использованием строкового литерала. Мы будем использовать модуль ESP12E с интегральной микросхемой ESP8266 и использовать библиотеки ESPAsyncWebServer и ESPAsyncTCP для создания веб-сервера. Программирование кодируется и загружается с помощью Arduino IDE.

Предпосылки:

Если вы не знаете, как программировать ESP8266 с помощью Arduino IDE, настройте плату ESP8266 на Arduino, см. руководство Мигание светодиода с помощью ESP8266 и Arduino IDE с видео и изображениями.

Демо-видео:

В следующем видео демонстрируется асинхронный веб-сервер на базе ESP8266.

Что такое библиотека ESPAsyncWebServer?

Библиотека ESPAsyncWebServer — это библиотека веб-сервера, которая асинхронно подключает клиента к серверу. Асинхронно обслуживая клиентов, несколько клиентов могут обслуживаться одновременно, не создавая проблем с перегрузкой из-за потребности в обслуживании. Это означает, что нагрузка на сервер при большом количестве клиентов снижается. Это связано с тем, что при асинхронном соединении ресурсы, используемые одним клиентом, освобождаются при закрытии соединения. Таким образом, с помощью библиотеки ESPAsyncWebServer(HTTP), которая работает поверх библиотеки ESPAsynchTCP (TCP), можно обрабатывать более одного клиентского подключения. Библиотека использует концепцию событий и обработчиков. Обработчики — это подпрограммы, которые выполняются на основе событий. Если происходит какое-либо событие, запускаются запросы, и обработчики выполняют запрошенную процедуру. Поскольку используются обработчики, проверяющие триггеры событий, нам не нужно ничего писать в функции loop(). Библиотека использует механизм шаблонов для рендеринга окончательного веб-HTML. Механизм обработки шаблонов объединяет содержимое (html, css и т. д.) и переменные, используя заполнители шаблонов в параметрах запроса клиента, чтобы отобразить окончательную веб-страницу в формате HTML.

ESPAsyncWebServer можно загрузить и установить со следующего URL-адреса:

https://github.com/me-no-dev/ESPAsyncWebServer

Поскольку мы используем модуль Wi-Fi ESP12E, нам нужна библиотека ESPAsynchTCP, которую можно загрузить и установить по следующему URL-адресу:

https://github.com/me-no-dev/ESPAsyncTCP

Если вы используете модуль Wi-Fi ESP32, вам необходимо загрузить и установить следующую библиотеку AyncTCP вместо библиотеки ESPAsynchTCP:

https://github.com/me-no-dev/AsyncTCP

Ниже показан модуль Wi-Fi ESP12E на макетной плате, используемый в этом примерном проекте.

Код асинхронного веб-сервера ESP8266

Ниже приведен простой пример кода для асинхронного веб-сервера с модулем ESP8266, который отображает простое сообщение Hello от модуля ESP12E.

#include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> const char ssid[]="SSID"; const char password[]="PASSWORD"; const char webpage[] PROGMEM = R"=====( <html> <head> <title>ESP12E Simple Web Page</title> </head> <body> <p>Hello from ESP12E Module!</p> </body> </html> )====="; AsyncWebServer server(80); void setup() { Serial.begin(115200); delay(2000); Serial.printf("Connecting to %s....\n", ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); if(WiFi.waitForConnectResult() != WL_CONNECTED){ Serial.printf("WiFi connection failed!Rebooting ...\n"); delay(1000); ESP.restart(); } Serial.printf("Connected to %s\n", ssid); Serial.printf("Web Server IP address: %s\n", WiFi.localIP().toString().c_str()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", webpage); } ); server.begin(); } void loop() { }

1. В приведенный выше код мы включили библиотеки ESPAsyncWebServer и ESPAsynchTCP для создания веб-сервера.

#include ‹ESPAsyncTCP.h›
#include ‹ESPAsyncWebServer.h›

2. Затем мы настроили учетные данные сети Wi-Fi. Его следует заменить вашими собственными учетными данными WiFi SSID и PASSWORD.

const char ssid[]=”SSID”;
const char password[]=”PASSWORD”;

3. Мы сохранили наш HTML-код в памяти программы как строковый литерал. HTML-код — это базовый код, который просто отображает приветствие от модуля ESP12E.

4. Используя AsyncWebServer server(80), мы создали объект сервера с номером порта 80.

5. В функции setup() мы установили скорость передачи данных 115200 для последовательной связи с Wi-Fi-модулем ESP12E. Затем мы печатаем сообщение пользователю «connecting to…», предоставленный ssid, чтобы информировать о ходе подключения за сценой, которую пользователи могут видеть на последовательном мониторе Arduino IDE. Используя WiFi.mode(), мы настроили ESP8266mod в режим станции. Используя оператор if(WiFi.waitForConnectResult() ), мы проверяем подключение Wi-Fi к точке доступа (AP). Если соединение не удалось, мы печатаем сообщение «WiFi соединение не удалось! Перезагрузка …\n», чтобы сообщить пользователям, что соединение не удалось, и после задержки в 1 секунду перезапустите модуль. Если соединение прошло успешно, мы распечатываем сообщение «Подключено к ssid», а также распечатываем IP-адрес, чтобы сообщить пользователю, к какому IP-адресу он подключен. Используя метод on объекта server, server.on(), мы создаем обработчик, который обрабатывает HTTP-запросы от входящих клиентов. Всякий раз, когда есть запрос, мы отправляем содержимое веб-страницы, сохраненное в программном коде в описании 3 выше.

6. С помощью server.begin() мы запускаем асинхронный сервер.

Ниже показано сообщение, напечатанное в Arduino IDE.

На следующем рисунке показан вывод веб-страницы HTML на IP-адресе нашего сервера ESP8266 (192.168.1.101).

См. следующий учебник ESPAsyncWebServer Светодиод, управляемый WiFi с использованием ESP8266.

Первоначально опубликовано на https://www.ee-diary.com.