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

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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.