ESP8266 pracujący jaki Access Point albo klient WiFi

Pracując ostatnio nad firmware Pogodełka, natknąłem się na pewną nieudokumentowaną cechę SDK dla ESP8266 w zakresie trybów pracy AccessPoint/klient (station). W dużym skrócie, jeśli choć raz skonfigurujesz tryb AccessPoint na ESP8266, to nawet wgrywając nowy program, mogą te ustawienia zostać aktywne.

Objaw jest taki, że Twoje ESP8266 pracuje jako stacja (klient WiFi) a mimo to rozgłasza SSID, do którego się można dopiąć. W dokumentacji do ESP8266WiFi napisane jest, że aby podłączyć się do sieci WiFi należy skorzystać z komendy WiFi.begin(SSID, PASSWORD) wpisując właściwe wartości. Jeśli wcześniej mieliście kod z Access Pointem, to uruchomiając w ten sposób tryb station spowodujecie, że ESP8266 podłączy się do wskazanej sieci, ale jednocześnie uruchomi AccessPointa z danymi jakie miało ustawione wcześniej.

By pozbyć się tej dodatkowej sieci należy wskazać wprost, że chcemy pracować jako stacja. Prawidłowa sekwencja uruchamiania tego trybu to:

WiFi.mode(WIFI_STA);
WiFi.begin("siec_wifi","tajne haslo");

Chcecie sobie przetestować? Proszę skorzystajcie z tego przykładu w tym giscie. Skompilujcie i wgrajcie np w nodeMCU. Ze względu na #define w linii 3 skompilowana zostanie wersja z Access Pointem. Sprawdźcie że pojawia się takie SSID.

Potem usuńcie #define i wprowadźcie swoje hasło i nazwę sieci WiFi w linii 15. Po wgraniu kodu ponownie, podłączcie się do seriala – dostaniecie info o adresie IP, który dostało ESP. Czyli pracuje jako stacja w sieci. Mimo to możecie sprawdzić, że sieć testAP jest aktywna dalej i można się do niej podłączyć.

Dlatego, jeśli uruchamiacie WiFi na ESP, to nie zapomnijcie dodać linii WiFi.mode(WIFI_STA); przed wywołaniem WiFi.begin. Wtedy dodatkowa sieć zniknie.