L'ESP8266 se souvient-il en quelque sorte des données d'accès wifi?

10

Aujourd'hui, j'ai fait quelques bricolages avec un ESP8266, en essayant OTA et en écrivant un serveur web. Pour trouver une erreur, j'ai réduit l'esquisse aux lignes suivantes:

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

Notez qu'il n'y a pas de code pour se connecter à un réseau Wifi. Cependant, la puce se connecte toujours à mon réseau local sécurisé par WPA2 à chaque démarrage. Je peux cingler la puce, mon navigateur peut obtenir le "Salut!" via http, le message série est imprimé.

Comment est-ce possible? L'ESP8266 conserve-t-il en quelque sorte les informations Wifi, peut-être à cause d'anciennes données OTA qui n'ont pas été complètement écrasées?

J'utilise platformio. Voici mon platformio.ini entier:

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

J'ai posté le journal de compilation et de téléchargement ici: https://pastebin.com/BtGrFZiu

Geier
la source

Réponses:

12

Oui, normalement les dernières informations d'identification WiFi seront enregistrées en flash et l'ESP8266 charge ces données au démarrage et se reconnecte au dernier WiFi connu. Voir https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

le SDK stocke des informations, y compris les informations d'identification wifi, dans un secteur du flash.

Ce secteur est conservé entre les clignotements pour permettre un démarrage rapide après la mise à jour. Au démarrage, avant l'exécution de votre croquis, le SDK récupérera les informations d'identification wifi et tentera une connexion rapide.

Ce comportement peut être contrôlé en utilisant la fonction WiFi.setAutoConnect(autoConnect)décrite dans https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Cela appelle à son tour la fonction Espressif SDK wifi_station_set_auto_connect( référence API )

entrez la description de l'image ici

En bref: c'est un comportement normal. Si vous voulez vous assurer que votre ESP8266 ne se connecte à aucun WiFi à moins que vous ne le lui disiez explicitement, appelez WiFi.setAutoConnect(autoConnect)au début.

Modifier: à partir du code du firmware, vous pouvez utiliser system_restore. La documentation indique qu'il réinitialisera les données liées au WiFi. Cela devrait détruire les paramètres précédents. La fonction peut être incluse à partir de https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h dans Arduino-ESP8266. Je n'ai pas essayé cela moi-même et je ne peux pas dire qu'il efface les informations critiques pour la sécurité du flash.

abc

Ou, comme vous l'avez également découvert, l'effacement complet du flash purgera les données WiFi avec une certitude absolue. Ceci peut être réalisé en utilisant esptool.pyl' erase_flashoption, par exemple python esptool.py -p COM6 erase_flash. Ensuite, vous pouvez flasher le nouveau firmware qui n'utilisera pas les paramètres WiFi précédents (mais ouvrira probablement à nouveau le point d'accès par défaut).

Ensuite, il y a aussi ESP.eraseConfigqui n'efface que les secteurs flash pertinents.

Maximilian Gerhardt
la source
Je vous remercie. Existe-t-il un moyen d'effacer les informations d'identification précédemment définies dans le flash? EDIT: Trouvé que c'est possible avec esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier
1
@Geier mis à jour.
Maximilian Gerhardt
1
WiFi.disconnect () supprime également les informations d'identification mémorisées
Juraj