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

Обновлено: 06.07.2024

привет, народ, есть у кого-то пример кода для ESP32 or ESP8266, который создает точку доступа для выбора и подключения к wifi, а затем, подключившись к wifi запоминает пароль и используя это подключение создает web server?

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

в гугле примеров тыщщщи, забанили ?

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

буду благодарен хотябы за один.

при поиске по запросу "arduino точка доступа для выбора и подключения к wi-fi" нихрена путнего не находит

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

Я так понимаю, что вам нужно:

а) Создать на базе ESP точку доступа с вебмордой.

б) Подключиться к вебморде и в ней выбрать WiFi-сеть для подключения (ввести пароль и все прочие настройки).

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

Все эти вещи есть в стандартных примерах ESP. Вам нужно только собрать это все в кучу. Готовую программу вы вряд ли найдете.

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

FoxJone, спасибо за совет.

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

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

FoxJone, спасибо за совет.

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

После настройки клиента пишите настройки (сеть, пароль и флаг того, что клиент настроен) в постоянную память (например, в EEPROM, или к примеру на SD-карту, если такая есть в конструкции) и при загрузке читайте их оттуда.

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

andycat аватар

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

Мужики, спасибо за подсказки в каком направлении двигаться, к сожалению готовые решения не помогли - это часть огромного проэкта и попытка внедрить тот же вифи-менеджер приводила к неработоспособности кода сервера и телеграмм-бота, поэтому написал костыльный, но рабочий подход. В eeprom выделяется место 40 байт под хранение двух пар: ssid и пароль, при запуске ЕСПхи пробуются имеющиеся пароли - если не удается подключиться, то создается точка доступа с простой формой - только для вводи имени сети и пароля. дальше проблемка))) в терминале вижу строку с введенными ИД и паролем:

но не пойму как она выводится (в коде нет такго сериал-принтлайна), как это вывести в скетче, где это выводится в библеотеке тоже пока не нашел - поиск по слову в документе "Referer: " в папке с библитоеками ничего не находит, да и не придумал как разбить на аргументы, юзать регулярные выражения или есть более простой способ?.

- добавить сканер доступных сетей, чтобы не вводить название, а выбирать.

- возможно отимизировать место в памяти, а не выделять по 10 символов на каждый пароль и ssid

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

andycat аватар

Пример сканера сетей есть уже с библиотеками к платам
Чем вам не нравиться выделять по 10 байт под Логин пароль? Там памяти дофига
Работа с get и post запросами в esp8266 и esp32s немного отличается и библиотеки разные, но общий смысл одинаков- берём входящую строку и парсим её на нужные куски и вытаскиваем данные из нее

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

С ESP32 не работал, ничего не могу сказать, а у ESP8266 море памяти и нормальная скорость, вполне себе может поддержать нормальный веб-интерфейс. Я на коленке собирал простенькую вебморду и успешно продал девайсину с ней клиенту - клиент очень был доволен тем, что управлять можно с любого устройства лишь бы был браузер. И это при том, что в html вообще играл чуть ли не первый раз в жизни. Не понимаю, зачем использовать GET-запросы м вообще все эти танцы с адресной строкой браузера.

С другой стороны, НАСТОЙЧИВО НЕ РЕКОМЕНДУЮ (сам обжегся очень) вешать на ESP8266 какие то другие задачи, кроме WiFi, web-сервера и вебинтерфейса. Ну максимум что то простенькое, типа кнопки или датчика температуры. Иначе, ой сколько вам открытий чудных готовит парадоксов друг.

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

добавил сканер, сделал парсинг строки, но после ее записи (строка write_wifi_password ( String(SSID_s), String(password_s)); // ТАК НЕ РАБОТАЕТ - ВИСНЕТ) и попытке обращения к этой ячейке - происходит перезагрузка еспэхи. чтобы вернуть есп к жизни приходится заплнять память нулями.

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

andycat аватар

странно как то. зачем закомментирована // server.handleClient(); ? в ESP32, да она не нужна, а тут работать не будет, потом еще и цикл бесконечный - конечно будет зависать.

Куски из моего проекта:

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

- так у меня как раз ESP32, та строка не нужна

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

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

andycat аватар

пример для esp32s

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

andycat аватар

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

всем спасибо! все получилось :)

andycat, спасибо, добавил еще выпадающее меню с перечнем доступных сетей

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

andycat аватар

добавил еще выпадающее меню с перечнем доступных сетей

вот просто из любопытства: в наше время с почти халявным и качественным 4G интернетом еще кому то нужны незапароленные WiFi сети?

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

вот просто из любопытства: в наше время с почти халявным и качественным 4G интернетом еще кому то нужны незапароленные WiFi сети?

А как же. Надзорным органам очень нужны!

За предоставление анонимного доступа в интернет с любого юрика можно очень красиво штрафов сорвать.

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

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

Вы использовали ESP32? Все работает? Я просто ищу нечто похожее для своего проекта. Есть ли баги при использовании?

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

ua6em аватар

Вы использовали ESP32? Все работает? Я просто ищу нечто похожее для своего проекта. Есть ли баги при использовании?

