Esp8266 как точка доступа wifi
Перейти к содержимому

Esp8266 как точка доступа wifi

  • автор:

Настройка ESP8266 в режим программной точки доступа [1]

Пример ниже показывает, как настроить ESP8266 в режим программной точки доступа (т.е. в режим, при котором к ESP8266 смогут подключаться станции). WiFi-сеть, заданная программной точкой доступа, будет идентифицироваться через SSID, заданный при настройке ESP8266. Кроме того, сеть можно защитить паролем. Если пароль не задать, сеть будет считаться открытой (т.е. к ней сможет подключиться кто угодно).

Скетч

Для того, чтобы настроить ESP8266 в режим программной точки доступа, нужно всего несколько строчек кода.

#include void setup()  Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP . "); // "Настройка программной точки доступа . " boolean result = WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP"); if(result == true)  Serial.println("Ready"); // "Готово" > else  Serial.println("Failed!"); // "Настроить точку доступа не удалось" > > void loop()  Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum()); // "Количество подключенных станций = " delay(3000); > 

Как использовать этот скетч?

boolean result = WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP") 

. поменяйте pass-to-soft-AP на какой-нибудь осмысленный пароль, а затем загрузите скетч на ESP8266. Теперь откройте монитор порта. Там должно быть примерно следующее:

Setting soft-AP . Ready Stations connected = 0 Stations connected = 0 . 

В мобильном телефон или ПК откройте список точек доступа, найдите ESPsoftAP_01 и подключитесь к ней. Когда новая станция подключится, это должно отразиться в мониторе порта:

Stations connected = 1 Stations connected = 1 . 

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

Как это работает?

Скетч маленький, так что разбор будет несложным. В первой строчке мы подключаем библиотеку ESP8266WiFi:

#include

Настройка точки доступа ESPsoftAP_01 выполняется здесь:

cpp boolean result = WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP"); 

Если эта операция проходит успешно, функция возвращает true, а если нет, то false. Для того, чтобы напечатать в мониторе порта результат операции («Ready» или «Failed!»), в скетче используется оператор if-else.

Можно ли упростить скетч?

Можно ли сделать этот скетч еще проще? Конечно! Это можно реализовать через альтернативную версию оператора if-else, как показано ниже:

WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP") ? "Ready" : "Failed!" 

Эта строчка вернет «Ready» (т.е. «Готово») или «Failed!» (т.е. «Настроить точку доступа не удалось») в зависимости от результата функции WiFi.softAP(). Это позволяет существенно сократить размер скетча, не урезая его функциональность.

#include void setup()  Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP . "); // "Настройка программной точки доступа . " Serial.println(WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP") ? "Ready" : "Failed!"); > void loop()  Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum()); // "Количество подключенных станций = " delay(3000); > 

На мой взгляд, получилось очень симпатично. Если вы в первый раз видите оператор ? :, рекомендую начать пользоваться им прямо сейчас. Он позволяет сделать код более компактным и элегантным.

Итого

Благодаря библиотеке ESP8266WiFi настроить чип ESP8266 в режим программной точки доступа очень просто.

Разобравшись со скетчем в этой статье, можете попробовать скетч посложнее. Он демонстрирует, как получить доступ к точке доступа на базе ESP8266 из браузера.

О функциях для управления точкой доступа на базе ESP8266 читайте в этой статье.

См.также

Внешние ссылки

Как создать точку доступа на ESP8266 за 5 минут. Управление по WI-FI

Сегодня мы научимся создавать точку доступа на ESP8266 и выводить на неё свою информацию. Это нам пригодится потом когда мы будем делать web интерфейс управления нашими умными и не очень устройствами.
Делать мы это будем не используя ваш домашний роутер. Создадим точку доступа на ESP и подключимся к ней. Затем выведем HTML страницу.
Сегодня будет 3 примера.

  • Первый это мы просто просканируем все сети, что окружают вас.
  • Второй – выведем две кнопки и по управляем встроенным в плату светодиодом.
  • И третий. Выведем номер RFID карты используя скетч из предыдущих уроков.

Давайте рассмотрим пример сканирования WIFI сетей.
Мы будем использовать библиотеку ESP8266WIFI.
Здесь ничего сложного. Запускается встроенная функция сканирования сетей и в цикле выводятся все найденные сети и уровень их сигнала. Затем ждём 5 секунд и снова сканируем.
У меня этот модуль нашёл сего 7 сетей. А вот ноутбук видит гораздо больше. Это говорит о том, что ESP встроенная в NodeMCU имеет гораздо меньшую чувствительность. А что можно было ожидать от антенны нарисованной на плате. Поэтому я в основном использую модули ESP-07 с керамической антенной и разъёмом для подключения внешней антенны. И к тому же ESP не видит сети с частотой 4 ГГц, а только 2,4 ГГЦ.

