ESP8266 ricorda in qualche modo i dati di accesso wifi?


10

Oggi ho provato ad armeggiare con un ESP8266, provando OTA e scrivendo un server web. Per trovare un errore, ho ridotto lo schizzo alle seguenti righe:

#include <ESP8266WebServer.h>

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);
  server.on("/", []() {
    Serial.println("Sending response...");
    server.send(200, "text/plain", "Hi there!");
  });
  server.begin();
}

void loop() {
  server.handleClient();
}

Si noti che non esiste un codice per connettersi a una rete Wifi. Tuttavia, il chip si connette ancora alla mia rete locale protetta da WPA2 ad ogni avvio. Posso eseguire il ping del chip, il mio browser può ottenere "Ciao a tutti!" messaggio via http, il messaggio seriale viene stampato.

Com'è possibile? ESP8266 conserva in qualche modo le informazioni Wifi, forse a causa di alcuni vecchi dati OTA che non sono stati completamente sovrascritti?

Sto usando Platformio. Ecco il mio intero platformio.ini:

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino

Ho pubblicato il registro di compilazione e upload qui: https://pastebin.com/BtGrFZiu

Risposte:


12

Sì, normalmente le ultime credenziali WiFi verranno salvate in flash e ESP8266 carica questi dati all'avvio e si riconnette all'ultimo WiFi noto. Vedi https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

l'SDK memorizza alcune informazioni, comprese le credenziali wifi, in un settore del flash.

Tale settore viene mantenuto tra i flashing per consentire un avvio rapido dopo l'aggiornamento. All'avvio, prima che venga eseguito lo schizzo, l'SDK recupererà le credenziali wifi e tenterà una connessione rapida.

Questo comportamento può essere controllato utilizzando la funzione WiFi.setAutoConnect(autoConnect)come documentato in https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Questo a sua volta chiama la funzione SDK Espressif wifi_station_set_auto_connect( riferimento API )

inserisci qui la descrizione dell'immagine

In breve: questo è un comportamento normale. Se vuoi assicurarti che il tuo ESP8266 non si connetta a nessun WiFi a meno che tu non lo dica esplicitamente, chiamalo WiFi.setAutoConnect(autoConnect)all'inizio.

Modifica: all'interno del codice firmware, è possibile utilizzare system_restore. La documentazione afferma che ripristinerebbe i dati relativi al WiFi. Questo dovrebbe distruggere le impostazioni precedenti. La funzione può essere inclusa da https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h all'interno di Arduino-ESP8266. Non ho provato questo da solo, né posso dire che in realtà cancelli informazioni critiche per la sicurezza da Flash.

abc

Oppure, come hai anche scoperto, la cancellazione completa dell'intero flash eliminerà i dati WiFi con assoluta certezza. Ciò può essere ottenuto utilizzando esptool.pyl' erase_flashopzione, ad es python esptool.py -p COM6 erase_flash. Quindi è possibile eseguire il flashing del nuovo firmware che non utilizzerà le precedenti impostazioni WiFi (ma probabilmente riaprirà il punto di accesso predefinito).

Quindi c'è anche quello ESP.eraseConfigche cancella solo i settori flash rilevanti.


Grazie. C'è un modo per cancellare le credenziali precedentemente impostate dal flash? EDIT: ho scoperto che è possibile con esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier

1
@Geier aggiornato.
Maximilian Gerhardt,

1
WiFi.disconnect () rimuove anche le credenziali ricordate
Juraj
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.