если длина ssid и пароля более 10 символов видимо багам быть

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

Да, так у меня и получилось. Придется писать свой код. А если заказать, то почем выйдет?

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

ua6em аватар

Да, так у меня и получилось. Придется писать свой код. А если заказать, то почем выйдет?

если точки подключения и пароли известны, то лучше делать по другому

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

Ну так дело в том что вначале должна точка доступа с предустановленным именем и паролем. А после человек должен сам выбрать свою сеть и подключиться к ней. Ограничение по длине имени и паролю - осуждаю )))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вы использовали ESP32? Все работает? Я просто ищу нечто похожее для своего проекта. Есть ли баги при использовании?

если длина ssid и пароля более 10 символов видимо багам быть

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

brokly аватар

Помоему стандартные ограничения на длину имени точки доступа и пароля 128 символов. Сканинг сетей на тему имен точек доступа с ESP32 на стандартных ардуиновских библиотеках работает через раз. Нужно спускаться на более низкий уровень. На первый взгляд простое задание, по факту окажется больше того кода который вы уже имеете :) Раза в три :)))

Серьезно ?! Начните с 6 строки :)

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

Ну а отчего же не серьезно? )) Был бы профи, то стал бы я сидеть на форуме? Я только начинаю, и для меня пока что все в диковинку.

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

У Arduino-EPS-шек всё немного покороче, чем 128 chars

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

Ребят, помогите запустить код, пожалуйста. Ну хотя бы сделать возможность ввода пароля длиной 20-30 символов.

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

brokly аватар

Я этими костылями не пользуюсь :) Если уж делать то по "ГОСТУ" :)

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

Ого, по ГОСТу это как?

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

brokly аватар

Это я так стандарты назвал.

На самом деле ошибся я. Садман прав, респект. Длинна SSID максимум 32 символа, длинна пароля до 64 символов.

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

Это я так стандарты назвал.

На самом деле ошибся я. Садман прав, респект. Длинна SSID максимум 32 символа, длинна пароля до 64 символов.

Тогда тем более интересно, почему ТС счел целесообразным остановиться именно на такой длине пароля?

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

brokly аватар

От балды, память пожалел. Не всем приходит в голову посмотреть стандарты. Но в шестой строке , на самом деле описана переменная которая сохраняет всего 20 имен сетей, причем их длина не ограничена.

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

ua6em аватар

потому, что 9 символов в пароле, это минимум, когда включается шифрование, иначе точка открыта

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

От балды, память пожалел. Не всем приходит в голову посмотреть стандарты. Но в шестой строке , на самом деле описана переменная которая сохраняет всего 20 имен сетей, причем их длина не ограничена.

Стало еще непонятней и одновременно непонятно. Значит длина имен сетей практически неограничена, на кой хрен нужно 20 имен сетей, хотя за глаза хватило бы и 6-7 по убыванию мощности. А вот на пароль длины пожалел (( крыса .

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

потому, что 9 символов в пароле, это минимум, когда включается шифрование, иначе точка открыта

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

brokly аватар

Ну почему же, у меня бывает что требуемая сеть находится где нибудь на 30м месте. Кроме того этот код не ранжирует сети по RSSI.Так что для того что бы вывести на экран десяток самых "громких" нужно отсортировать весь список.

Я не знаю какие косяки вылезают в этом коде, но самое главное не забывать, что из-за того, что ESP имеют единый радиоканал для точки доступа и клиента, на время сканирования эфира на тему других точек доступа, она сама перестает быть точкой доступа, а это влечет отсоединение остальных клиентов от сети.

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

Ну почему же, у меня бывает что требуемая сеть находится где нибудь на 30м месте. Кроме того этот код не ранжирует сети по RSSI.Так что для того что бы вывести на экран десяток самых "громких" нужно отсортировать весь список.

Я не знаю какие косяки вылезают в этом коде, но самое главное не забывать, что из-за того, что ESP имеют единый радиоканал для точки доступа и клиента, на время сканирования эфира на тему других точек доступа, она сама перестает быть точкой доступа, а это влечет отсоединение остальных клиентов от сети.


Умно, нужно поглядеть пример из Factory test там есть скан сетей, и помоему они ранжируются. Попозже выложу этот скетч.
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Rumata аватар

Хорошая тема. Подпишусь. В этом году планирую вшить подобный функционал в свой зоопарк устройств. Пока работает только быстрое переключение сценариев: работа - дом/дача - мобильный. К неизвестным сетям не умеют подключаться

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

ua6em аватар

Ну почему же, у меня бывает что требуемая сеть находится где нибудь на 30м месте. Кроме того этот код не ранжирует сети по RSSI.Так что для того что бы вывести на экран десяток самых "громких" нужно отсортировать весь список.

Я не знаю какие косяки вылезают в этом коде, но самое главное не забывать, что из-за того, что ESP имеют единый радиоканал для точки доступа и клиента, на время сканирования эфира на тему других точек доступа, она сама перестает быть точкой доступа, а это влечет отсоединение остальных клиентов от сети.

надо посмотреть, если проверяю подключенных клиентов к первичной AP, то таки да, а сканирование точек безобрывное вроде )))

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