Теперь давайте рассмотрим второй пример.
Это создание своей точки доступа и вывод двух кнопок на страницу для управления светодиодом. Точно так же можно управлять не только светодиодами, но и различными нагрузками, например реле.
Для этого нам понадобится подключить несколько библиотек. Но они все входят в комплект ARDUINO ide и становятся доступными после того как вы выберете плату ESP.
Здесь мы пишем название своей новой сети. Я назвал её вот так, вы же можете называть как угодно.
И задаём пароль. Если вы не укажете пароль, то у вас будет открытая сеть и каждый сможет к ней подключиться. Оно вам надо?
Это html код который будет выводиться на странице. Это простой код который выведет две ссылки с надписями включить и выключить. А выше их будет отображаться статус указывающий текущее состояние светодиода. Включен или Выключен.
Дальше идут строчки кода которые в основном отвечают за вывод в ComPort. Я по возможности всё написал по русски, и думаю вам не составит труда разобраться что и за что отвечает.
Переходим на созданную сеть. У вас при первом подключении будет выведено окно для ввода пароля. Проверяем, чтобы не было ошибок с паролем, а иначе вы не сможете войти в эту сеть.
Дальше будет вопрос подключать ли общий доступ к устройствам. Можете выбрать что угодно. Я ответил ДА.
Вот мы и подключились к созданной нами сети.
Вводим IP адрес вашего устройства. И вы ничего не должны увидеть. У меня это просто загрузился кэш страницы. Нажимая на кнопки никакого результата на плате я не вижу.
Теперь нужно войти на локальный адрес самой ESP. Он вот такой 192.168.4.1
Вот теперь это уже реальная страница, что можно увидеть нажимая на кнопки. Как видите на плате включается и выключается светодиод. И как я уже говорил, это может быть реле и управлять большой нагрузкой.

Теперь переходим на свою обычную WIFI сеть. Обновляем страницу и видим, что доступ к интерфейсу пропал.

Ну и наконец третий пример.
Выведем UID номер карты на экран компьютера. Для этого загрузим следующий скетч.
Здесь у нас ещё прибавилось библиотек. Одну из них вам придётся установить, так как она не входит в комплект. Если не знаете как, о посмотрите последние видео о RFID модуле. Там подробно всё рассказано.
Мы будем работать с той же сетью, что и в предыдущем примере.
В этом HTML коде мы будем выводить номер карты которую прикладывают с считывателю карт. Это код из предыдущего видео, поэтому здесь рассказывать нечего.
Если в двух словах, то когда вы прикладываете карту к считывателю, то скетч считывает номер карты и отправляет его для вывода на web страницу.
Давайте посмотрим как это работает. Вводим IP адрес устройства и ничего не получаем. Так как мы находимся в своей обычной, домашней сети. Теперь переходим в созданную сеть. Перезагружаем страницу и всё мы не подключены. В следующем видео я расскажу как сделать так чтобы можно было видеть страницу из обычной WIFI сети, а если домашняя сеть пропадёт, то вы автоматически переключитесь на свою созданную сеть.
Переходим на локальный IP и видим текст и ожидание ввода карточки. Подносим карты к картридеру и видим, что их номера отображаются на странице.
На этом я заканчиваю это видео. Сегодня мы рассмотрели как создать точку доступа, просканировать все доступные сети. Поуправляли светодиодом из интерфейса браузера. Получили UID номер карты.

Если вам понравилось это видео, то не забудьте поставить лайк. Если есть какие вопросы или пожелания, то пишите их в комментариях
И поздравляю вас с Наступающим новым годом.
До встречи в новых видео.

Создание простого веб-сервера NodeMCU ESP8266 в Arduino IDE

За последние несколько лет модуль ESP8266 стал восходящей звездой среди проектов, связанных IoT или WiFi. Это чрезвычайно экономичный Wi-Fi модуль, который с небольшими дополнительными усилиями может быть запрограммирован для создания автономного веб-сервера.

Что такое веб-сервер и как он работает?

Что такое веб-сервер и как он работает

Веб-сервер — это место, где хранятся, обрабатываются и доставляются веб-страницы веб-клиентам. Веб-клиент — это не что иное, как веб-браузер на наших ноутбуках и смартфонах. Связь между клиентом и сервером осуществляется с помощью специального протокола, называемого протоколом передачи гипертекста (HTTP).

В этом протоколе клиент инициирует связь, делая запрос для определенной веб-страницы с помощью HTTP, и сервер отвечает содержимым этой веб-страницы или сообщением об ошибке, если это не удается сделать (например, знаменитая Ошибка 404). Страницы, поставляемые сервером, в основном являются документами HTML.

ESP8266 — режимы работы

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

Работа ESP8266может осуществляться в трех разных режимах:

  1. Станция (STA)
  2. Точка доступа (AP)
  3. Комбинированный

Режим станции

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

Режим станции ESP8266

В режиме станции ESP8266 получает IP-адрес от беспроводного маршрутизатора, к которому он подключен. С этим IP-адресом он может настроить веб-сервер и доставлять веб-страницы на все подключенные устройства в существующей сети Wi-Fi .

Режим точка доступа

Модуль ESP8266, который создает свою собственную WiFi сеть и действует как концентратор (точно так же как маршрутизатор WiFi) для одной или нескольких станций, называется Точкой доступа (AP).

В отличие от WiFi-роутера, он не имеет подключения к проводной сети. Максимальное количество станций, которые могут подключиться к нему, ограничено пятью.

