15-09-2025, 01:12 PM
(14-09-2025, 12:17 PM)F1ATB a écrit : Le mot de passe est sauvegardé en EEPROM comme le SSID. Sans cela impossible de redémarrer après une coupure de courant.
Ce qui n'est pas sauvegardé, c'est la borne WIFI (adresse MAC) auquel le routeur s'est connecté. A chaque redémarrage l'ESP32 cherche la borne la plus forte répondant au SSID en mémoire.
C'est quoi le PSK64 ?
André
Bonjour André,
j'ai programmé un esp32 en routeur pour tester, la sauvegarde.
le log
Booting
Dernier Reset : ESP_OK
cle : 912567899
Version stockée (partie entière) :15
Version du logiciel( partie entière) :15
Mémoire EEPROM utilisée : 45%
Chip Model: ESP32-D0WDQ6
InitGPIO
InirTemp:13
ESP32_Type:1
Adresse IP en mémoire : 192.168.1.3
RMS-ESP32-12059428
Lancement du Wifi
Scan start
Scan done
3 réseaux trouvés
Nr | SSID | RSSI | MAC | Channel
1 | Freebox-A0DBF8 | -70 | 3A:07:16:1F

2 | SUN2000-HV2320009826 | -79 | E8

3 | Freebox-A0DBF8 | -83 | 3A:07:16:E6:8E:30 | 6
Version : 15.08
ssid:
password:
Tentative de connexion via WPS...
Déconnecté. Redémarrage WiFi...
E (20087) wifi

WiFi Reconnecté en Mode Station
WPS réussi! Stop WPS et connexion vers: Freebox-A0DBF8
Déconnecté. Redémarrage WiFi...
WiFi Reconnecté en Mode Station
WiFi : Freebox-A0DBF8 connecté via WPS!
Récupération IP de RMS-ESP32-12059428 -> 192.168.1.3
Récupération password -> 2a24c0c66f9926719b11b69603243d1e0919b3aaeb04169eb115b359f91d5781
Sauvegarde des identifiants WPS dans l'EEPROM…
Mémoire EEPROM utilisée : 46%
: Connecté par WiFi via WPS, IP : 192.168.1.3 nom d'hôte : <a href='http://RMS-ESP32-12059428.local'>RMS-ESP32-12059428.local</a> Copiez/collez le nom d'hôte dans votre navigateur. ESP32 en mode AP et STA.
Serveur Telnet actif sur le port 23
OK: SSID/PASS sauvegardés.
restart
Booting
Dernier Reset : ESP_OK
cle : 912567899
Version stockée (partie entière) :15
Version du logiciel( partie entière) :15
Mémoire EEPROM utilisée : 46%
Chip Model: ESP32-D0WDQ6
InitGPIO
InirTemp:13
ESP32_Type:1
Adresse IP en mémoire : 192.168.1.3
RMS-ESP32-12059428
Lancement du Wifi
Scan start
Scan done
3 réseaux trouvés
Nr | SSID | RSSI | MAC | Channel
1 | Freebox-A0DBF8 | -74 | 3A:07:16:1F

2 | SUN2000-HV2320009826 | -79 | E8

3 | Freebox-A0DBF8 | -80 | 3A:07:16:E6:8E:30 | 6
Version : 15.08
ssid:Freebox-A0DBF8
password:2a24c0c66f9926719b11b69603243d1e0919b3aaeb04169eb115b359f91d5781
: Wifi Begin : Freebox-A0DBF8
.6.6.6.6.6.6.6.6.6.0.0.0.0.0.0.0.0.0.0
: Connecté par WiFi, addresse IP : 192.168.1.3 or <a href='http://RMS-ESP32-12059428.local' >RMS-ESP32-12059428.local</a>
Serveur Telnet actif sur le port 23
Source : ShellyEm
Date : 15/09/2025 12:55:11
Signal WiFi: -75dBm
IP :192.168.1.3
Puissance reçue : Oui
Charge Lecture RMS (coeur 0) en ms - Min : 1 Moy : 2 Max : 2203
Charge Boucle générale (coeur 1) en ms - Min : 2 Moy : 2 Max : 2
Mémoire RAM libre actuellement: 103292 byte
Mémoire RAM libre minimum: 98256 byte
ESP32 ON depuis : 0.00 heures
La je peux relancer mon routeur et il est bien connecté.
la partie du code modifié
/*** WPS Configurations ***/ //SR19
#define ESP_WPS_MODE WPS_TYPE_PBC //SR19
esp_wps_config_t wps_config = WPS_CONFIG_INIT_DEFAULT(ESP_WPS_MODE); //SR19
bool isGOT_IP = false; //true si IP reçue
volatile bool wpsJustProvisioned = false; // <<< ajouté: indique qu'un WPS a provisionné SSID/PASS
void wpsStop() { //SR19
esp_err_t err = esp_wifi_wps_disable(); //SR19
if (err != ESP_OK) { //SR19
TelnetPrintln("WPS Disable Failed: " + String(err, HEX) + "h -> " + esp_err_to_name(err)); //SR19
} //SR19
} //SR19
//Evènements WPS/WiFi //SR19
void WiFiEvent(WiFiEvent_t event) { //SR19
switch (event) { //SR19
case ARDUINO_EVENT_WIFI_STA_START: //SR19
TelnetPrintln("WiFi Démarré en Mode Station. Attente WPS Client..."); //SR19
break; //SR19
case ARDUINO_EVENT_WIFI_STA_GOT_IP: //SR19
TelnetPrintln("WiFi : " + String(WiFi.SSID()) + " connecté via WPS!"); //SR19
ssid = (WiFi.SSID()); //Récup ssid
TelnetPrintln("Récupération IP de " + hostname + " -> " + (WiFi.localIP().toString())); //SR19
TelnetPrintln("Récupération password -> " + String(WiFi.psk())); //SR19
password = (WiFi.psk()); //Récup password
isGOT_IP = true; /*IP reçue*/ //SR19
// --- AJOUT: persistance auto si la connexion vient d'un provisionnement WPS
if (wpsJustProvisioned) {
if (ssid.length() > 0 && password.length() > 0) {
TelnetPrintln("Sauvegarde des identifiants WPS dans l'EEPROM...");
EcritureEnROM(); // sauve toute la config, dont SSID + password
TelnetPrintln("OK: SSID/PASS sauvegardés.");
} else {
TelnetPrintln("Attention: SSID/PASS WPS vides, pas de sauvegarde.");
}
wpsJustProvisioned = false; // reset du flag
}
Mais bon c'est pour des test je préfére garder le code que vous avez donné en Version 15.08 sinon je pourrais plus faire de mise à jour.
Merci
Alain