Maak verbinding met het sterkste wifi-netwerk in ESP32 met behulp van WiFiMulti Function

Maak Verbinding Met Het Sterkste Wifi Netwerk In Esp32 Met Behulp Van Wifimulti Function



ESP32 is een op het IoT gebaseerde microcontrollerkaart met WiFi- en Bluetooth-ondersteuning. ESP32 kan in drie verschillende wifi-modi werken (station, toegang of beide). Door al deze modi te gebruiken, kan ESP32 zijn draadloze connectiviteit vele malen verbeteren. Vandaag bespreken we de multi-WiFi-ondersteuning in ESP32 om verbinding te maken met het sterkste beschikbare netwerk.

ESP32 met WiFiMulti Functie

ESP32 kan verbinding maken met meerdere netwerken als we toegang hebben tot meer dan één netwerk, we hoeven alleen hun SSID en wachtwoord in de code te definiëren. Het zoekt naar het beschikbare netwerk en maakt verbinding met het sterkste wifi-netwerk dat we in code definiëren.







Opmerking: Onthoud dat het verbinding maakt met één netwerk tegelijk als de verbinding met dat netwerk wordt verbroken, dan zal ESP32 verbinding maken met andere beschikbare wifi-netwerken.



We kunnen het WiFiMulti-voorbeeld openen in Arduino IDE:



Ga naar : Bestand > Voorbeelden > WiFi > WifiMulti





Meerdere wifi-netwerken toevoegen in ESP32

Om meerdere wifi-netwerken toe te voegen aan het ESP32-bord. We zullen de gebruiken WifiMulti functie met voegAP toe() . De functie addAP() kan meerdere SSID's en wachtwoorden als argument accepteren. Om meerdere netwerken toe te voegen, moeten hun SSID en wachtwoorden afzonderlijk worden gedefinieerd. Hieronder volgt de syntaxis om meer dan één netwerk toe te voegen WifiMulti functie met voegAP toe() :



wifiMulti. voeg AP toe ( 'SSID-netwerk1' , 'Wachtwoord1' ) ;

wifiMulti. voeg AP toe ( 'SSID-netwerk2' , 'Wachtwoord2' ) ;

wifiMulti. voeg AP toe ( 'SSID-netwerk3' , 'Wachtwoord3' ) ;

Hoe verbinding te maken met het sterkste wifi-netwerk in ESP32

Om ESP32 te verbinden met het sterkst beschikbare netwerk gaan we bijvoorbeeld de ESP32 WiFi scan en WiFi multi combineren. We zullen een code schrijven in Arduino IDE die de volgende stappen zal uitvoeren:

  • Scan naar de beschikbare netwerken
  • Druk hun RSSI (signaalsterkte) af op een seriële monitor. We kunnen dus het sterkste beschikbare netwerk controleren
  • Maakt automatisch verbinding met het sterkste netwerk
  • Als de verbinding wordt verbroken, maakt deze automatisch verbinding met het volgende beschikbare sterkste netwerk

Om de code te testen, gebruiken we een smartphone hotspot en een wifi-netwerk. Wijs altijd een eenvoudige naam toe aan het mobiele hotspot-netwerk om fouten te voorkomen.

Upload nu de code op het ESP32-bord met behulp van Arduino IDE.

Code

Open Arduino IDE en upload code in ESP32. Vergeet niet om de COM-poort te selecteren.

#include /*WIFI-bibliotheek inbegrepen*/

#include /*Multi WIFI-bibliotheek inbegrepen*/