Скетч

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

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

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

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

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

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

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

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

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

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

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

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

Итого

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

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

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

Модуль ESP8266 будет сконфигурирован как самостоятельная точка доступа WiFi. Для такого режима работы не требуется привязка к существующей WiFi сети. Для соединения смартфон должен подключиться к созданной точке доступа.

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

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



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

В правой панели во вкладке «Конфигурация», выберите следующие настройки.



В правой панели во вкладке «Подключение модуля» установите следующие настройки.



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

В настройках так же указано имя будущей точки доступа и пароль точки доступа.

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

В открывшейся странице с исходным кодом скетча загрузите его на свой компьютер (ссылка «Загрузить код») и откройте его в Arduino IDE.

Так же с этой страницы загрузите библиотеку RemoteXY (ссылка «Загрузить библиотеку»).

С правильно установленной библиотекой исходный код скетча должен компилироваться без ошибок.

Шаг 4. Настройте ESP8266

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

Что необходимо проверить:

  • Модуль имеет прошивку с поддержкой AT команд версии не ниже v0.40;
  • Модуль настроен на скорость работы 115200.

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

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

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



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

Скетч загружается в Arduino обычным способом. Однако из за того что модуль ESP8266 подключен к контактам 0 и 1, программирование становится невозможным. Компилятор будет показывать ошибку.

Примечание: Первый признак того, что программирование прошло успешно, это мерцание синего светодиода на модуле ESP8266 в течении полсекунды сразу после сброса. Мерцание синего светодиода означает обмен данными между Arduino и ESP8266. В эти полсекунды Arduino производит настройку ESP8266 для работы в качестве точки доступа.

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

Установите мобильное приложение на ваш смартфон/планшет.

Примечание: В приложении для iOS перед подключением необходимо вручную подключить смартфон к точке доступа, используя системные настройки операционной системы. Приложение для Android умеет самостоятельно переключить систему на точку доступа устройства и вернуть предыдущую точку доступа после отключения.

В приложении нажмите кнопку нового подключения «+» в верхней панели. В открывшемся окне выберите подключение «WiFi точка доступа».



В приложении для Android включите WiFi и нажмите кнопку обновления списка доступных точек доступа. Выберите точку доступа RemoteXY. В открывшемся окне введите пароль точки доступа «12345678», нажмите кнопку «Подключиться».


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

Вы можете проверить наличие связи между Arduino и ESP8266 используя Serial Monitor, который можно открыть во вкладке Tools в Arduino IDE.

Проверьте наличие правильно загруженной программы

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

Если вы уже добавили в проект какой либо код вашей задачи, попробуйте протестировать RemoteXY без этого кода, используя только тот код который генерирует редактор.

Проверьте связь между Arduino и ESP8266

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


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», это означает что нет связи между Arduino и ESP8266.

Связь может отсутствовать по разным причинам. Ниже перечислены основные:

  • контакты RX и TX подключены не верно, перепутаны контакты, или подключены не к тем контактам, или не подключены совсем;
  • скорость передачи данных не совпадает, ESP8266 по умолчанию использует скорость 115200;
  • нет питания на ESP8266, при подаче питания на ESP8266 должен светиться красный светодиод;
  • не хватает мощности источника питания 3.3 В для ESP8266;
  • модуль ESP8266 неисправен.

Проверьте прошивку ESP8266

Если после сброса Arduino в Serial Monitor вы видите только начало последовательности команд, но нет завершающей команды AT+CIPSERVER=1,6377 это означает, что модуль ESP8266 имеет устаревшую прошивку. Требуется обновление прошивки.

Если инициализация проходит успешно и вы видите последнюю команду AT+CIPSERVER=1,6377, но при попытке подключения с мобильного приложения возникает ошибка, возможно, что модуль ESP8266 имеет устаревшую прошивку.

Проверьте объем памяти вашего ESP8266. Это можно сделать так же посмотрев маркировку чипа памяти, который находится на плате рядом с чипом ESP8266. Если размер памяти составляет 4 Mbit и меньше (установлен чип 25Q40), скорее всего этот модуль не будет работать как точка доступа для RemoteXY.

Проверьте питание ESP8266

Так же возможно, что вашей ESP8266 не хватает мощности источника питания. Некоторые платы Arduino имеют слабый стабилизатор напряжения 3.3 В, который не способен выдавать 200-300 мА в пиковых режимах. В этом случае в Serial Monitor вы так же увидите обрыв последовательности команд.

Проверьте особенности вашего смартфона

Некоторые модели смартфонов на Android имеют особенности подключения точек доступа WiFi, и возможно точка доступа не включается автоматически. Попробуйте подключиться к точке доступа предварительно в ручную, используя системные настройки. После этого попробуйте соединиться с устройством из приложения RemoteXY. Если в этом случае соединение устанавливается, значит ваш смартфон имеет такую особенность. Сообщите нам об этом.


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

Одной из важнейших функций, которую обеспечивает 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

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

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

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

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

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

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



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



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

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

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

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

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

Функция Setup()

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

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

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

Функция Loop()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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





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

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

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

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

  • 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.

Читайте также: