ESP32 - автоматическое подключение к нескольким сетям Wi-Fi

Во многих проектах на ESP32 жестко прописано одно имя точки доступа и пароль к ней. А как быть, если устройство нужно перемещать из одной сети в другую?

 Для этого в Ардуино существует библиотека Wi-Fi Multi. Она сканирует все сети в радиусе действия и подключается к той, которая есть в заранее заданном списке, с наибольшим уровнем сигнала.
Библиотека подключается следующим образом:

#include <WiFiMulti.h>
 

Далее, в функции void setup() пишем следующее:
Serial.begin(115200);
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());
Теперь наш прибор на ESP32 будет подключаться к сильнейшей по сигналу сети из списка заданных. Если вывод в UART не нужен, то функции Serial.println можно удалить.
 

Загрузка...