Czy ESP8266 w jakiś sposób pamięta dane dostępu do Wi-Fi?

10

Dzisiaj trochę majstrowałem przy ESP8266, wypróbowałem OTA i napisałem serwer WWW. Aby znaleźć błąd, zredukowałem szkic do następujących linii:

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

Zauważ, że nie ma kodu do połączenia z siecią Wi-Fi. Jednak układ nadal łączy się z moją lokalną, zabezpieczoną WPA2 siecią przy każdym uruchomieniu. Mogę pingować chip, moja przeglądarka może wyświetlić „Cześć!” wiadomość za pośrednictwem http, wiadomość szeregowa zostanie wydrukowana.

Jak to jest możliwe? Czy ESP8266 w jakiś sposób zachowuje informacje Wi-Fi, może z powodu niektórych starych danych OTA, które nie zostały całkowicie nadpisane?

Używam platformio. Oto moja cała platformaio.ini:

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

Opublikowałem dziennik kompilacji i przesyłania tutaj: https://pastebin.com/BtGrFZiu

Geier
źródło

Odpowiedzi:

12

Tak, zwykle ostatnie poświadczenia Wi-Fi zostaną zapisane we flashu, a ESP8266 ładuje te dane podczas uruchamiania i ponownie łączy się z ostatnim znanym Wi-Fi. Zobacz https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

SDK przechowuje pewne informacje, w tym dane uwierzytelniające Wi-Fi, w sektorze flash.

Ten sektor jest przechowywany między flashowaniami, aby umożliwić szybkie uruchomienie po aktualizacji. Podczas uruchamiania, przed wykonaniem szkicu, SDK pobierze poświadczenia Wi-Fi i podejmie próbę szybkiego połączenia.

To zachowanie można kontrolować za pomocą funkcji WiFi.setAutoConnect(autoConnect)opisanej w https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . To z kolei wywołuje funkcję Espressif SDK wifi_station_set_auto_connect( odwołanie API )

wprowadź opis zdjęcia tutaj

W skrócie: Jest to normalne zachowanie. Jeśli chcesz się upewnić, że ESP8266 nie łączy się z żadnym Wi-Fi, chyba że wyraźnie to zrobisz, zadzwoń WiFi.setAutoConnect(autoConnect)na początku.

Edycja: Z kodu oprogramowania wewnętrznego można korzystać system_restore. Dokumentacja mówi, że resetuje dane związane z WiFi. To powinno zniszczyć poprzednie ustawienia. Funkcję można włączyć z https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h w Arduino-ESP8266. Jednak sam tego nie próbowałem i nie mogę powiedzieć, że faktycznie usuwa z pamięci flash informacje o kluczowym znaczeniu dla bezpieczeństwa.

ABC

Lub, jak również się dowiedziałeś, twarde usunięcie całej lampy błyskowej oczyści dane WiFi z absolutną pewnością. Można to osiągnąć poprzez zastosowanie esptool.pyz erase_flashopcji, np python esptool.py -p COM6 erase_flash. Następnie możesz sflashować nowe oprogramowanie, które nie będzie korzystało z poprzednich ustawień Wi-Fi (ale prawdopodobnie ponownie otworzy domyślny punkt dostępu).

Jest też coś, ESP.eraseConfigco usuwa tylko odpowiednie sektory flash.

Maksymilian Gerhardt
źródło
Dziękuję Ci. Czy istnieje sposób na usunięcie poświadczeń, które zostały wcześniej ustawione z pamięci flash? EDYCJA: Stwierdzono, że jest to możliwe dzięki esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier
1
@Geier updated.
Maximilian Gerhardt
1
WiFi.disconnect () usuwa również zapamiętane dane uwierzytelniające
Juraj,