Урок ESP8266. Настройка простого HTTP веб-сервера.

Цель этого урока — объяснить, как настроить веб-сервер HTTP на ESP8266 и делать к нему простые запросы с помощью веб-браузера.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Как настроить Arduino IDE для поддержки ESP8266, узнать можно здесь.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE.

Тесты проводились с использованием платы NodeMCU, очень дешевая и простая в использовании плата ESP8266.

Код простого HTTP веб-сервера на ESP8266.

Прежде всего, подключим библиотеку ESP8266WiFi, которая содержит необходимые функции для подключения ESP8266 к сети Wi-Fi. Вы можете прочитать более подробное описание того, как подключить ESP8266 к сети Wi-Fi в предыдущем уроке.

Затем подключим библиотеку ESP8266WebServer, которая сделает доступным класс ESP8266WebServer, его будем использовать в данном примере. Естественно, у этого класса есть несколько доступных методов, которые помогут нам настроить сервер и обрабатывать входящие HTTP-запросы, не беспокоясь о деталях реализации на низком уровне. Вы можете посмотреть возможности библиотеки здесь.

Далее объявляем глобальную объектную переменную из ранее упомянутого класса, чтобы мы могли получить к ней доступ в наших функциях.

В качестве аргумента для конструктора этого класса мы передадим порт, который сервер будет слушать. Поскольку 80 — порт по умолчанию для HTTP. Будем использовать это значение, поэтому нам не нужно будет указывать номер порта в URL-адресе при доступе к нашему серверу ESP8266 с помощью браузера.

Нам нужно предварительно настроить HTTP-сервер перед его запуском.

Также открываем последовательное соединение для отладки.

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

Поскольку мы собираемся выполнять HTTP запросы, нам нужно знать IP-адрес, на котором ESP8266 прослушивает входящие запросы, это будет локальным IP-адресом назначенным в сети Wi-Fi.

Чтобы получить это значение просто вызываем метод localIP для глобальной переменной WiFi и затем выведем его в последовательный порт, чтобы мы знали, какой URL-адрес вызывать в нашем веб-браузере.

Чтобы получить это значение просто вызываем метод localIP для глобальной переменной WiFi

Затем начнем указывать, какой код выполнять, когда HTTP-запрос выполняется для каждого пути. Чтобы сделать это, вызываем метод для ранее объявленного глобального объекта сервера.

Более элегантный метод заключается в определении функции обработки где-нибудь в нашем коде и передаче ее функции on вместе с URL-адресом, который будет запускать выполнение этой функции.

Таким образом, код указывает, что когда HTTP-запрос получен по корневому («/») пути, он инициирует выполнение функции «handleRootPath». Обратите внимание, что мы не указываем IP-адрес или порт, на который ESP8266 прослушивает, а только путь URL-адреса с этого момента.

Для простоты предположим, что функция «handleRootPath» отвечает только текстом «Greetings from the site arduino-tex.ru» на входящий HTTP-запрос. Итак, чтобы определить ответ на запрос, мы вызываем метод send.

Хотя метод может быть вызван с другим набором аргументов, его простейшая форма состоит в получении кода ответа HTTP, типа и содержимого.

В этом случае мы отправляем код 200, который соответствует ответу «ОК». Затем мы указываем тип контента как «text/plain», поскольку мы отвечаем только простым «Greetings from the site arduino-tex.ru» фактическим текстом ответа.

Естественно, эту функцию нужно объявить вне функции настройки.

Мы также можем указать функцию обработки при вызове метода on. В этом случае нам не нужно объявлять отдельную функцию, и мы можем делать все в функции настройки, как показано ниже.

В этом случае, если мы получим HTTP-запрос по пути «/other», мы ответим выражением «Additional page».

Теперь, чтобы запустить наш сервер, мы вызываем метод begin объекта server. Это последняя строка кода, которую нам нужно включить в нашу функцию настройки.

Наконец, чтобы обрабатывать фактический входящий HTTP-запрос, нам нужно вызвать метод handleClient в функции основного цикла.

Скетч простого HTTP веб-сервера на ESP8266 получится следующим.

Проверка HTTP веб-сервера на ESP8266.

Чтобы протестировать код, нам просто нужно открыть наш браузер и сделать HTTP-запрос на IP-адрес ESP8266, по пути, который мы определили ранее. Формат показан ниже:

Как указывалось ранее, мы прослушиваем порт 80, браузер примет его по умолчанию, поэтому нам не нужно его указывать:

Итак, заменяем serverIP на IP, который получаем в мониторе порта, и делаем запрос, как показано на рисунке ниже.

Итак, заменяем serverIP на IP, который получаем в мониторе порта, и делаем запрос

В этом случае отображается только IP, потому что браузер удалил «/» из корневого пути. Кроме того, браузер удалил http: //. Хотя некоторые браузеры выполняют запрос, когда мы указываем только IP, другие предполагают, что мы хотим найти что-то в поисковой системе. Итак, самый безопасный способ — всегда указывать http: // перед IP.

Пример на рисунке ниже показывает запрос по пути «/other», который мы также прописали в коде.

ример на рисунке ниже показывает запрос по пути «/ other», который мы также прописали в коде.

Наконец, обратите внимание, что если мы укажем путь, который не определен, ESP вернет сообщение, указывающее, что ресурс не был найден, как мы можем видеть на рисунке ниже, где отправили HTTP-запрос по пути «/not».

если мы укажем путь, который не определен, ESP вернет сообщение, указывающее, что ресурс не был найден

Важно! IP-адрес, который будет выводить ESP8266 в монитор порта, является локальным IP-адресом в сети. Клиент вне сети не сможет связаться по этому IP-адресу (и, следовательно, URL-адрес не будет работать). Чтобы клиент мог связаться с ESP8266 из-за пределов своей сети, ему необходимо будет использовать внешний IP-адрес сети, а маршрутизатор должен быть настроен для переадресации запросов с общедоступного IP-адреса на локальный IP ESP8266. Поскольку переадресация портов зависит от используемого маршрутизатора, объяснение того, как это сделать выходит за рамки этого урока.

Понравился ESP8266 уроки. Настройка простого HTTP веб-сервера ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.


Источник: arduino-tex.ru