Erinnert sich der ESP8266 irgendwie an WLAN-Zugangsdaten?

10

Heute habe ich an einem ESP8266 gebastelt, OTA ausprobiert und einen Webserver geschrieben. Um einen Fehler zu finden, habe ich die Skizze auf die folgenden Zeilen reduziert:

#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();
}

Beachten Sie, dass es keinen Code gibt, um eine Verbindung zu einem Wifi-Netzwerk herzustellen. Der Chip stellt jedoch bei jedem Start eine Verbindung zu meinem lokalen, WPA2-gesicherten Netzwerk her. Ich kann den Chip anpingen, mein Browser kann das "Hallo!" Nachricht über http, die serielle Nachricht wird gedruckt.

Wie ist das möglich? Behält der ESP8266 die Wifi-Informationen irgendwie bei, möglicherweise aufgrund einiger alter OTA-Daten, die nicht vollständig überschrieben wurden?

Ich benutze Plattformio. Hier ist meine gesamte platformio.ini:

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

Ich habe das Kompilierungs- und Upload-Protokoll hier veröffentlicht: https://pastebin.com/BtGrFZiu

Geier
quelle

Antworten:

12

Ja, normalerweise werden die letzten WLAN-Anmeldeinformationen in Flash gespeichert, und der ESP8266 lädt diese Daten beim Booten und stellt die Verbindung zum letzten bekannten WLAN wieder her. Siehe https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

Das SDK speichert einige Informationen, einschließlich der WLAN-Anmeldeinformationen, in einem Bereich des Flashs.

Dieser Sektor wird zwischen den Blinkvorgängen beibehalten, um einen schnellen Start nach dem Update zu ermöglichen. Beim Booten ruft das SDK vor der Ausführung Ihrer Skizze die WLAN-Anmeldeinformationen ab und versucht, eine schnelle Verbindung herzustellen.

Dieses Verhalten kann mithilfe der WiFi.setAutoConnect(autoConnect)in https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect dokumentierten Funktion gesteuert werden . Dies ruft wiederum die Espressif SDK-Funktion wifi_station_set_auto_connect( API-Referenz ) auf.

Geben Sie hier die Bildbeschreibung ein

Kurzum: Dies ist normales Verhalten. Wenn Sie sicherstellen möchten, dass Ihr ESP8266 keine Verbindung zu einem WLAN herstellt, es sei denn, Sie teilen dies ausdrücklich mit, rufen Sie WiFi.setAutoConnect(autoConnect)zu Beginn an.

Bearbeiten: Innerhalb des Firmware-Codes können Sie verwenden system_restore. Die Dokumentation besagt, dass WiFi-bezogene Daten zurückgesetzt würden. Dies sollte frühere Einstellungen zerstören. Die Funktion kann unter https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h in Arduino-ESP8266 aufgenommen werden. Ich habe dies selbst nicht versucht und kann auch nicht sagen, dass es tatsächlich sicherheitskritische Informationen aus Flash löscht.

ABC

Wie Sie auch herausgefunden haben, werden die WiFi-Daten mit absoluter Sicherheit gelöscht, wenn Sie den gesamten Blitz hart löschen. Dies kann erreicht werden, indem esptool.pymit der erase_flashOption z python esptool.py -p COM6 erase_flash. Dann können Sie die neue Firmware flashen, die keine vorherigen WLAN-Einstellungen verwendet (aber wahrscheinlich den Standardzugriffspunkt wieder öffnet).

Dann gibt es auch, ESP.eraseConfigwas nur die relevanten Flash-Sektoren löscht.

Maximilian Gerhardt
quelle
Danke. Gibt es eine Möglichkeit, zuvor festgelegte Anmeldeinformationen aus dem Flash zu löschen? EDIT: Gefunden, dass es mit esptool möglich ist: esp8266.com/viewtopic.php?f=32&t=8204
Geier
1
@Geier aktualisiert.
Maximilian Gerhardt
1
WiFi.disconnect () entfernt auch die gespeicherten Anmeldeinformationen
Juraj