[SOLVED] Reconnectez ESP32 au réseau Wi-Fi après une connexion perdue

[SOLVED] Reconnectez ESP32 au réseau Wi-Fi après une connexion perdue

Ce guide rapide montre comment vous pouvez reconnecter votre ESP32 à un réseau Wi-Fi après avoir perdu la connexion. Cela peut être utile dans les scénarios suivants : l’ESP32 perd temporairement le signal Wi-Fi ; l’ESP32 est temporairement hors de la portée Wi-Fi du routeur ; le routeur redémarre ; le routeur perd la connexion Internet ou d’autres situations.

ESP32 se reconnecter au réseau Wi-Fi après une perte de connexion

Nous avons un guide similaire pour la carte ESP8266 NodeMCU :

Se reconnecter au réseau Wi-Fi après une connexion perdue

Pour vous reconnecter au Wi-Fi après une perte de connexion, vous pouvez utiliser WiFi.reconnect() pour essayer de vous reconnecter au point d’accès précédemment connecté :

WiFi.reconnect()

Ou, vous pouvez appeler WiFi.disconnect() suivie par WiFi.begin(ssid,mot de passe).

WiFi.disconnect();
WiFi.begin(ssid, password);

Alternativement, vous pouvez également essayer de redémarrer l’ESP32 avec ESP.restart() lorsque la connexion est perdue.

Vous pouvez ajouter quelque chose comme l’extrait ci-dessous à la boucler() qui vérifie de temps en temps si la carte est connectée et essaie de se reconnecter si elle a perdu la connexion.

unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
  Serial.print(millis());
  Serial.println("Reconnecting to WiFi...");
  WiFi.disconnect();
  WiFi.reconnect();
  previousMillis = currentMillis;
}

N’oubliez pas de déclarer le précédentMillis et intervalle variables. le intervalle correspond au laps de temps entre chaque vérification en millisecondes (par exemple 30 secondes) :

unsigned long previousMillis = 0;
unsigned long interval = 30000;

Voici un exemple complet.

/*
  Rui Santos
  Complete project details at https://Raspberryme.com/solved-reconnect-esp32-to-wifi/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>

// Replace with your network credentials (STATION)
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

unsigned long previousMillis = 0;
unsigned long interval = 30000;

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  initWiFi();
  Serial.print("RSSI: ");
  Serial.println(WiFi.RSSI());
}

void loop() {
  unsigned long currentMillis = millis();
  // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    WiFi.reconnect();
    previousMillis = currentMillis;
  }
}

Afficher le code brut

Cet exemple montre comment se connecter à un réseau et vérifie toutes les 30 secondes s’il est toujours connecté. Si ce n’est pas le cas, il se déconnecte et essaie de se reconnecter à nouveau.

Alternativement, vous pouvez également utiliser les événements Wi-Fi pour détecter que la connexion a été perdue et appeler une fonction pour gérer ce qu’il faut faire lorsque cela se produit (voir la section suivante).

Événements Wi-Fi ESP32

L’ESP32 est capable de gérer différents événements Wi-Fi. Avec les événements Wi-Fi, vous n’avez pas besoin de vérifier constamment l’état du Wi-Fi. Lorsqu’un certain événement se produit, il appelle automatiquement la fonction de gestion correspondante.

Les événements suivants sont très utiles pour détecter si la connexion a été perdue ou rétablie :

  • SYSTEM_EVENT_STA_CONNECTED: l’ESP32 est connecté en mode station à un point d’accès/hotspot (votre routeur) ;
  • SYSTEM_EVENT_STA_DISCONNECTED: la station ESP32 déconnectée du point d’accès.

Passez à la section suivante pour voir un exemple d’application.

Se reconnecter au réseau Wi-Fi après une connexion perdue (événements Wi-Fi)

Les événements Wi-Fi peuvent être utiles pour détecter qu’une connexion a été perdue et essayer de se reconnecter juste après (utilisez le SYSTEM_EVENT_AP_STADISCONNECTED un événement). Voici un exemple de code :

/*
  Rui Santos
  Complete project details at https://Raspberryme.com/solved-reconnect-esp32-to-wifi/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>
 
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("Connected to AP successfully!");
}

void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("Disconnected from WiFi access point");
  Serial.print("WiFi lost connection. Reason: ");
  Serial.println(info.disconnected.reason);
  Serial.println("Trying to Reconnect");
  WiFi.begin(ssid, password);
}

void setup(){
  Serial.begin(115200);

  // delete old config
  WiFi.disconnect(true);

  delay(1000);

  WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_CONNECTED);
  WiFi.onEvent(WiFiGotIP, SYSTEM_EVENT_STA_GOT_IP);
  WiFi.onEvent(WiFiStationDisconnected, SYSTEM_EVENT_STA_DISCONNECTED);

  /* Remove WiFi event
  Serial.print("WiFi Event ID: ");
  Serial.println(eventID);
  WiFi.removeEvent(eventID);*/

  WiFi.begin(ssid, password);
    
  Serial.println();
  Serial.println();
  Serial.println("Wait for WiFi... ");
}

void loop(){
  delay(1000);
}

Afficher le code brut

Comment ça fonctionne?

Dans cet exemple, nous avons ajouté trois événements Wi-Fi : lorsque l’ESP32 se connecte lorsqu’il obtient une adresse IP et lorsqu’il se déconnecte : SYSTEM_EVENT_STA_CONNECTED, SYSTEM_EVENT_STA_GOT_IP, et SYSTEM_EVENT_STA_DISCONNECTED, respectivement.

Lorsque la station ESP32 se connecte au point d’accès (SYSTEM_EVENT_STA_CONNECTED événement), le WiFiStationConnecté() la fonction s’appellera :

WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_CONNECTED);

le WiFiStationConnecté() La fonction imprime simplement que l’ESP32 s’est connecté avec succès à un point d’accès (par exemple, votre routeur). Cependant, vous pouvez modifier la fonction pour effectuer toute autre tâche (comme allumer une LED pour indiquer qu’elle est correctement connectée au réseau).

void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("Connected to AP successfully!");
}

Lorsque l’ESP32 obtient son adresse IP, le WiFiGotIP() la fonction s’exécute.

WiFi.onEvent(WiFiGotIP, SYSTEM_EVENT_STA_GOT_IP);

Cette fonction imprime simplement l’adresse IP sur le moniteur série.

void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

Lorsque l’ESP32 perd la connexion avec le point d’accès (SYSTEM_EVENT_STA_DISCONNECTED), la WiFiStationDéconnecté() fonction est appelée.

WiFi.onEvent(WiFiStationDisconnected, SYSTEM_EVENT_STA_DISCONNECTED);

Cette fonction affiche un message indiquant que la connexion a été perdue et tente de se reconnecter :

void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("Disconnected from WiFi access point");
  Serial.print("WiFi lost connection. Reason: ");
  Serial.println(info.disconnected.reason);
  Serial.println("Trying to Reconnect");
  WiFi.begin(ssid, password);
}

Conclusion

Ce didacticiel rapide montre différentes manières de reconnecter votre ESP32 à un réseau Wi-Fi après la perte de la connexion.

Nous vous recommandons de jeter un œil au tutoriel suivant pour mieux comprendre certaines des fonctions Wi-Fi ESP32 les plus utilisées :

L’une des meilleures applications des capacités Wi-Fi de l’ESP32 est la création de serveurs Web. Si vous souhaitez utiliser les cartes ESP32 ou ESP8266 pour créer des projets de serveur Web, vous aimerez peut-être notre eBook :

Nous espérons que vous avez trouvé ce tutoriel utile.

Merci d’avoir lu.