Режим точка доступа

В режиме точка доступа ESP8266 создает новую WiFi сеть и устанавливает SSID (имя сети) и IP-адрес для нее. С помощью этого IP-адреса он может доставлять веб-страницы на все подключенные устройства в своей собственной сети.

Выводы ESP8266 NodeMCU

Ниже представлена распиновка чипа ESP8266 NodeMCU:

распиновка чипа ESP8266 NodeMCU

Схема подключения светодиодов к ESP8266 NodeMCU

Теперь, когда мы знаем основы работы веб-сервера и в каких режимах ESP8266 может создавать веб-сервер, пришло время подключить некоторые светодиоды к ESP8266 NodeMCU, которыми мы будем управлять через WiFi.

Начните с размещения NodeMCU на макетной плате, чтобы каждая сторона платы была на отдельной стороне. Затем подключите два светодиода к цифровым выводам D6 и D7 через токоограничивающие резисторы 220 Ом.

Концепция управления вещами с веб-сервера ESP8266

Итак, вы можете подумать: «Как я могу управлять вещами с веб-сервера, который просто обрабатывает и доставляет веб-страницы?» Для этого вам нужно понять, что происходит за кулисами.

Когда вы вводите URL-адрес в веб-браузере и нажимаете клавишу ВВОД, браузер отправляет HTTP-запрос (он же GET-запрос) на веб-сервер. Задача веб-сервера — обработать этот запрос и выполнить определенное действие. Вы, возможно, уже поняли, что мы собираемся управлять вещами, обращаясь к определенному URL.

Например, предположим, что мы ввели в браузере URL-адрес http://192.168.1.1/ledon. Браузер отправляет HTTP-запрос ESP8266 для обработки. Когда ESP8266 получает этот запрос он понимает, что пользователь хочет включить светодиод. Таким образом, он включает светодиод и посылает динамическую веб-страницу в браузер, сообщая о включении светодиода.

Модуль ESP8266 в качестве HTTP-сервера с использованием режима точки доступа (AP)

А теперь давайте перейдем к самому интересному!

Как следует из заголовка, этот пример демонстрирует, как превратить ESP8266 в точку доступа (AP) и обслуживать веб-страницы для любого подключенного клиента. Для начала подключите ESP8266 NodeMCU к компьютеру и загрузите следующий код:

#include #include / * Установить свой SSID и пароль * / const char* ssid = "NodeMCU"; const char* password = "12345678"; / * Настройка IP-адрес * / IPAddress local_ip(192,168,1,1); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); ESP8266WebServer server(80); uint8_t LED1pin = D7; bool LED1status = LOW; uint8_t LED2pin = D6; bool LED2status = LOW; void setup() < Serial.begin(115200); pinMode(LED1pin, OUTPUT); pinMode(LED2pin, OUTPUT); WiFi.softAP(ssid, password); WiFi.softAPConfig(local_ip, gateway, subnet); delay(100); server.on("/", handle_OnConnect); server.on("/led1on", handle_led1on); server.on("/led1off", handle_led1off); server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off); server.onNotFound(handle_NotFound); server.begin(); Serial.println("HTTP server started"); >void loop() < server.handleClient(); if(LED1status) else if(LED2status) else > void handle_OnConnect() < LED1status = LOW; LED2status = LOW; Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF"); server.send(200, "text/html", SendHTML(LED1status,LED2status)); >void handle_led1on() < LED1status = HIGH; Serial.println("GPIO7 Status: ON"); server.send(200, "text/html", SendHTML(true,LED2status)); >void handle_led1off() < LED1status = LOW; Serial.println("GPIO7 Status: OFF"); server.send(200, "text/html", SendHTML(false,LED2status)); >void handle_led2on() < LED2status = HIGH; Serial.println("GPIO6 Status: ON"); server.send(200, "text/html", SendHTML(LED1status,true)); >void handle_led2off() < LED2status = LOW; Serial.println("GPIO6 Status: OFF"); server.send(200, "text/html", SendHTML(LED1status,false)); >void handle_NotFound() < server.send(404, "text/plain", "Not found"); >String SendHTML(uint8_t led1stat,uint8_t led2stat) < String ptr = "\n"; ptr +="\n"; ptr +="LED Control\n"; ptr +="\n"; ptr +="\n"; ptr +="\n"; ptr +="

ESP8266 Web Server

\n"; ptr +="

Using Access Point(AP) Mode

\n"; if(led1stat) LED1 Status: ON

OFF\n";> else LED1 Status: OFF

ON\n";> if(led2stat) LED2 Status: ON

OFF\n";> else LED2 Status: OFF

ON\n";> ptr +="\n"; ptr +="\n"; return ptr; >

Доступ к веб-серверу в режиме AP

После загрузки кода откройте последовательный монитор со скоростью 115200 бод и нажмите кнопку RESET на ESP8266. Если все в порядке, будет показано сообщение о запуске HTTP-сервера.

запуск HTTP-сервера

