Настройка 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 читайте в этой статье.
См.также
Внешние ссылки
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 имеется возможность проанализировать лог подключения, это так же может помочь идентифицировать ошибку.
Класс точки доступа в библиотеке ESP8266WiFi [1]
Описание класса точки доступа будет разбито на три части. Первая – о функциях для настройки программной точки доступа, вторая – для управлении подключением, третья – для извлечения информации о настройках программной точки доступа.
Настройка программной точки доступа
Этот радел описывает функции для настройки ESP8266 в режим программной точки доступа.
softAP()
Задает режим программной точки доступа для установления WiFi-сети.
Самой простой версии этой функции нужен только один параметр. Она используется для настройки открытой WiFi-сети.
WiFi.softAP(ssid)
Чтобы задать сеть, защищенную паролем, или задать дополнительные параметры сети, используйте следующий вариант:
WiFi.softAP(ssid, password, channel, hidden)
Первый параметр обязателен, все остальные – опциональны. Параметры значат следующее:
- ssid – символьная строка, содержащая SSID сети (не более 63 символов)
- password – опциональная символьная строка для пароля. Для сети WPA-PSK ее размер должен быть не более 8 символов. Если пароля не указать, к сети сможет подключиться кто угодно
- channel – опциональный параметр для настройки WiFi-канала (от «1» до «13»). Канал по умолчанию – «1»
- hidden – опциональный параметр. Если задать true, это спрячет SSID
В зависимости от результата (т.е. от того, будет ли настроена точка доступа или нет) функция вернет true или false.
- По умолчанию IP-адресом настроенной программной точки доступа будет «192.168.4.1». Его можно поменять при помощи функции softAPConfig(). Подробней о ней читайте ниже.
- Хотя ESP8266 может работать в комбинированном режиме (станция + точка доступа), у него только один аппаратный канал. Следовательно, по умолчанию в комбинированном режиме номер канала точки доступа будет таким же, как и у станции. Более подробно о том, как это может повлиять на станции, подключенные к программной точке доступа ESP8266, читайте в этом FAQ на форуме Espressif
softAPConfig()
Настраивает сетевой интерфейс программной точки доступа.
softAPConfig (local_ip, gateway, subnet)
Все аргументы имеют тип данных IPAddress и нужны для следующих целей:
- local_ip – IP-адрес программной точки доступа
- gateway – IP-адрес шлюза
- subnet – маска подсети
В зависимости от результата (т.е. от того, удалось ли задать настройки) функция вернет true или false.
#include IPAddress local_IP(192,168,4,22); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); void setup() Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP configuration . "); // "Задаем настройки программной точки доступа . " Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); // "Готово" : "Задать настройки не удалось" Serial.print("Setting soft-AP . "); // "Настройка программной точки доступа . " Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!"); // "Готово" : "Настройка не удалась" Serial.print("Soft-AP IP address = "); // "IP-адрес программной точки доступа = " Serial.println(WiFi.softAPIP()); > void loop() <>
Пример данных, которые могут быть показаны в мониторе порта:
Setting soft-AP configuration . Ready Setting soft-AP . Ready Soft-AP IP address = 192.168.4.22
Управление сетью
Настроив программную точку доступа, вы можете, к примеру, выключить ее или проверить количество станций, подключенных к ней.
softAPgetStationNum()
Извлекает информацию о количестве станций, подключенных к точке доступа.
WiFi.softAPgetStationNum()
Serial.printf("Stations connected to soft-AP = %d\n", WiFi.softAPgetStationNum()); // "Станции подключенные к точке доступа = "
Пример данных, которые могут быть показаны в мониторе порта:
Stations connected to soft-AP = 2
Примечание: Максимальное число станций, которые можно подключить к программной точке доступа на базе ESP8266, равняется пяти.
softAPdisconnect()
Отключает станции от сети, установленной программной точкой доступа.
WiFi.softAPdisconnect(wifioff)
Эта функция выставляет текущие SSID и пароль на нулевые значения. Параметр wifioff – опциональный. Если поставить в нем true, это выключит режим программной точки доступа.
Если задача будет выполнена успешно, функция вернет true, а если нет – false.
Извлечение данных о настройках сети
Функции ниже извлекают информацию о IP-адресе и MAC-адресе программной точки доступа ESP8266.
softIP()
Возвращает IP-адрес сетевого интерфейса программной точки доступа.
WiFi.softAPIP()
Возвращаемое значение имеет тип данных IPAddress.
Serial.print("Soft-AP IP address = "); // "IP-адрес программной точки доступа = " Serial.println(WiFi.softAPIP());
Пример данных, которые могут быть показаны в мониторе порта:
Soft-AP IP address = 192.168.4.1
softAPmacAddress()
Возвращает MAC-адрес программной точки доступа. Эта функция имеет две версии, которые отличаются по типу возвращаемого значения.
Первая версия возвращает указатель:
WiFi.softAPmacAddress(mac)
Параметр mac – это указатель к месту памяти (массив uint8_t размером в 6 элементов), в котором хранится MAC-адрес. Сама функция тоже возвращает указатель.
uint8_t macAddr[6]; WiFi.softAPmacAddress(macAddr); Serial.printf("MAC address = %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); // "MAC-адрес = "
Пример данных, которые могут быть показаны в мониторе порта:
MAC address = 5e:cf:7f:8b:10:13
Вторая версия возвращает строку (тип данных String):
WiFi.softAPmacAddress()
Это опциональный вариант, которому не нужны никакие параметры.
Serial.printf("MAC address = %s\n", WiFi.softAPmacAddress().c_str()); // "MAC-адрес = "
Пример данных, которые могут быть показаны в мониторе порта:
MAC address = 5E:CF:7F:8B:10:13
Другие примеры использования функций, входящих в класс точки доступа, ищите по [ссылка этой ссылке].
См.также
Внешние ссылки
Как создать точку доступа на 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 номер карты.
Если вам понравилось это видео, то не забудьте поставить лайк. Если есть какие вопросы или пожелания, то пишите их в комментариях
И поздравляю вас с Наступающим новым годом.
До встречи в новых видео.