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“ , 'Парола1' ) ;
wifiMulti. addAP ( „SSID мрежа 2“ , 'Парола2' ) ;
wifiMulti. addAP ( „SSID Network3“ , 'Парола3' ) ;
Как да се свържете с най-силната WiFi мрежа в ESP32
За да свържем ESP32 с най-силната налична мрежа, ще комбинираме ESP32 WiFi сканиране и WiFi multi пример. Ще напишем код в Arduino IDE, който ще изпълни следните стъпки:
- Сканирайте за наличните мрежи
- Отпечатайте техния RSSI (сила на сигнала) на сериен монитор. Така че можем да проверим най-силната налична мрежа
- Автоматично се свързва с най-силната мрежа
- Ако загуби връзка, автоматично ще се свърже към следващата налична най-силна мрежа
За да тестваме кода, ще използваме a Смартфон гореща точка и WiFi мрежа. Винаги присвоявайте просто име на мобилната гореща мрежа, за да избегнете грешки.
Сега качете кода, даден в платката ESP32, като използвате Arduino IDE.
Код
Отворете Arduino IDE и качете код в ESP32. Не забравяйте да изберете COM порт.
#include#include
WiFiMulti wifiMulti ;
/*За време на свързване с AP. Увеличете, когато ESP32 отнема повече време за свързване*/
конст uint32_t connectTimeoutMs = 10 000 ;
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ; /*Серийната комуникация започва*/
забавяне ( 10 ) ;
WiFi. режим ( WIFI_STA ) ; /*ESP32 WIFI се инициализира като станция*/
/*Въведете всички известни SSID и техните пароли*/
wifiMulti. addAP ( „ВАШИЯТ SSID“ , 'ПАРОЛА' ) ; /*Мрежа 1, която искаме да свържем*/
wifiMulti. addAP ( 'телефон' ) ; /*Мрежа 2, която искаме да свържем*/
// WiFi.scanNetworks ще даде общия брой мрежи
вътр н = WiFi. scanNetworks ( ) ; /*Сканиране за налична мрежа*/
Сериен. println ( 'сканирането е готово' ) ;
ако ( н == 0 ) {
Сериен. println ( „Няма налични мрежи“ ) ; /*Отпечатва, ако не е намерена мрежа*/
}
друго {
Сериен. печат ( н ) ;
Сериен. println ( „Намерени мрежи“ ) ; /*Отпечатва, ако е намерена мрежа*/
за ( вътр i = 0 ; аз < н ; ++ аз ) {
Сериен. печат ( i + 1 ) ; /*Отпечатайте SSID и RSSI на наличната мрежа*/
Сериен. печат ( ':' ) ;
Сериен. печат ( WiFi. SSID ( аз ) ) ;
Сериен. печат ( '(' ) ;
Сериен. печат ( WiFi. RSSI ( аз ) ) ;
Сериен. печат ( ')' ) ;
Сериен. println ( ( WiFi. encryptionType ( аз ) == WIFI_AUTH_OPEN ) ? ' ' : '*' ) ;
забавяне ( 10 ) ;
}
}
/*Свързва се с най-силната налична дефинирана мрежа с налични SSID и парола*/
Сериен. println ( „Свързване с Wifi...“ ) ;
ако ( wifiMulti. бягам ( ) == WL_CONNECTED ) {
Сериен. println ( '' ) ;
Сериен. println ( „Свързан към WIFI мрежа“ ) ;
Сериен. println ( 'IP адрес на свързана мрежа: ' ) ;
Сериен. println ( WiFi. localIP ( ) ) ; /*Отпечатва IP адреса на свързаната мрежа*/
}
}
невалиден цикъл ( ) {
ако ( wifiMulti. бягам ( connectTimeoutMs ) == WL_CONNECTED ) { /*ако връзката се загуби, ще се свърже към следващата мрежа*/
Сериен. печат ( „WiFi свързан:“ ) ;
Сериен. печат ( WiFi. SSID ( ) ) ;
Сериен. печат ( ' ' ) ;
Сериен. println ( WiFi. RSSI ( ) ) ;
}
друго {
Сериен. println ( „WiFi не е свързан!“ ) ; /*ако всички условия не са изпълнени, отпечатайте това*/
}
забавяне ( 1000 ) ;
}
Кодът започна с дефиниране на WiFi библиотеки за ESP32, след което създадохме a WiFiMulti обект. След това в частта за настройка добавихме две мрежи. Едната е WiFi мрежа, която е криптирана с парола, така че трябва да предоставим парола, докато втората мрежа, която е гореща точка за смартфон, е отворена, така че не се нуждаем от парола, просто въвеждаме SSID на мрежата.
След това, използвайки wifiMulti.run() команда ESP32 ще се свърже с наличната най-силна мрежа. След като WiFi се свърже, кодът ще отпечата SSID на свързаната мрежа, IP адрес и RSSI.
Изход
След качване на код в ESP32 първо ще сканира за наличната мрежа, след което ще се свърже с най-силната налична мрежа. Тук можем да видим стойността на RSSI за всяка мрежа, а по-нисък RSSI означава, че мрежата е по-силна.
Виждаме, че ESP32 е свързан към телефонна мрежа тъй като има RSSI стойност на -62 а другата мрежа, чиито SSID и парола са дефинирани, е Отбор САМ чиято стойност е -73. Тук мобилната гореща мрежа има RSSI стойност, по-близка до нула, означава по-силна връзка.
Сега изключете горещата точка на смартфона. ESP32 ще се свърже сам с други по-силни налични мрежи. Както в изхода можем да видим, че ESP32 вече е свързан към следващата най-силна налична мрежа. Мрежата, към която е свързан, е Team SAM с RSSI стойност 0f -65.
Заключение
ESP32 може да се свърже с най-силната налична мрежа в неговия кръг. Просто трябва да дефинираме SSID на множество мрежи и парола в кода. Използвайки WiFiMulti функция ESP32 ще сканира за налични мрежи и когато връзката се загуби, ще се свърже с други налични мрежи в обхвата на ESP32.