Затем найдите любое устройство, которое вы можете подключить к WiFi сети — телефон, ноутбук и т. д. Найдите сеть под названием NodeMCU. Подключитесь к сети с паролем 123456789.

После подключения к сети AP NodeMCU откройте браузер и введите значение 192.168.1.1. NodeMCU должен отобразить веб-страницу с текущим состоянием светодиодов и две кнопки для управления ими. Если одновременно взглянуть на последовательный монитор, вы можете увидеть состояние выводов GPIO NodeMCU.

Теперь нажмите кнопку, чтобы включить LED1. Как только вы нажмете кнопку, ESP8266 получает запрос на URL-адрес /led1on. Затем он включит LED1 и отправит веб-страницу со статусом обновленного состояния светодиода. Он также отобразит в серийном мониторе состояние вывода GPIO.

Вы можете проверить кнопку LED2 и убедиться, что она работает аналогичным образом.

Теперь давайте внимательнее посмотрим на код, чтобы понять, как он работает.

Подробное объяснение кода

Код начинается с подключения библиотеки ESP8266WiFi.h. Эта библиотека предоставляет специальные функции WiFi ESP8266, которые необходимы для подключения к сети. После этого подключена библиотека ESP8266WebServer.h, в которой есть несколько функций, помогающих настроить сервер и обрабатывать входящие HTTP-запросы, не беспокоясь о деталях реализации низкого уровня.

#include #include

Поскольку мы устанавливаем ESP8266 NodeMCU в качестве точки доступа (AP), то модуль создаст WiFi сеть. Следовательно, нам нужно установить SSID, пароль, IP-адрес, маску IP-подсети и IP-шлюз.

const char* ssid = "NodeMCU"; // Enter SSID here const char* password = "12345678"; //Enter Password here IPAddress local_ip(192,168,1,1); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0);

Далее мы объявляем объект библиотеки ESP8266WebServer, чтобы получить доступ к ее функциям. Конструктор этого объекта принимает порт (для прослушивания) в качестве параметра. Так как для HTTP порт 80 является портом по умолчанию, мы используем это значение. Теперь мы можем получить доступ к серверу без необходимости прописывать номер порта в URL.

ESP8266WebServer server(80);

Далее мы объявляем выводы GPIO NodeMCU к которым подключены светодиоды и их начальное состояние.

uint8_t LED1pin = D7; bool LED1status = LOW; uint8_t LED2pin = D6; bool LED2status = LOW;

Функция Setup()

Здесь мы настраиваем наш HTTP-сервер перед его запуском. Прежде всего, мы открываем последовательное соединение для целей отладки и устанавливаем порты GPIO в OUTPUT.

Serial.begin(115200); pinMode(LED1pin, OUTPUT); pinMode(LED2pin, OUTPUT);

Далее мы настроили программную точку доступа для создания Wi-Fi сети, подтвердив SSID, пароль, IP-адрес, маску IP-подсети и IP-шлюз.

WiFi.softAP(ssid, password); WiFi.softAPConfig(local_ip, gateway, subnet); delay(100);

Чтобы обрабатывать входящие HTTP-запросы, нам нужно указать, какой необходимо выполнить код при нажатии определенного URL. Для этого мы используем функцию on. Эта функция принимает два параметра. Первый — это URL, а второй — имя функции, которую мы хотим выполнить при нажатии на этот URL.

Например, первая строка приведенного ниже фрагмента кода указывает, что когда сервер получает HTTP-запрос по корневому пути (/), он запускает функцию handle_OnConnect(). Обратите внимание, что указанный URL-адрес является относительным путем.

Аналогично, нам нужно указать еще 4 URL для обработки двух состояний обоих светодиодов.

server.on("/", handle_OnConnect); server.on("/led1on", handle_led1on); server.on("/led1off", handle_led1off); server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off);

Мы еще не указали, что должен делать сервер, если клиент запрашивает любой URL, отличный от указанного в server.on(). Он должен ответить HTTP-статусом 404 (Not Found) и сообщением для пользователя. Мы также помещаем это в функцию и используем, server.onNotFound() чтобы указать, что необходимо выполнить когда будет получен запрос на URI, который не был указан в server.on

server.onNotFound(handle_NotFound);

Теперь, чтобы запустить наш сервер, мы вызываем begin() для объекта server.

server.begin(); Serial.println("HTTP server started");

Функция Loop()

Для обработки фактических входящих HTTP-запросов нам нужно вызвать handleClient(). Мы также меняем состояние светодиода согласно запросу.

void loop() < server.handleClient(); if(LED1status) else if(LED2status) else >

Далее нам нужно создать функцию, которую мы прикрепили к корневому (/) URL с помощью server.on. В начале этой функции мы устанавливаем статус обоих светодиодов как LOW (начальное состояние светодиодов) и печатаем его в последовательный монитор.

Чтобы ответить на HTTP-запрос, мы используем функцию send. Хотя функцию можно вызывать с другим набором аргументов, ее самая простая форма состоит из кода ответа HTTP, типа контента и содержимого.

В нашем случае мы отправляем код 200 (один из кодов состояния HTTP ), который соответствует ответу OK . Затем мы указываем тип контента как «text / html», и, наконец, мы вызываем пользовательскую функцию SendHTML(), которая создает динамическую HTML-страницу, содержащую состояние светодиодов.

