¿El ESP8266 recuerda de alguna manera los datos de acceso wifi?

10

Hoy hice algunos ajustes con un ESP8266, probé OTA y escribí un servidor web. Para encontrar un error, reduje el boceto a solo las siguientes líneas:

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

Tenga en cuenta que no hay código para conectarse a una red Wifi. Sin embargo, el chip todavía se conecta a mi red local, segura con WPA2, en cada arranque. Puedo hacer ping al chip, mi navegador puede obtener el "¡Hola!" mensaje a través de http, el mensaje en serie se imprime.

¿Cómo es esto posible? ¿El ESP8266 retiene de alguna manera la información de Wifi, quizás debido a algunos datos antiguos de OTA que no se sobrescribieron por completo?

Estoy usando platformio. Aquí está mi plataforma completa.ini:

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

Publiqué el registro de compilación y carga aquí: https://pastebin.com/BtGrFZiu

Geier
fuente

Respuestas:

12

Sí, normalmente las últimas credenciales de WiFi se guardarán en flash y el ESP8266 carga estos datos en el arranque y se vuelve a conectar al último WiFi conocido. Ver https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

el SDK almacena cierta información, incluidas las credenciales de wifi, en un sector de la memoria flash.

Ese sector se mantiene entre flashes para permitir un inicio rápido después de la actualización. En el arranque, antes de ejecutar su boceto, el SDK recuperará las credenciales wifi e intentará una conexión rápida.

Este comportamiento se puede controlar utilizando la función WiFi.setAutoConnect(autoConnect)como se documenta en https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Esto a su vez llama a la función Espressif SDK wifi_station_set_auto_connect( referencia API )

ingrese la descripción de la imagen aquí

En resumen: este es un comportamiento normal. Si desea asegurarse de que su ESP8266 no se conecta a ningún WiFi a menos que se lo indique explícitamente, llame WiFi.setAutoConnect(autoConnect)al principio.

Editar: desde el código de firmware, puede usar system_restore. La documentación dice que restablecería los datos relacionados con WiFi. Esto debería destruir la configuración anterior. La función se puede incluir desde https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h dentro de Arduino-ESP8266. Sin embargo, no lo he intentado ni puedo decir que realmente borra la información crítica de seguridad de flash.

a B C

O, como también ha descubierto, borrar todo el flash purgará los datos de WiFi con absoluta certeza. Esto se puede lograr mediante el uso esptool.pyde la erase_flashopción, por ejemplo python esptool.py -p COM6 erase_flash. Luego, puede actualizar el nuevo firmware que no usará la configuración WiFi anterior (pero probablemente abrirá nuevamente el punto de acceso predeterminado).

Luego también está el ESP.eraseConfigque borra solo los sectores flash relevantes.

Maximilian Gerhardt
fuente
Gracias. ¿Hay alguna manera de borrar las credenciales que se configuraron previamente desde el flash? EDITAR: descubrió que es posible con esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier
1
@Geier actualizado.
Maximilian Gerhardt
1
WiFi.disconnect () también elimina las credenciales recordadas
Juraj