WiFiMulti wifiMulti ;
/*Per AP verbindingstijd. Verhogen wanneer ESP32 meer tijd nodig heeft voor verbinding*/
const uint32_t connectTimeoutMs = 10000 ;
leegte opstelling ( ) {
Serieel. beginnen ( 115200 ) ; /*Seriële communicatie begint*/
vertraging ( 10 ) ;
Wifi. modus ( WIFI_STA ) ; /*ESP32 WIFI geïnitialiseerd als Station*/
/*Typ alle bekende SSID's en hun wachtwoorden*/
wifiMulti. voeg AP toe ( 'UW SSID' , 'WACHTWOORD' ) ; /*Netwerk 1 willen we verbinden*/
wifiMulti. voeg AP toe ( 'telefoon' ) ; /*Netwerk 2 willen we verbinden*/
// WiFi.scanNetworks geeft totale netwerken
int n = Wifi. scanNetwerken ( ) ; /*Zoeken naar beschikbaar netwerk*/
Serieel. println ( 'scan klaar' ) ;
als ( n == 0 ) {
Serieel. println ( 'Geen beschikbare netwerken' ) ; /*Wordt afgedrukt als er geen netwerk wordt gevonden*/
}
anders {
Serieel. afdrukken ( n ) ;
Serieel. println ( 'Netwerken gevonden' ) ; /*Wordt afgedrukt als netwerk gevonden*/
voor ( int i = 0 ; i < n ; ++ i ) {
Serieel. afdrukken ( i + 1 ) ; /*Druk de SSID en RSSI van het beschikbare netwerk af*/
Serieel. afdrukken ( ':' ) ;
Serieel. afdrukken ( Wifi. SSID ( i ) ) ;
Serieel. afdrukken ( '(' ) ;
Serieel. afdrukken ( Wifi. RSSI ( i ) ) ;
Serieel. afdrukken ( ')' ) ;
Serieel. println ( ( Wifi. encryptie type ( i ) == WIFI_AUTH_OPEN ) ? ' ' : '*' ) ;
vertraging ( 10 ) ;
}
}
/*Maakt verbinding met het sterkst beschikbare gedefinieerde netwerk met beschikbare SSID en wachtwoord*/
Serieel. println ( 'Verbinding maken met wifi...' ) ;
als ( wifiMulti. rennen ( ) == WL_VERBONDEN ) {
Serieel. println ( '' ) ;
Serieel. println ( 'Verbonden met wifi-netwerk' ) ;
Serieel. println ( 'IP-adres van aangesloten netwerk: ' ) ;
Serieel. println ( Wifi. lokaleIP ( ) ) ; /*Drukt het IP-adres af van het aangesloten netwerk*/
}
}
leegte lus ( ) {
als ( wifiMulti. rennen ( connectTimeoutMs ) == WL_VERBONDEN ) { /*als de verbinding is verbroken, wordt verbinding gemaakt met het volgende netwerk*/
Serieel. afdrukken ( 'WiFi verbonden: ' ) ;
Serieel. afdrukken ( Wifi. SSID ( ) ) ;
Serieel. afdrukken ( ' ' ) ;
Serieel. println ( Wifi. RSSI ( ) ) ;
}
anders {
Serieel. println ( 'WiFi niet verbonden!' ) ; /*als alle voorwaarden falen, druk dit af*/
}
vertraging ( 1000 ) ;
}

Code begon met het definiëren van WiFi-bibliotheken voor ESP32, daarna hebben we een WiFiMulti object. Vervolgens hebben we in het installatiegedeelte twee netwerken toegevoegd. Een daarvan is een wifi-netwerk dat met een wachtwoord is gecodeerd, dus we moeten een wachtwoord opgeven, terwijl het tweede netwerk, dat een smartphone-hotspot is, open is, dus we hebben geen wachtwoord nodig, typ gewoon de netwerk-SSID.

Vervolgens gebruiken wifiMulti.run() opdracht ESP32 maakt verbinding met het beschikbare sterkste netwerk. Zodra de WiFi is verbonden, zal de code de SSID, het IP-adres en de RSSI van het verbonden netwerk afdrukken.

Uitgang

Nadat de code naar ESP32 is geüpload, scant het eerst naar het beschikbare netwerk en vervolgens maakt het verbinding met het sterkste beschikbare netwerk. Hier kunnen we de RSSI-waarde voor elk netwerk zien. Een lagere RSSI betekent dat het netwerk sterker is.

  Tekstbeschrijving automatisch gegenereerd

We kunnen zien dat ESP32 is aangesloten op de telefoon netwerk omdat het een RSSI waarde van -62 en het andere netwerk waarvan de SSID en het wachtwoord zijn gedefinieerd Team SAM wiens waarde is -73. Hier heeft het mobiele hotspot-netwerk een RSSI-waarde die dichter bij nul ligt, wat een sterkere verbinding betekent.

Koppel nu de smartphone-hotspot los. ESP32 zal zichzelf verbinden met andere sterkere beschikbare netwerken. Zoals in uitvoer kunnen we zien dat ESP32 nu is verbonden met het volgende sterkste beschikbare netwerk. Netwerk waarmee het is verbonden is Team SAM met RSSI-waarde 0f -65.

Conclusie

ESP32 kan verbinding maken met het sterkste netwerk dat in zijn kring beschikbaar is. We hoeven alleen meerdere netwerken SSID en wachtwoord in de code te definiëren. De ... gebruiken WiFiMulti De ESP32-functie scant naar beschikbare netwerken en wanneer de verbinding wordt verbroken, maakt deze verbinding met andere beschikbare netwerken binnen het ESP32-bereik.