void handle_OnConnect() < LED1status = LOW; LED2status = LOW; Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF"); server.send(200, "text/html", SendHTML(LED1status,LED2status)); >

Аналогично, нам нужно создать четыре функции для обработки запросов на включение / выключение светодиодов и страницу ошибки 404.

void handle_led1on() < LED1status = HIGH; Serial.println("GPIO7 Status: ON"); server.send(200, "text/html", SendHTML(true,LED2status)); >void handle_led1off() < LED1status = LOW; Serial.println("GPIO7 Status: OFF"); server.send(200, "text/html", SendHTML(false,LED2status)); >void handle_led2on() < LED2status = HIGH; Serial.println("GPIO6 Status: ON"); server.send(200, "text/html", SendHTML(LED1status,true)); >void handle_led2off() < LED2status = LOW; Serial.println("GPIO6 Status: OFF"); server.send(200, "text/html", SendHTML(LED1status,false)); >void handle_NotFound()< server.send(404, "text/plain", "Not found"); >

Отображение HTML веб-страницы

Функция SendHTML() отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP8266 получает запрос от веб-клиента. Он просто объединяет HTML-код в большую строку и возвращается к функции server.send(), которую мы обсуждали ранее. Функция принимает состояние светодиодов в качестве параметра для динамической генерации HTML-контента.

Текст, который всегда необходимо отправлять первым — это , который указывает на то, что мы посылаем HTML код.

String SendHTML(uint8_t led1stat,uint8_t led2stat) < String ptr = "\n";

Затем элемент viewport делает веб-страницу отзывчивой в любом веб-браузере. Тег title устанавливает заголовок страницы.

ptr +="\n"; ptr +="LED Control\n";

Стилизация веб-страницы

Далее у нас есть немного CSS кода для стилизации кнопок и внешнего вида веб-страницы. Мы выбрали шрифт Helvetica, определили содержимое, которое будет отображаться в виде встроенного блока, выровненного по центру.

ptr +="html < font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;>\n";

Следующий код устанавливает цвет, шрифт body, теги H1, H3 и p.

ptr +="body h1 h3 \n"; ptr +="p \n";

Указываем некоторые стили кнопок со свойствами, такими как цвет, размер, поля и т. д. Кнопка ВКЛ и ВЫКЛ имеет другой цвет фона, а селектор active кнопок обеспечивает эффект нажатия кнопки.

ptr +=".button \n"; ptr +=".button-on \n"; ptr +=".button-on:active \n"; ptr +=".button-off \n"; ptr +=".button-off:active \n";

Установка заголовка веб-страницы

Далее устанавливается заголовок веб-страницы. Вы можете изменить его на текст, подходящий для вашего приложения.

ptr +="

ESP8266 Web Server

\n"; ptr +="

Using Access Point(AP) Mode

\n";

Отображение кнопок и соответствующего состояния

Для динамического создания кнопок и состояния светодиодов мы используем оператор if. Таким образом, в зависимости от состояния выводов GPIO, отображается кнопка ON / OFF.

if(led1stat) LED1 Status: ON

OFF\n";> else LED1 Status: OFF

ON\n";> if(led2stat) LED2 Status: ON

OFF\n";> else LED2 Status: OFF

ON\n";>

ESP8266 в качестве HTTP-сервера в режиме WiFi Station (STA)

Теперь давайте перейдем к нашему следующему примеру, который демонстрирует, как переключить ESP8266 в режим Station (STA) и обслуживать веб-страницы для любого подключенного клиента в существующей сети.

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

После того как вы внесете изменения, загрузите следующий код:

#include #include / * Установить свой SSID и пароль * / const char* ssid = "YourNetworkName"; // SSID const char* password = "YourPassword"; //пароль ESP8266WebServer server(80); uint8_t LED1pin = D7; bool LED1status = LOW; uint8_t LED2pin = D6; bool LED2status = LOW; void setup() < Serial.begin(115200); delay(100); pinMode(LED1pin, OUTPUT); pinMode(LED2pin, OUTPUT); Serial.println("Connecting to "); Serial.println(ssid); // подключаемся к локальной Wi-Fi сети WiFi.begin(ssid, password); // проверка подключения Wi-Fi к сети while (WiFi.status() != WL_CONNECTED) < delay(1000); Serial.print("."); >Serial.println(""); Serial.println("WiFi connected. "); Serial.print("Got IP: "); Serial.println(WiFi.localIP()); server.on("/", handle_OnConnect); server.on("/led1on", handle_led1on); server.on("/led1off", handle_led1off); server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off); server.onNotFound(handle_NotFound); server.begin(); Serial.println("HTTP server started"); > void loop() < server.handleClient(); if(LED1status) else if(LED2status) else > void handle_OnConnect() < LED1status = LOW; LED2status = LOW; Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF"); server.send(200, "text/html", SendHTML(LED1status,LED2status)); >void handle_led1on() < LED1status = HIGH; Serial.println("GPIO7 Status: ON"); server.send(200, "text/html", SendHTML(true,LED2status)); >void handle_led1off() < LED1status = LOW; Serial.println("GPIO7 Status: OFF"); server.send(200, "text/html", SendHTML(false,LED2status)); >void handle_led2on() < LED2status = HIGH; Serial.println("GPIO6 Status: ON"); server.send(200, "text/html", SendHTML(LED1status,true)); >void handle_led2off() < LED2status = LOW; Serial.println("GPIO6 Status: OFF"); server.send(200, "text/html", SendHTML(LED1status,false)); >void handle_NotFound() < server.send(404, "text/plain", "Not found"); >String SendHTML(uint8_t led1stat,uint8_t led2stat) < String ptr = "\n"; ptr +="\n"; ptr +="LED Control\n"; ptr +="\n"; ptr +="\n"; ptr +="\n"; ptr +="

