Цель этого урока - объяснить, как настроить веб-сервер HTTP на ESP8266 и делать к нему простые запросы с помощью веб-браузера.
В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Как настроить Arduino IDE для поддержки ESP8266, узнать можно здесь.
Тесты проводились с использованием платы NodeMCU, очень дешевая и простая в использовании плата ESP8266.
Прежде всего, подключим библиотеку ESP8266WiFi, которая содержит необходимые функции для подключения ESP8266 к сети Wi-Fi. Вы можете прочитать более подробное описание того, как подключить ESP8266 к сети Wi-Fi в предыдущем уроке.
Затем подключим библиотеку ESP8266WebServer, которая сделает доступным класс ESP8266WebServer, его будем использовать в данном примере. Естественно, у этого класса есть несколько доступных методов, которые помогут нам настроить сервер и обрабатывать входящие HTTP-запросы, не беспокоясь о деталях реализации на низком уровне. Вы можете посмотреть возможности библиотеки здесь.
#include "ESP8266WiFi.h" #include "ESP8266WebServer.h"
Далее объявляем глобальную объектную переменную из ранее упомянутого класса, чтобы мы могли получить к ней доступ в наших функциях.
В качестве аргумента для конструктора этого класса мы передадим порт, который сервер будет слушать. Поскольку 80 - порт по умолчанию для HTTP. Будем использовать это значение, поэтому нам не нужно будет указывать номер порта в URL-адресе при доступе к нашему серверу ESP8266 с помощью браузера.
ESP8266WebServer server(80);
Нам нужно предварительно настроить HTTP-сервер перед его запуском.
Также открываем последовательное соединение для отладки.
Serial.begin(115200);
Затем будет подключаться к сети Wi-Fi, как показано в приведенном ниже коде. Если вам нужно подробное объяснение того, как подключиться к сети Wi-Fi ESP8266, посмотрите предыдущий урок по данной теме.
#include <ESP8266WiFi.h> const char* ssid = "NetworkName"; const char* password = "NetworkPass"; byte tries = 10; // Попыткок подключения к точке доступа void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (--tries && WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("."); } if (WiFi.status() != WL_CONNECTED) { Serial.println("Non Connecting to WiFi.."); } else { // Иначе удалось подключиться отправляем сообщение // о подключении и выводим адрес IP Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } }
Поскольку мы собираемся выполнять HTTP запросы, нам нужно знать IP-адрес, на котором ESP8266 прослушивает входящие запросы, это будет локальным IP-адресом назначенным в сети Wi-Fi.
Чтобы получить это значение просто вызываем метод localIP для глобальной переменной WiFi и затем выведем его в последовательный порт, чтобы мы знали, какой URL-адрес вызывать в нашем веб-браузере.
Serial.println(WiFi.localIP());
Затем начнем указывать, какой код выполнять, когда HTTP-запрос выполняется для каждого пути. Чтобы сделать это, вызываем метод для ранее объявленного глобального объекта сервера.
Более элегантный метод заключается в определении функции обработки где-нибудь в нашем коде и передаче ее функции on вместе с URL-адресом, который будет запускать выполнение этой функции.
server.on("/", handleRootPath);
Таким образом, код указывает, что когда HTTP-запрос получен по корневому («/») пути, он инициирует выполнение функции «handleRootPath». Обратите внимание, что мы не указываем IP-адрес или порт, на который ESP8266 прослушивает, а только путь URL-адреса с этого момента.
Для простоты предположим, что функция «handleRootPath» отвечает только текстом «Greetings from the site arduino-tex.ru» на входящий HTTP-запрос. Итак, чтобы определить ответ на запрос, мы вызываем метод send.
Хотя метод может быть вызван с другим набором аргументов, его простейшая форма состоит в получении кода ответа HTTP, типа и содержимого.
void handleRootPath() { //Обработчик для корневого пути server.send(200, "text/plain", "Greetings from the site arduino-tex.ru"); }
В этом случае мы отправляем код 200, который соответствует ответу «ОК». Затем мы указываем тип контента как «text/plain», поскольку мы отвечаем только простым «Greetings from the site arduino-tex.ru» фактическим текстом ответа.
Естественно, эту функцию нужно объявить вне функции настройки.
Мы также можем указать функцию обработки при вызове метода on. В этом случае нам не нужно объявлять отдельную функцию, и мы можем делать все в функции настройки, как показано ниже.
server.on("/other", []() { //Определите функцию обработки для пути server.send(200, "text / plain", "Additional page"); });
В этом случае, если мы получим HTTP-запрос по пути «/other», мы ответим выражением «Additional page».
Теперь, чтобы запустить наш сервер, мы вызываем метод begin объекта server. Это последняя строка кода, которую нам нужно включить в нашу функцию настройки.
server.begin();
Наконец, чтобы обрабатывать фактический входящий HTTP-запрос, нам нужно вызвать метод handleClient в функции основного цикла.
void loop() { server.handleClient(); }
#include "ESP8266WiFi.h" #include "ESP8266WebServer.h" ESP8266WebServer server(80); const char* ssid = "NetworkName"; const char* password = "NetworkPass"; byte tries = 10; // Попыткок подключения к точке доступа void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (--tries && WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } if (WiFi.status() != WL_CONNECTED) { Serial.println("Non Connecting to WiFi.."); } else { // Иначе удалось подключиться отправляем сообщение // о подключении и выводим адрес IP Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } server.on("/other", []() { //Определите функцию обработки для пути server.send(200, "text / plain", "Additional page"); }); server.on("/", handleRootPath); //Свяжем функцию обработчика с путем server.begin(); //Запускаем сервер Serial.println("Server listening"); } void loop() { server.handleClient(); //Обработка входящих запросов } void handleRootPath() { //Обработчик для корневого пути server.send(200, "text/plain", "Greetings from the site arduino-tex.ru"); }
Чтобы протестировать код, нам просто нужно открыть наш браузер и сделать HTTP-запрос на IP-адрес ESP8266, по пути, который мы определили ранее. Формат показан ниже:
http://serverIP:port/path
Как указывалось ранее, мы прослушиваем порт 80, браузер примет его по умолчанию, поэтому нам не нужно его указывать:
http://serverIP/path
Итак, заменяем serverIP на IP, который получаем в мониторе порта, и делаем запрос, как показано на рисунке ниже.
В этом случае отображается только IP, потому что браузер удалил «/» из корневого пути. Кроме того, браузер удалил http: //. Хотя некоторые браузеры выполняют запрос, когда мы указываем только IP, другие предполагают, что мы хотим найти что-то в поисковой системе. Итак, самый безопасный способ - всегда указывать http: // перед IP.
Пример на рисунке ниже показывает запрос по пути «/other», который мы также прописали в коде.
Наконец, обратите внимание, что если мы укажем путь, который не определен, ESP вернет сообщение, указывающее, что ресурс не был найден, как мы можем видеть на рисунке ниже, где отправили HTTP-запрос по пути «/not».
Важно! IP-адрес, который будет выводить ESP8266 в монитор порта, является локальным IP-адресом в сети. Клиент вне сети не сможет связаться по этому IP-адресу (и, следовательно, URL-адрес не будет работать). Чтобы клиент мог связаться с ESP8266 из-за пределов своей сети, ему необходимо будет использовать внешний IP-адрес сети, а маршрутизатор должен быть настроен для переадресации запросов с общедоступного IP-адреса на локальный IP ESP8266. Поскольку переадресация портов зависит от используемого маршрутизатора, объяснение того, как это сделать выходит за рамки этого урока.
Понравился ESP8266 уроки.
Настройка простого HTTP веб-сервера? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Скетч простого HTTP веб-сервера на ESP8266 .ino | 2 Kb | 1016 | Скачать |
Уроки ESP8266 (заметки)
30 сентября , 2021
Комментариев:0
Файлов для скачивания:1
Фото:3
Понравилась статья? Нажми
Виджеты для Easy HMI
Читайте также
Мы в соц сетях
Комментарии