Вопрос AP mode и STA mode — как правильно переключаться?
Обычно у меня ESP работает в STA mode, но иногда нужно переключить ее (по команде извне) в режим точки доступа — AP mode.
И мне кажется, что я горожу много лишнего, и в связи с этим несколько вопросов.
1) Нужно ли делать [inline]WiFi.disconnect();[/inline] при смене режимов? Так, к сожалению, затирается хранимый в ESP ssid и пароль от STA mode.
Где-то вычитал, что [inline]WiFi.disconnect();[/inline] нужен, если «вы не хотите глушить весь вайфай в радиусе действия вашего девайса» (по памяти, может, не точно). Я не понял, как это и почему это, но решил добавлять [inline]WiFi.disconnect();[/inline]
2) Читал здесь, что объявления [inline]WiFi.mode(WIFI_STA);[/inline] и [inline]WiFi.mode(WIFI_AP);[/inline] не нужны — с ними прекрасно справляются [inline]WiFi.begin();[/inline] и [inline]WiFi.softAP();[/inline]
Правильно ли я понял?
3) Если я в режиме станции, то могу получить разные статусы [inline]WiFi.status()[/inline]. А если я в режиме точки доступа, как я могу в этом убедиться? 0 WL_IDLE_STATUS не очень информативен.
ESP8266 Урок 14. Wi-Fi. Режим STA (Станция)
Ну вот, наконец-то, дошли мы до той темы, к которой стремились и ради чего начинался цикл уроков по контроллерам ESP8266 — это приём и передача данных при помощи возможностей ESP8266 по беспроводной сети Wi-Fi.
Я думаю, что все знают, что это за тип сети и для чего она применяется.
Напомню лишь, что Wi-Fi — это протокол передачи данных, осуществляемой без применения проводов, физического уровня.
Как именно передаются данные по сети и как они подготавливаются, как заворачиваются в протоколы различного уровня, мы также очень хорошо знаем. Кто не помнит, напомню — смотрите уроки 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52 по программированию контроллеров AVR, а также аналогичные уроки по контроллерам STM32. В данных уроках мы очень подробно рассмотрели многие протоколы всех уровней модели OSI. Те же самые протоколы будут использоваться и здесь, причём нам особо не придётся их программировать вручную, но знать, как они устроены, для чего нужны, мы обязаны, чтобы избежать ошибок при передаче данных, а также, если они и возникнут, то оперативно их устранить. И рассмотренных нами протоколов нам не потребуется протокол физического уровня Ethernet, его заменит протокол Wi-Fi.
Мы пока подробно не будем изучать протокол Wi-Fi, так как с ним работает наш контроллер аппаратно, но режимы работы мы должны знать. И знакомится с их разновидностями мы будем постепенно.
А пока мы должны знать, что наш контроллер ESP8266 поддерживает три основных режима работы — станция (Station mode или кратко STA), программная точка доступа (SoftAP), а также смешанный — Station + SoftAP.
Самым простым из этих режимов является первый — режим станции.
Режим станции (STA) — это такой режим, в котором контроллер не создает собственную сеть, а подключается к любой существующей сети Wi-Fi, например, к существующей локальной сети или к другому устройству, работающему в режиме точки доступа (AP).
На данном уроке мы настроим режим станции и попробуем подключиться к существующей точке доступа, например к роутеру, который раздаёт Wi-Fi по дому. Роутер от просто точки доступа отличается тем, что трафик, идущий от станций, подключенных к нему, он транслирует во внешнюю сеть и наоборот.
Пока воспользуемся возможностями SDK, то есть не будем лезть глубоко в дебри аппаратной части. Всему своё время.
Схема у нас будет простейшая — отладочная плата, подключенная к USB компьютера
Весь процесс соединения с точкой доступа и вхождение в различные стадии соединения мы будем отслеживать с помощью терминальной программы с помощью UART.
Проект наш выполнен из проекта прошлого урока с именем OS_TIMER и назван WIFI_STA.
Откроем наш проект в Eclipse и в файле main.c подключим библиотеку для работы с UART
What does «STA-ASSOC» mean?
Looking at the wireless statistics on a TL-WR740N wireless router, I sometimes see the MAC address «00-20-00-A5-22-1A» connecting, with the current status being «STA-ASSOC». The manual actually shows exactly this current status as example on page 52. I don’t know this MAC address, and it has sent packets to the router, but I haven’t seen received packets yet. The router uses WPA/WPA2 with AES as encryption, which is what it shows when my workstation connects to the router. Does anyone know what STA-ASSOC is, and if someone have access to the router?
1,464 3 3 gold badges 23 23 silver badges 38 38 bronze badges
NodeMCU (Lua) — Wi-Fi