ESP8266 Web Server

\n"; ptr +="

Using Station(STA) Mode

\n"; if(led1stat) LED1 Status: ON

OFF\n";> else LED1 Status: OFF

ON\n";> if(led2stat) LED2 Status: ON

OFF\n";> else LED2 Status: OFF

ON\n";> ptr +="\n"; ptr +="\n"; return ptr; >

Доступ к веб-серверу в режиме STA

После загрузки кода откройте последовательный монитор со скоростью 115200 бод и нажмите кнопку RESET на ESP8266. Если все в порядке, он выведет динамический IP-адрес, полученный от вашего маршрутизатора, и покажет сообщение HTTP-сервер запущен.

Затем откройте браузер и укажите IP-адрес, указанный на последовательном мониторе. NodeMCU должен обработать веб-страницу, показывающую текущее состояние светодиодов и две кнопки для управления ими. Если взглянуть на последовательный монитор, вы можете увидеть состояние выводов GPIO NodeMCU.

Теперь нажмите кнопку, чтобы включить LED1, следя за URL. После нажатия кнопки — ESP8266 получает запрос на URL-адрес /led1on. Затем он включает светодиод 1 и отображает веб-страницу с обновленным статусом светодиодов. Он также печатает состояние вывода GPIO в последовательный монитор.

Вы можете проверить кнопку LED2 и убедиться, что она работает аналогичным образом.

Объяснение кода

Если вы сравните этот код с предыдущим кодом, то обнаружите, что единственное отличие состоит в том, что мы не устанавливаем программную точку доступа, а подключаемся к существующей сети с помощью функции WiFi.begin().

WiFi.begin(ssid, password);

Пока ESP8266 пытается подключиться к сети, мы можем проверить состояние подключения с помощью функции WiFi.status().

while (WiFi.status() != WL_CONNECTED)

Для информации — эта функция возвращает следующие статусы:

  • WL_CONNECTED : назначается при подключении к сети Wi-Fi
  • WL_NO_SHIELD : назначается, когда нет shield Wi-Fi
  • WL_IDLE_STATUS : временное состояние, назначаемое при вызове WiFi.begin (), и остается активным до тех пор, пока не истечет количество попыток (что приводит к WL_CONNECT_FAILED) или пока не установлено соединение (что приводит к WL_CONNECTED)
  • WL_NO_SSID_AVAIL : назначается, когда нет доступных SSID
  • WL_SCAN_COMPLETED : назначается, когда сканирование сетей завершено
  • WL_CONNECT_FAILED : назначается при сбое подключения для всех попыток
  • WL_CONNECTION_LOST : назначается при потере соединения
  • WL_DISCONNECTED : назначается при отключении от сети

Как только ESP8266 подключится к сети, в последовательном мониторе будет напечатан IP-адрес, назначенный для ESP8266.

Serial.println(""); Serial.println("WiFi connected. "); Serial.print("Got IP: "); Serial.println(WiFi.localIP());

Единственная разница между режимами AP и STA состоит в том, что один создает сеть, а другой присоединяется к существующей сети. Итак, остальная часть кода для обработки HTTP-запросов и обслуживания веб-страницы в режиме STA такая же, как и в режиме AP, описанном выше. Это включает:

  • Объявление выводов GPIO NodeMCU, к которым подключены светодиоды
  • Определение нескольких функция server.on() для обработки входящих HTTP-запросов
  • Определение функции server.onNotFound() для обработки 404 ошибки HTTP
  • Создание пользовательских функций, которые выполняются при нажатии на определенный URL
  • Создание HTML-страницы
  • Стилизация веб-страницы
  • Создание кнопок и отображение их статуса

Похожие записи:

  • Веб-сервер ESP8266 NodeMCU с использованием событий, отправленных сервером (автоматическое обновление показаний датчика)
  • Асинхронный веб-сервер ESP8266 NodeMCU — управление выводами ESP (библиотека ESPAsyncWebServer)
  • В чем разница между ESP32 и ESP8266?
  • Взаимодействие DHT11 DHT22 с ESP8266 NodeMCU с использованием веб-сервера

Arduino UNO + внешний ESP8266 как WiFi точка доступа

