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"?

, 👍0


1 ответ


Лучший ответ:

0

WiFi.begin() — это функция ESP8266WiFiSTAClass. Она изменяет режим WiFi для вас на STA или AP+STA в зависимости от текущего режима.

begin функции находятся в ESP8266WiFiSTA

Функция

enableSTA находится в классе ESP8266WiFiGeneric

,