Начиная свое знакомство с микроконтроллером ESP8266, первым делом захочется подключиться к Wi-Fi и попробовать сетевые возможности данного микроконтроллера. Для работы с Wi-Fi в NodeMCU существует специальный модуль, который так и называется WiFi module. Данный модуль позволяет устанавливать различные режимы работы и настраивать подключения к Wi-Fi сети.
Существует три режима работы Wi-Fi в ESP8266
- Клиент. (STA)
- Точка доступа. (AP)
- Совмещенный режим. (STA + AP)
- Wi-Fi выключен.
Клиент

Один из самых часто используемый режимов работы это режим клиента. Для того чтобы подключиться достаточно несколько строк кода, где нужно указать SSID и пароль вашей Wi-Fi сети.
cfg = > cfg.ssid = "MY-NET" -- SSID cfg.pwd = "myPassword" -- пароль cfg.save = false -- не сохранять настройки (по умолчанию true) wifi.setmode(wifi.STATION) -- выбор режима wifi.sta.config(cfg) -- установка настроек и подключения к Wi-Fi
Точка доступа

В режиме точки доступа, ESP8266 создает свою собственную сеть, к которой могут присоединиться другие устройства (телефон, ПК и т.д). Максимальное количество устройств, которые могут быть одновременно подключены — пять. Данный режим часто используется как промежуточный этап перед подключением ESP8266 к WiFi в режиме клиента. Например, для первоначальной настройки.
cfg= ssid="NODE-XXXXXX", pwd="password" > wifi.setmode(wifi.SOFTAP) wifi.ap.config(cfg)
Если пароль не указывать, то будет создана открытая точка. При подключении, ESP8266 по умолчании выдается ip адрес 192.168.4.1, а клиенту 192.168.4.2
Совмещенный режим

Совмешенный режим Station + AP, когда ESP8266 создает свою собственную сеть и одновременно подключается к другой сети.
. Имейте ввиду что при использовании совмещенного режима используется один и тот же канал для обеих сетей, поскольку ESP8266 может прослушивать только один канал.
cfg_ap= ssid="NODE-XXXXXX", pwd="password" > cfg_sta= ssid="NET", pwd="password" > wifi.setmode(wifi.STATIONAP) wifi.ap.config(cfg_ap) wifi.sta.config(cfg_sta)
События
Для отслеживания различных событий существую функция callback на которую можно подписаться.
wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T) print("STA_CONNECTED") -- вызовется при подключении к сети dofile('my_script.lua') end) wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) print("STA_DISCONNECTED") -- вызовется при отключении от сети end
Например, если ваш скрипт передает данные на сервер, то пока подключение с сетью не будет установлено, нет смысла запускать ваш скрипт раньше.
Событие вызывается каждый раз при подключении или отключении от сети (в зависимости на какое событие вы подписались), это нужно учитывать в вашем коде.
Поиск сетей
Чтобы иметь возможность сканировать доступные сети, в модули существует функция wifi.sta.getap(), но доступ к этой функция есть только в режиме клиента или совмещенный. При попытки запустить ее из режима точки доступа, выдаст ошибку с предупреждением.
function listap(t) -- callback функция for k,v in pairs(t) do -- разбираем таблицу print(k.." : "..v) -- выводим значения в консоль end end wifi.sta.getap(1, listap) -- 1 это формат данных возвращаемой таблицы
Сегодня я постарался написать об основных функциях которые потребуются для работы ESP8266 с Wi-Fi сетями, о других возможностях Wi-Fi модуля можно узнать если внимательно изучить документацию.
