La magorité du code que l'on peut trouver pour connecter son ESP à un réseau utilise une boucle ...
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Sauf qu'on peut faire beaucoup mieux en utilisant ...
La bibliothèque WiFi vient avec un exemple .../libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino (je vous laisse regarder, les sources sont claires). En particulier, il contient la liste des évènements reconnus :
0 SYSTEM_EVENT_WIFI_READY < ESP32 WiFi ready
1 SYSTEM_EVENT_SCAN_DONE < ESP32 finish scanning AP
2 SYSTEM_EVENT_STA_START < ESP32 station start
3 SYSTEM_EVENT_STA_STOP < ESP32 station stop
4 SYSTEM_EVENT_STA_CONNECTED < ESP32 station connected to AP
5 SYSTEM_EVENT_STA_DISCONNECTED < ESP32 station disconnected from AP
6 SYSTEM_EVENT_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed
7 SYSTEM_EVENT_STA_GOT_IP < ESP32 station got IP from connected AP
8 SYSTEM_EVENT_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0
9 SYSTEM_EVENT_STA_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode
10 SYSTEM_EVENT_STA_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode
11 SYSTEM_EVENT_STA_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode
12 SYSTEM_EVENT_STA_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode
13 SYSTEM_EVENT_AP_START < ESP32 soft-AP start
14 SYSTEM_EVENT_AP_STOP < ESP32 soft-AP stop
15 SYSTEM_EVENT_AP_STACONNECTED < a station connected to ESP32 soft-AP
16 SYSTEM_EVENT_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP
17 SYSTEM_EVENT_AP_STAIPASSIGNED < ESP32 soft-AP assign an IP to a connected station
18 SYSTEM_EVENT_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface
19 SYSTEM_EVENT_GOT_IP6 < ESP32 station or ap or ethernet interface v6IP addr is preferred
20 SYSTEM_EVENT_ETH_START < ESP32 ethernet start
21 SYSTEM_EVENT_ETH_STOP < ESP32 ethernet stop
22 SYSTEM_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up
23 SYSTEM_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down
24 SYSTEM_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP
25 SYSTEM_EVENT_MAX
Visiblement, il existerait une API équivalente pour ESP8266 mais elle semble beaucoup plus confidentielle. La seule référence que j'ai trouvé est le fichier hardware/esp8266/<version>/tests/device/test_WiFi_events/test_WiFi_events.ino
Il faudra que j'essaie un jour ...
Pour se connecter à un réseau en tant que client, voici les évènements qui me paraissent intéressants :
La première chose à faire (avant donc même d'activer le WiFi), c'est d'enregistrer des gestionnaires d'évènements par la méthode
WiFi.onEvent( gestionnaire, signal );
Par exemple avec
WiFi.onEvent( debugWiFiEvent );
WiFi.onEvent( getConnecting, WiFiEvent_t::SYSTEM_EVENT_WIFI_READY );
l'évènement WiFiEvent_t::SYSTEM_EVENT_WIFI_READY lancera à la fois debugWiFiEvent() et getConnecting().
Par le classique
WiFi.begin(ssid, password);
Voici quelques gestionnaires interessants :
Pour l'évènement WiFiEvent_t::SYSTEM_EVENT_STA_STOP
void getStop( WiFiEvent_t event, WiFiEventInfo_t info ){
WiFi.disconnect(true);
}
Pour se connecter à un réseau, l'adaptateur WiFi effectue un calibrage pour obtenir le meilleur signal. Pour que les connexions suivantes soient plus rapides, il stocke les informations récoltées pour éviter de devoir le faire à chaque fois.
Sauf que la connexion n'est jamais strictement identique sur un appareil mobile tel qu'une montre. Du coup, il FAUT effacer le calibrage précédent faute de quoi notre montre ne se reconnectera jamais.
Pour WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED
void getDisconnected( WiFiEvent_t event, WiFiEventInfo_t info ){
WiFi.mode(WIFI_OFF);
}
Nous avons perdu la connexion : autant stoppé le WiFi pour économiser de la batterie. Il faut donc évidemment que l'utilisateur en soit inverti, par exemple en changeant l'icône WiFi.
Rien ne vaut un message explicite pour débugger.
static void debugWiFiEvent(WiFiEvent_t event){
Serial.printf("[WiFi-event] event: %d ", event);
}
Associé à
WiFi.onEvent( debugWiFiEvent );
Si le code est légèrement plus complexe, utiliser les évènements présente 2 énormes avantages :
Visitez : Nos sorties Ski et rando |
Copyright Laurent Faillie
2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso. |
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution. |
Visites durant les 7 derniers jours au total. |
Vous pouvez
laissez un commentaire
sur cette page.