ESP8266 работает как станция в режиме AP
Я программирую ESP8266 через Arduino IDE с библиотеками Arduino. Я явно установил режим WiFi на WIFI_AP
, но затем, как описано ниже, я все еще могу использовать его и как AP, и как станцию. Это оставляет меня в неведении относительно трех доступных режимов (WIFI_AP
, WIFI_STA
и WIFI_AP_STA
), поскольку, похоже, я установил WIFI_AP
явно, но получаю поведение, соответствующее WIFI_AP_STA
.
Я прочитал в сети различные документы об этих режимах. Думаю, я ясно понимаю концептуальную разницу между ними. Меня беспокоит/смущает то, что фактическое поведение не соответствует указанному поведению.
Более подробная информация:
В начале моей функции setup
у меня есть этот код
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, key);
server.begin();
где ssid
и key
— это строки, определенные с соответствующими значениями, а server
— это глобальная переменная типа WiFiServer
, которая была инициализирована вне setup
. При запуске я вижу сеть с указанным именем на своем телефоне и могу подключиться к ней с указанным паролем. Затем я могу перейти по IP-адресу, назначенному ESP8266, и установить веб-страницу, отправленную сервером, который был определен в коде. Пока все хорошо.
В какой-то момент позже, внутри моего цикла
, условие запускает ESP8266 для подключения к моему маршрутизатору. В частности, у меня есть эта последовательность кода, которая запускается, как только происходит этот триггер:
WiFi.disconnect();
WiFi.begin(router_ssid, router_key);
auto status = WiFi.status();
while ( (status != WL_CONNECTED) && (status != WL_CONNECT_FAILED) ) {
delay(500);
status = WiFi.status();
}
Как и прежде, router_ssid
и router_key
— это переменные, объявленные в другом месте с соответствующими значениями для моего маршрутизатора. Я могу проверить из последующих операторов печати, что соединение успешно и получить IP-адрес, назначенный моим маршрутизатором. Очевидно, что новый IP-адрес назначается маршрутизатором, поскольку он находится в подсети, используемой моим маршрутизатором, которая отличается от подсети, определяемой ESP8266 в режиме AP.
ESP8266 настроен на обслуживание небольшой веб-страницы, как отмечено выше. Теперь я могу получить доступ к этой странице с помощью своего телефона, который подключен напрямую к ESP8266 через IP-адрес, изначально назначенный ESP8266 в режиме AP, и я также могу получить доступ к той же странице с моего ноутбука (подключенного к моему маршрутизатору), используя IP-адрес, назначенный моим маршрутизатором. Похоже, что теперь я фактически нахожусь в режиме "AP+STA", несмотря на то, что изначально явно установил режим "AP".
Так что же здесь происходит? Я автоматически переключился в режим "AP+STA", когда вызвал WiFi.begin
? Если да, то в чем смысл (если он есть) вызова WiFi.mode
? Если нет, то почему я могу работать как в режиме "AP+STA", учитывая явную настройку режима "AP"?
@Brick, 👍0
1 ответ
Лучший ответ:
WiFi.begin() — это функция ESP8266WiFiSTAClass. Она изменяет режим WiFi для вас на STA или AP+STA в зависимости от текущего режима.
begin
функции находятся в ESP8266WiFiSTA
enableSTA
находится в классе ESP8266WiFiGeneric
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
- ESP8266 Аналоговое чтение мешает Wi-Fi?