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.




