O ESP8266 se lembra de alguma forma dos dados de acesso wifi?

10

Hoje fiz alguns ajustes no ESP8266, testando o OTA e escrevendo um servidor da web. Para encontrar um erro, reduzi o esboço para apenas as seguintes linhas:

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

Observe que não há código para conectar-se a uma rede Wi-Fi. No entanto, o chip ainda se conecta à minha rede local, protegida por WPA2, em cada inicialização. Posso executar ping no chip, meu navegador pode receber o "Olá!" mensagem via http, a mensagem serial é impressa.

Como isso é possível? O ESP8266 de alguma forma retém as informações de Wifi, talvez por causa de alguns dados antigos do OTA que não foram completamente substituídos?

Eu estou usando platformio. Aqui está todo o platformio.ini:

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

Publiquei o registro de compilação e upload aqui: https://pastebin.com/BtGrFZiu

Geier
fonte

Respostas:

12

Sim, normalmente as últimas credenciais do WiFi serão salvas em flash e o ESP8266 carrega esses dados na inicialização e reconecta-se ao último WiFi conhecido. Consulte https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

o SDK armazena algumas informações, incluindo as credenciais de wifi, em um setor do flash.

Esse setor é mantido entre as piscadas para permitir uma inicialização rápida após a atualização. Na inicialização, antes da execução do seu esboço, o SDK recupera as credenciais do wifi e tenta uma conexão rápida.

Esse comportamento pode ser controlado usando a função WiFi.setAutoConnect(autoConnect)conforme documentada em https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Por sua vez, chama a função Espressif SDK wifi_station_set_auto_connect( referência da API )

insira a descrição da imagem aqui

Em resumo: esse é um comportamento normal. Se você quiser ter certeza de que o seu ESP8266 não se conecta a nenhum WiFi, a menos que você diga explicitamente, ligue WiFi.setAutoConnect(autoConnect)para o início.

Editar: No código do firmware, você pode usar system_restore. A documentação diz que redefiniria os dados relacionados ao WiFi. Isso deve destruir as configurações anteriores. A função pode ser incluída em https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h no Arduino-ESP8266. Eu mesmo não tentei nem posso dizer que na verdade apaga informações críticas de segurança do flash.

abc

Ou, como você também descobriu, apagar o flash inteiro apagará os dados do WiFi com certeza absoluta. Isso pode ser conseguido usando esptool.pya erase_flashopção, por exemplo python esptool.py -p COM6 erase_flash. Em seguida, você pode piscar o novo firmware que não usará as configurações anteriores de WiFi (mas provavelmente abrirá o ponto de acesso padrão novamente).

Depois, há também o ESP.eraseConfigque apaga apenas os setores flash relevantes.

Maximilian Gerhardt
fonte
Obrigado. Existe uma maneira de apagar credenciais que foram definidas anteriormente a partir do flash? EDIT: Encontrado que é possível com esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier
11
@Geier atualizado.
Maximilian Gerhardt
11
WiFi.disconnect () remove as credenciais lembrado também
Juraj