Эта пошаговая инструкция поможет вам запустить графический интерфейс RemoteXY на контроллере Arduino UNO используя модуль ESP8266, подключенный к аппаратному последовательному порту. ESP8266 будет сконфигурирован как точка доступа. Инструкция так же может быть использована для контроллеров Arduino Nano, Arduino Mini и совместимых с подключенным внешним модулем ESP8266.

Шаг 1. Создайте графический интерфейс

Войдите в редактор RemoteXY. Найдите на левой панели инструментов элемент Кнопка, и переместите его в поле телефона. Выделите кнопку в поле телефона, что бы вокруг нее отобразилась рамка. Когда кнопка выделена, в правой панели свойств разверните вкладку Элемент. В свойстве элемента Привязать к выводу установите значение 13(LED).

Примечание. Редактор позволяет указать вывод контроллера для некоторых элементов, которые могут однозначно определить состояние вывода, например Включен или Отключен. Однако лучшим решением будет написание собственного кода управления выводами контроллера.

Шаг 2. Настройте конфигурацию

Разверните вкладку Конфигурация на правой панели свойств. Кликните в любой элемент списка, откроется окно выбора конфигурации. Настройка конфигурации позволяет указать параметры вашей схемы. Выберите следующие параметры и нажмите кнопку Применить:

  • Соединение: WiFi access point
  • Контроллер: Arduino UNO
  • Модуль: ESP8266 WiFi module
  • Среда: Arduino IDE

Вкладка Конфигурация должна выглядеть как на рисунке:

Разверните вкладку Подключение модуля и установите следующие значения настроек:

  • Интерфейс подключения: Hardware Serial
  • Порт Serial: Serial, pins 0(RX) and 1(TX)
  • Скорость обмена: 115200
  • Имя (SSID): RemoteXY
  • Пароль: 12345678
  • Порт: 6377

Настройки указывают, что ESP8266 подключается к Arduino через аппаратный Serial (контакты 0 и 1) на скорости 115200. В настройках так же указано имя точки доступа SSID и пароль точки доступа которую необходимо создать.

Примечание. Модуль ESP8266 по умолчанию настроен на скорость подключения 115200. Именно по этой причине для связи необходимо использовать аппаратный Serial. Программный Serial не может работать на такой скорости.

Шаг 3. Сформируйте скетч для Arduino

Нажмите кнопку Получить исходный код.

На открывшейся странице кликните ссылку Загрузить код и загрузите архив скетча. Распакуйте архив. В архиве размещен файл project.ino , откройте его в Arduino IDE.

Для компиляции скетча в среду Arduino IDE необходимо добавить библиотеку RemoteXY. Пройдите по ссылке загрузки библиотеки и следуйте инструкциям по ее установке.

В среде разработки выберите плату Arduino UNO и попробуйте скомпилировать скетч. Если вы все сделали правильно, скетч должен компилироваться без ошибок.

Шаг 4. Подключите ESP8266 к Arduino Uno

Подключите ESP8266 к Arduino Uno по схеме приведенной ниже. Обратите внимание, что контакт 0 платы Arduino выбранный как RX соединяется с контактом TX модуля ESP8266 , а контакт 1 платы Arduino выбранный как TX с контактом RX модуля ESP8266 .

Так как уровни сигналов модуля ESP8266 составляют 3.3В а плата Arduino работает на 5В, необходимо использовать резистивный делитель напряжения для преобразования уровня выходного сигнала TX.

Примечание. Некоторые модули ESP8266 толерантны к уровню сигнала TX и вы можете не использовать конвертер напряжения если ваш модуль оказался таким.

Шаг 5. Загрузите скетч в Arduino.

Так как модуль ESP8266 подключен к основному последовательному порту платы Arduino, это будет мешать загрузке скетча. Перед загрузкой скетча необходимо отсоединить ESP8266 от контактов 0 и 1 платы Arduino. После отсоединения ESP8266 загрузите скетч в контроллер обычным способом. Подсоедините контроллер Arduino UNO к компьютеру, выберите COM порт к которому подключилась плата и нажмите кнопку загрузки. После загрузки скетча снова подсоедините контакты ESP8266.

Внимание. Отключение и подключение ESP8266 производите только при отсутствии питания на контроллере.

Если вы все сделали правильно, вы увидите мерцание голубого светодиода на модуле ESP8266 в течении около половины секунды сразу после старта Arduino . Если это произошло, то скорее всего обмен данными между Arduino и ESP8266 установлен. В течении этого времени RemoteXY производит настройку ESP8266 при помощи AT-команд для работы модуля в качестве точки доступа, и при обмене данными светодиод мерцает.

Шаг 6. Подключитесь с мобильного приложения.

Запустите приложение и нажмите кнопку + (Плюс) на верхней панели справа. В открывшемся окне выберите подключение WiFi Point.

Внимание. В соответствии с приватной политикой безопасности, приложение попросит у вас разрешение на определение местоположения. Для поиска WiFi устройств и подключения к ним приложению требуется разрешение на местоположение.

В приложении для Android

В приложении для Android нажмите кнопку поиска устройств в правом углу панели инструментов. У вас отобразятся все доступные точки WiFi. Найдите точку с именем RemoteXY и выберите ее. В открывшемся окне ввода пароля введите пароль 12345678, который мы указали на шаге 2. Если вы все сделали правильно, то далее должен открыться графический интерфейс.

