ESP32 WiFiMulti Connectez-vous au réseau Wi-Fi le plus puissant

ESP32 WiFiMulti Connectez-vous au réseau Wi-Fi le plus puissant

Apprenez à utiliser WiFiMulti avec l’ESP32. Il vous permet d’enregistrer plusieurs réseaux (combinaisons SSID/mot de passe). L’ESP32 se connectera au réseau Wi-Fi avec le signal le plus fort (RSSI). Si la connexion est perdue, il se connectera au réseau suivant sur la liste.

ESP32 WiFiMulti Connectez-vous au réseau Wi-Fi le plus puissant à partir d'une liste de réseaux

L’utilisation de WiFiMulti dans vos projets ESP32 IoT est utile si votre carte peut avoir accès à plusieurs réseaux Wi-Fi. L’implémentation de cette fonctionnalité dans vos projets est très simple et améliore considérablement vos projets.

ESP32 avec WiFi Multi

Vous pouvez facilement ajouter WiFiMulti à vos projets ESP32 avec seulement quelques lignes de code. Vous pouvez trouver un exemple dans votre IDE Arduino. Avec une carte ESP32 sélectionnez (Outils > Carte), allez dans Dossier > Exemples > Wifi > WifiMulti.

Voici les étapes essentielles pour utiliser WiFiMulti avec l’ESP32.

Inclure les bibliothèques

Tout d’abord, vous devez inclure les deux WiFi.h et WiFiMulti.h bibliothèques.

#include <WiFi.h>
#include <WiFiMulti.h>

WiFiMulti Objet

Ensuite, vous devez créer un Wi-FiMulti objet:

WiFiMulti wifiMulti;

Ajouter une liste de réseaux

Puis, dans le mettre en place()Utilisez le addAp() méthode sur la wifiMulti objet pour ajouter un réseau. Le addAP() La méthode accepte comme arguments le SSID et le mot de passe du réseau. Vous devez ajouter au moins un réseau.

wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

Connectez-vous au Wi-Fi

Enfin, connectez-vous au Wi-Fi à l’aide du Cours() méthode. Vous pouvez également imprimer un message au cas où le Wi-Fi serait déconnecté.

if(wifiMulti.run() != WL_CONNECTED) {
  Serial.println("WiFi not connected!");
  delay(1000);
}

Vous pouvez exécuter cet extrait sur le boucle() section et si l’ESP32 est déconnecté d’un réseau Wi-Fi, il essaiera automatiquement de se connecter au prochain réseau le plus puissant de la liste.

ESP32 avec WiFiMulti Exemple

Pour que vous compreniez comment WiFiMulti fonctionne avec l’ESP32, nous avons créé un exemple simple qui fait ce qui suit :

  • recherche les réseaux Wi-Fi disponibles et imprime leur RSSI (afin que vous puissiez vérifier que l’ESP32 se connecte réellement au réseau le plus puissant de la liste) ;
  • se connecte au réseau Wi-Fi le plus puissant à partir d’une liste de réseaux fournis ;
  • en cas de perte de connexion avec le réseau, il se connectera automatiquement au prochain réseau le plus puissant de la liste.

Pour tester cela, vous pouvez copier le code suivant dans votre IDE Arduino. Il est basé sur la WiFiScan et Wi-FiMulti exemples fournis dans les exemples de base Arduino pour l’ESP32.

/*
 *  Based on the following examples:
 *  WiFi > WiFiMulti: https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino
 *  WiFi > WiFiScan: https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiScan/WiFiScan.ino
 *  Complete project details at our blog: https://Raspberryme.com/
 *  
 */

#include <WiFi.h>
#include <WiFiMulti.h>

WiFiMulti wifiMulti;

// WiFi connect timeout per AP. Increase when connecting takes longer.
const uint32_t connectTimeoutMs = 10000;

void setup(){
  Serial.begin(115200);
  delay(10);
  WiFi.mode(WIFI_STA);
  
  // Add list of wifi networks
  wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
  wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0) {
      Serial.println("no networks found");
  } 
  else {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i) {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
      delay(10);
    }
  }

  // Connect to Wi-Fi using wifiMulti (connects to the SSID with strongest connection)
  Serial.println("Connecting Wifi...");
  if(wifiMulti.run() == WL_CONNECTED) {
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

void loop(){
  //if the connection to the stongest hotstop is lost, it will connect to the next network on the list
  if (wifiMulti.run(connectTimeoutMs) == WL_CONNECTED) {
    Serial.print("WiFi connected: ");
    Serial.print(WiFi.SSID());
    Serial.print(" ");
    Serial.println(WiFi.RSSI());
  }
  else {
    Serial.println("WiFi not connected!");
  }
  delay(1000);
}

Afficher le code brut

N’oubliez pas d’ajouter une liste de réseaux sur les lignes suivantes. Vous pouvez multiplier ces lignes pour ajouter plus de réseaux.

wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

Noter: si vous souhaitez tester ce projet, mais pour le moment, vous n’avez accès qu’à un seul réseau, vous pouvez créer un hotspot avec votre smartphone et ajouter le nom et le mot de passe du hotspot à la liste des réseaux disponibles. J’ai testé cela avec mon iPhone et cela a parfaitement fonctionné (vous devrez peut-être supprimer les espaces et les caractères spéciaux du nom du point d’accès).

ESP32 avec démonstration WiFiMulti

Après avoir ajouté une liste de réseaux à votre code, vous pouvez la télécharger sur votre ESP32.

Ouvrez le moniteur série à un débit en bauds de 115200 et appuyez sur le bouton ESP32 RST pour redémarrer la carte.

Tout d’abord, il affichera une liste des réseaux à proximité et le RSSI correspondant. Dans mon cas, j’ai accès aux premier et troisième réseaux. Dans mon cas, l’ESP32 se connecte au réseau iPhone qui est le plus fort de la liste (un RSSI plus proche de zéro signifie un signal plus fort).

Exemple WiFiMulti avec l'ESP32 Scan et connexion au réseau

Si je supprime le point d’accès de l’iPhone, la connexion sera perdue et il se connectera au prochain réseau le plus puissant de la liste.

Exemple WiFiMulti avec l'ESP32 Connectez-vous au réseau suivant sur la liste

Conclusion

Dans ce didacticiel, vous avez appris à utiliser WiFiMulti avec l’ESP32 pour ajouter une liste de réseaux auxquels l’ESP32 peut se connecter. Il se connectera au réseau avec le signal le plus fort (RSSI). S’il perd la connexion avec ce réseau, il essaiera automatiquement de se connecter au réseau suivant sur la liste.

Nous espérons que vous trouverez ce tutoriel utile. Nous avons d’autres tutoriels liés aux fonctions Wi-Fi avec l’ESP32 qui pourraient vous être utiles :

En savoir plus sur l’ESP32 avec nos ressources :

Merci d’avoir lu.