ESP8266是否能以某种方式记住wifi访问数据?


10

今天,我对ESP8266进行了一些修补,尝试了OTA并编写了一个Web服务器。为了发现错误,我将草图简化为以下几行:

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

请注意,没有代码可连接到Wifi网络。但是,每次启动时,该芯片仍会连接到受WPA2保护的本地网络。我可以ping芯片,我的浏览器可以显示“嗨!” 通过http消息,串行消息被打印。

这怎么可能?ESP8266是否以某种方式保留了Wifi信息,也许是由于某些旧的OTA数据并未完全覆盖?

我正在使用platformio。这是我的整个platformio.ini:

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

我在这里发布了编译和上传日志:https : //pastebin.com/BtGrFZiu

Answers:


12

是的,通常情况下,最后一个WiFi凭证通常会保存在闪存中,ESP8266会在启动时加载此数据并重新连接到最后一个已知的WiFi。参见https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100

SDK将一些信息(包括wifi凭据)存储在闪存的扇区中。

该扇区保持在两次闪烁之间,以允许更新后快速启动。在启动时,在执行草图之前,SDK将检索wifi凭据并尝试快速连接。

可以通过使用https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect中WiFi.setAutoConnect(autoConnect)记录的功能来控制此行为。依次调用Espressif SDK函数(API参考wifi_station_set_auto_connect

在此处输入图片说明

简而言之:这是正常行为。如果要确保ESP8266除非明确告知必须不连接任何WiFi,请从头WiFi.setAutoConnect(autoConnect)开始调用。

编辑:从固件代码中,您可以使用system_restore。该文档说,它将重置与WiFi相关的数据。这会破坏以前的设置。该功能可以从Arduino-ESP8266中的https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h中包含。我自己没有尝试过,也不能说它实际上从闪存中删除了对安全至关重要的信息。

abc

或者,正如您还发现的那样,硬擦除整个闪存将绝对确定地清除WiFi数据。这可以通过esptool.pyerase_flash选项(例如)配合使用来实现python esptool.py -p COM6 erase_flash。然后,您可以刷新将不使用以前的WiFi设置的新固件(但可能会再次打开默认访问点)。

然后还有ESP.eraseConfig只擦除相关的闪存扇区。


谢谢。有没有办法擦除以前从闪存设置的凭据?编辑:发现可以用esptool:esp8266.com/viewtopic.php?
Geier

1
@Geier已更新。
Maximilian Gerhardt '18

1
WiFi.disconnect()也会删除记住的凭据
Juraj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.