В приложении для iOS

В приложении для iOS перед подключением необходимо вручную подключить смартфон к точке доступа, используя системные настройки операционной системы. Зайдите в системные настройки и подключитесь к точке доступа RemoteXY с паролем 12345678, который мы указали на шаге 2. Затем вернитесь в приложение RemoteXY, вы должны увидеть имя подключенной точки доступа. Далее нажмите кнопку Connect. Если вы все сделали правильно, то далее должен открыться графический интерфейс.

Если не подключается.

Если подключение не удалось, проверьте себя по списку ниже. Это поможет вам найти ошибку.

Модуль ESP8266 управляется при помощи AT команд, которые посылает ему Arduino под управлением библиотеки RemoteXY. Вы можете увидеть посылаемые команды открыв Serial Monitor в среде разработки Arduino IDE. Это возможно потому, что ESP8266 и Serial Monitor подключены к одному порту. Вы сможете увидеть только отправляемые AT команды, однако ответы от ESP8266 вы не сможете видеть. Но и этого достаточно что бы провести диагностику системы.

Запустите Serial Monitor, установите скорость 115200. Если необходимо нажмите кнопку сброса на контроллере.

Serial Monitor ничего не показывает

Если Serial Monitor не выводит никаких сообщений, это скорее всего означает, что Arduino не выполнят вашу программу или вы не верно настроили способ связи на шаге 2. Даже если у вас не подключен ESP8266, правильно сконфигурированная библиотека RemoteXY все равно отправляет запросы к модулю, пытаясь его обнаружить, и вы бы увидели это в Serial Monitor. Если Serial Monitor не выводит никаких сообщений, то возможны следующие неисправности:

  • Не верно сконфигурирована схема подключения и способ связи на шаге 2.
  • Внесены недопустимые изменения в код, например откорректирована структура RemoteXY или массив RemoteXY_CONF, удалены вызовы функций RemoteXY_Init() или RemoteXY_Handler(). Для проверки используйте только автоматически сформированный код, без каких либо изменений.
  • Serial Monitor не подключился к Arduino. Возможно вы не выбрали скорость 115200 после того как запустили Serial Monitor.
  • Нужный скетч не был загружен в Arduino.
  • Ваша Arduino не включена или неисправна.
Serial Monitor выводит запросы AT команд

Если Serial Monitor выводит некоторые команды, то анализируя эти команды можно проверить следующие ошибки.

ESP8266 не отвечает

Если вы видите только команды AT и больше ничего:

AT AT AT AT

Это означает, что модуль ESP8266 не отвечает на команды. Проблема может быть или в неверном подключении модуля или в нем самом. Возможны следующие причины:

  • Контакты RX и TX подключены не верно, перепутаны контакты, или подключены не к тем контактам, или не подключены совсем. Проверьте по схеме на шаге 4.
  • Скорость передачи данных не совпадает, ESP8266 по умолчанию использует скорость 115200. Возможно ESP8266 был вручную сконфигурирован для работы на другой скорости.
  • Нет питания на ESP8266, при подаче питания на ESP8266 должен светиться красный светодиод.
  • Не хватает мощности источника питания 3.3 В для ESP8266. На разных платах совместимых с Arduino могут быть установлены разные 3.3 В DC-DC преобразователи с разным максимальным выходным током.
  • Модуль ESP8266 имеет прошивку в которой нет поддержки AT команд.
  • Модуль ESP8266 неисправен.
Не все AT команды обрабатываются

Если после команды AT следует последовательность команд, то модуль ESP8266 на связи с Arduino. Ниже приведена правильная последовательность команд.

AT AT+RST ATE0 AT+CWMODE=2 AT+CWDHCP=0,1 AT+CWSAP="RemoteXY","12345678",10,4 AT+CIPMODE=0 AT+CIPMUX=1 AT+CIPSERVER=1,6377

Но на какой то команде связь может обрываться. Это поможет найти ошибку.

Если нет последней строчки с командой AT+CIPSERVER=1,6377 , это может говорить о том, что модуль ESP8266 имеет устаревшую прошивку.

Если последняя команда которую вы видите есть AT+RST , это означает что модуль ESP8266 не запускается после сброса, после его загрузки нет ответа ready .

Если обрыв происходит на любой другой строчке, скорее всего не хватает мощности источника питания 3.3 В для ESP8266.

Все AT команды обрабатываются но не подключается

Если выводится вся последовательность AT команд из предыдущего пункта, но при подключении приложение выводит ошибку, посмотрите какую именно ошибку показывает приложение и попробуйте ее исправить. Так же возможны следующие варианты.

  • Не хватает мощности источника питания 3.3 В для ESP8266.
  • ESP8266 имеет устаревшую прошивку.
  • Размер памяти ESP8266 составляет 4 Mbit и меньше, и актуальная прошивка не может быть прошита.

Примечание. В приложении Android имеется возможность проанализировать лог подключения, это так же может помочь идентифицировать ошибку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *