Во многих проектах на ESP32 жестко прописано одно имя точки доступа и пароль к ней. А как быть, если устройство нужно перемещать из одной сети в другую?
Для этого в Ардуино существует библиотека Wi-Fi Multi. Она сканирует все сети в радиусе действия и подключается к той, которая есть в заранее заданном списке, с наибольшим уровнем сигнала.
Библиотека подключается следующим образом:
Далее, в функции void setup() пишем следующее:
Serial.begin(115200);
Теперь наш прибор на ESP32 будет подключаться к сильнейшей по сигналу сети из списка заданных. Если вывод в UART не нужен, то функции Serial.println можно удалить.
Serial.println("Сканирую сети");
wifiMulti.addAP("SSID1", "PASSWORD1"); // задаем список с именами точек доступа и паролями
wifiMulti.addAP("SSID2", "PASSWORD2");
wifiMulti.addAP("SSID3", "PASSWORD3");
// WiFi.scanNetworks возвращает количество найденных сетей
int n = WiFi.scanNetworks();
Serial.println("Сканирование закончено");
if (n == 0) {
Serial.println("no networks found");
}
else {
Serial.print(n);
Serial.println(" сетей найдено");
for (int i = 0; i < n; ++i) {
// Пишем SSID и RSSI для каждой найденной сети
Serial.print(i + 1);
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);
}
}
//Соединяемся с Wi-Fi, используя wifiMulti (соединяется с SSID с нибольшим уровнем сигнала)
Serial.println("Соелинение с Wi-Fi...");
if(wifiMulti.run() == WL_CONNECTED) {
Serial.println("");
Serial.println("Соединено.");
Serial.println("IP адрес: ");
Serial.println(WiFi.localIP());