Свържете се с най-силната WiFi мрежа в ESP32, използвайки функцията WiFiMulti
ESP32 е микроконтролерна дъска, базирана на IoT, с поддръжка на WiFi и Bluetooth. ESP32 може да работи в три различни режима на WiFi (Клиент, Достъп или и двата). Използвайки всички тези режими, ESP32 може да подобри безжичното си свързване многократно. Днес ще обсъждаме поддръжката на много WiFi в ESP32, за да се свържем с най-силната налична мрежа.
ESP32 с функция WiFiMulti
ESP32 може да се свързва с множество мрежи, ако имаме достъп до повече от една мрежа, просто трябва да определим техните SSID и парола в кода. Той ще търси наличната мрежа и ще се свърже с най-силната Wi-Fi мрежа, която определим в кода.
Забележка: Запомнете, че той ще се свързва с една мрежа наведнъж. Ако връзката с тази мрежа бъде загубена, ESP32 ще се свърже с други налични WiFi мрежи.
Можем да отворим примера WiFiMulti в Arduino IDE:
Отидете на: Файл > Примери > WiFi > WifiMulti
Как да добавите множество WiFi мрежи в ESP32
За да добавите множество WiFi мрежи в платката ESP32. Ще използваме функцията WifiMulti с addAP(). Функцията addAP() може да приеме множество SSID и пароли като аргумент. За да добавите множество мрежи, техните SSID и пароли трябва да бъдат определени отделно. Следва синтаксисът за добавяне на повече от една мрежа с функцията WifiMulti и addAP():
wifiMulti.addAP("SSID Network1", "Password1");
wifiMulti.addAP("SSID Network2", " Password2");
wifiMulti.addAP("SSID Network3", " Password3");Как да се свържете с най-силната WiFi мрежа в ESP32
За да свържем ESP32 с най-силната налична мрежа, ще комбинираме сканирането на WiFi от ESP32 и примера за WiFi многократност. Ще напишем код в Arduino IDE, който ще изпълни следните стъпки:
- Сканирайте за наличните мрежи
- Изведете техния RSSI (интензивност на сигнала) на сериен монитор. Така можем да проверим най-силната налична мрежа.
- Автоматично се свързва с най-силната мрежа
- Ако изгуби връзка, автоматично ще се свърже с следващата налична най-силна мрежа.
За да тестваме кода, ще използваме гореща точка от смартфон и WiFi мрежа. Винаги задавайте просто име на мрежата с гореща точка, за да избегнете грешки.
Сега качете кода, предоставен в ESP32 платката, използвайки Arduino IDE.
Код
Отворете Arduino IDE и качете кода в ESP32. Не забравяйте да изберете COM порта.
#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);
}Кодът започна с дефиниране на WiFi библиотеки за ESP32, след което създадохме WiFiMulti обект. След това, в частта за настройка, добавихме две мрежи. Едната е WiFi мрежа, която е с парола, така че трябва да предоставим парола, докато втората мрежа, която е хотспот на смартфон, е отворена, така че не ни трябва парола, просто написахме SSID на мрежата.
Следващото, използвайки командата wifiMulti.run(), ESP32 ще се свърже с наличната най-силна мрежа. След като WiFi е свързана, кодът ще отпечата SSID на свързаната мрежа, IP адреса и RSSI.
Изход
След като качите кода на ESP32, той първо ще сканира за наличната мрежа, след което ще се свърже с най-силната налична мрежа. Тук можем да видим стойността на RSSI за всяка мрежа; по-нисък RSSI означава по-силна мрежа.
Можем да видим, че ESP32 е свързан към мобильната мрежа, защото има стойност на RSSI -62, а другата мрежа, чийто SSID и парола са определени, е Team SAM, чиято стойност е -73. Тук мрежата на мобилния хотспот има стойност на RSSI, която е по-близо до нула, което означава по-силна връзка.
Сега отключете хотспота на смартфона. ESP32 ще се свърже сам с други по-силни налични мрежи. Както виждаме в изхода, ESP32 вече е свързан към следващата най-силна налична мрежа. Мрежата, към която е свързан, е Team SAM с RSSI стойност 0f -65.
Заключение
ESP32 може да се свърже с най-силната налична мрежа в своята обкръжение. Просто трябва да дефинираме множество мрежи SSID и пароли в кода. Използвайки функцията WiFiMulti, ESP32 ще сканира наличните мрежи и когато връзката бъде изгубена, ще се свърже с други налични мрежи в обхвата на ESP32.




