Workaround: il modulo ESP8266 non si collega più alla rete Wi-Fi

Sono quelle cose per cui si impazzisce dando la colpa a questa o quell’altra cosa perdendo giorni di tempo, quando invece il problema è più banale di quanto si possa pensare! Io ci ho sbattuto su per un bel po’: il modulo NodeMCU si rifiutava di collegarsi alla rete Wi-Fi , al che, non avendo cambiato codice nè configurazione della rete di casa… ho pensato subito che potesse essere accaduto qualcosa alla scheda dal momento che ci stavo smanettando parecchio… Ho quindi acquistato dei moduli nuovi pensando di aver guastato quello in mio possesso.

Solo quando anche i moduli nuovi rifiutavano di collegarsi ho pensato bene di cercare in altre direzioni e ho scoperto che il problema non era stato causato da me (almeno in maniera diretta!).

Dopo l’ultimo aggiornamento per l’ESP8266 (versione 2.3.0) su Arduino IDE, capita che il modulo non si riesca più a collegare alla rete Wi-Fi, questo problema è documentato su Github (issue 2186).

Ci sono 2 workaround forniti dall’autore delle librerie, io ne ho utilizzato uno che ha funzionato subito: basta inserire 3 righe nel codice prima del WiFi.Begin per accendere e spegnere il modulo WiFi e far tornare tutto alla normalità. Includo qui il workaround con un po’ di configurazione minima che uso normalmente sui miei programmi: 

WiFiServer server(80); // html server su porta 80 (standard)
const char* ssid = "[IL SSID DELLA TUA RETE WIFI]";
const char* password = "[PASSWORD DELLA TUA RETE WIFI]";
 
// le seguenti 3 righe costituiscono il workwaround per l'issue 2186
WiFi.persistent(false);
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
 
// le seguenti righe commentate sono da usare solo se si vuole assegnare alla scheda un indirizzo IP statico
//IPAddress ip(192,168,0,105); // indirizzo ip da assegnare al modulo
//IPAddress gateway(192,168,0,1); // indirizzo ip del router
//IPAddress subnet(255,255,255,0); // subnet mask
//WiFi.config(ip,gateway,subnet); // configura il modulo wi-fi per utilizzare l'IP statico
 
WiFi.begin(ssid, password); // si collega alla rete specificata 
 
while (WiFi.status() != WL_CONNECTED) 
    {
    // qui vanno i task da eseguire fino a che il modulo NON è connesso
    }
 
// a questo punto siamo connessi alla rete wi-fi, avviamo il server:
server.begin();

 

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)