Weboldal keresés

Csatlakozás a legerősebb WiFi hálózathoz ESP32-ben a WiFiMulti függvény segítségével


Az ESP32 egy IoT alapú mikrokontroller táblázat, amely WiFi és Bluetooth támogatással rendelkezik. Az ESP32 három különböző WiFi üzemmódban (Állomás, Hozzáférési pont vagy mindkettő) működhet. Ezeket a módokat felhasználva az ESP32 számos szorosabb vezeték nélküli kapcsolódást érhet el. Ma az ESP32 több WiFi támogatásáról fogunk beszélni, hogy csatlakozhassunk a legjobb elérhető hálózathoz.

ESP32 WiFiMulti funkcióval

Az ESP32 több hálózathoz is csatlakozhat, ha hozzáférésünk van több mint egy hálózathoz, csak meg kell határoznunk az SSID-jüket és a jelszavukat a kódban. Keresni fog az elérhető hálózatok között, és csatlakozik a legnagyobb jelű Wi-Fi hálózathoz, amelyet a kódban definiáltunk.

Megjegyzés: Ne feledd, hogy egyszerre csak egy hálózathoz fog csatlakozni; ha a kapcsolat azzal a hálózattal megszakad, akkor az ESP32 más elérhető WiFi hálózatokhoz fog csatlakozni.

Megnyithatjuk a WiFiMulti példát az Arduino IDE-ben:

Menj ide: Fájl > Példák > WiFi > WifiMulti

Hogyan lehet több WiFi-hálózatot hozzáadni az ESP32-hez

Több WiFi hálózat hozzáadása az ESP32 táblához. A WifiMulti függvényt fogjuk használni az addAP() használatával. Az addAP() függvény több SSID-t és jelszót is elfogadhat argumentumként. Több hálózat hozzáadásához az SSID-jüket és jelszavaikat külön kell megadni. Az alábbiakban látható a szintaxis, amely segítségével több hálózat adható hozzá a WifiMulti függvénnyel az addAP() használatával:

wifiMulti.addAP("SSID Network1", "Password1");

wifiMulti.addAP("SSID Network2", " Password2");

wifiMulti.addAP("SSID Network3", " Password3");

Hogyan csatlakozzunk a legerősebb WiFi hálózathoz ESP32-ben

Az ESP32 csatlakoztatásához a legjobban elérhető hálózathoz kombinálni fogjuk az ESP32 WiFi keresést és a WiFi multi példát. Írni fogunk egy kódot az Arduino IDE-ben, amely a következő lépéseket hajtja végre:

  • Szkennelje a rendelkezésre álló hálózatokat
  • Nyomtassa ki az RSSI-t (Jel Erősség) a soros monitorra. Így ellenőrizhetjük a legerősebb elérhető hálózatot.
  • Automatikusan csatlakozik a legjobb hálózathoz.
  • Ha megszakad a kapcsolat, automatikusan csatlakozik a következő elérhető legjobb hálózathoz.

A kód teszteléséhez egy okostelefon hotspotot és egy WiFi hálózatot fogunk használni. Mindig válassz egy egyszerű nevet a mobil hotspot hálózathoz, hogy elkerüljük a hibákat.

Most töltsd fel a megadott kódot az ESP32 táblára az Arduino IDE használatával.

Kód

Nyisd meg az Arduino IDE-t és töltsd fel a kódot az ESP32-re. Ne felejtsd el kiválasztani a COM portot.

#include <WiFi.h> /*WIFI library included*/

#include <WiFiMulti.h> /*Multi WIFI library included*/

WiFiMulti wifiMulti;
/*Per AP connect time. Increase when ESP32 take more time for connection*/ 
const uint32_t connectTimeoutMs = 10000;
void setup(){
  Serial.begin(115200);  /*Serial communication begins*/
  delay(10);
  WiFi.mode(WIFI_STA);    /*ESP32 WIFI initialized as Station*/
  /*Type all known SSID and their passwords*/
  wifiMulti.addAP("YOUR SSID", "PASSWORD");  /*Network 1 we want to connect*/
  wifiMulti.addAP("phone");  /*Network 2 we want to connect*/
  // WiFi.scanNetworks will give total networks
  int n = WiFi.scanNetworks();  /*Scan for available network*/
  Serial.println("scan done");  
  if (n == 0) {
      Serial.println("No Available Networks");  /*Prints if no network found*/
  } 
  else {
    Serial.print(n);
    Serial.println(" Networks found");  /*Prints if network found*/
    for (int i = 0; i < n; ++i) {
      Serial.print(i + 1);  /*Print the SSID and RSSI of available network*/
      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);
    }
  }
 /*Connects to strongest available defined network with SSID and Password available*/
   Serial.println("Connecting to Wifi..."); 
  if(wifiMulti.run() == WL_CONNECTED) {
    Serial.println("");
    Serial.println("Connected to WIFI Network");
    Serial.println("IP address of Connected Network: ");
    Serial.println(WiFi.localIP());    /*Prints IP address of connected network*/
  }
}
void loop(){
   if (wifiMulti.run(connectTimeoutMs) == WL_CONNECTED) {  /*if the connection lost it will connect to next network*/
    Serial.print("WiFi connected: ");
    Serial.print(WiFi.SSID());
    Serial.print(" ");
    Serial.println(WiFi.RSSI());
  }
  else {
    Serial.println("WiFi not connected!");  /*if all conditions fail print this*/
  }
  delay(1000);
}

A kódot az ESP32 WiFi könyvtárainak definiálásával kezdtük, majd létrehoztunk egy WiFiMulti objektumot. Ezután a beállítás részében két hálózatot adtunk hozzá. Az egyik egy jelszóval védett WiFi hálózat, így meg kell adnunk egy jelszót, míg a második hálózat, ami egy okostelefon hotspot, nyitott, így nem szükséges jelszó, csak be kellett írni a hálózat SSID-jét.

Ezután a wifiMulti.run() parancs segítségével az ESP32 csatlakozni fog a rendelkezésre álló legerősebb hálózathoz. Miután a WiFi csatlakozott, a kód ki fogja nyomtatni a csatlakozott hálózat SSID-jét, IP-címét és RSSI-jét.

Kimenet

Az ESP32-re való kódfeltöltés után először az elérhető hálózatokat vizsgálja, majd csatlakozik a legerősebb elérhető hálózathoz. Itt láthatjuk az RSSI értéket minden hálózatra, ahol az alacsonyabb RSSI erősebb hálózatot jelent.

Látjuk, hogy az ESP32 csatlakozik a telefonhálózathoz, mert az RSSI értéke -62, míg a másik hálózat, amelynek SSID-je és jelszava van, a Team SAM, amelynek értéke -73. Itt a mobil hotspot hálózat RSSI értéke közelebb áll a nullához, ami erősebb kapcsolatot jelent.

Most szüntessük meg a Smartphone hotspotot. Az ESP32 automatikusan csatlakozik más erősebb elérhető hálózatokhoz. Ahogy a kimeneten láthatjuk, az ESP32 most a következő legerősebb elérhető hálózathoz csatlakozott. A csatlakozott hálózat a Team SAM, amelynek RSSI értéke -65.

Következtetés

Az ESP32 csatlakozhat a környezetében elérhető legerősebb hálózathoz. Csak annyit kell tennünk, hogy több hálózat SSID-jét és jelszavát definiáljuk a kódban. A WiFiMulti függvény használatával az ESP32 átkutatja az elérhető hálózatokat, és amikor a kapcsolat megszakad, csatlakozik más elérhető hálózatokhoz az ESP32 hatókörén belül.