ウェブサイト検索

WiFiMulti機能を使用してESP32で最も強いWiFiネットワークに接続する


ESP32は、WiFiおよびBluetoothサポートを搭載したIoTベースのマイクロコントローラボードです。ESP32は、3つの異なるWiFiモード(ステーション、アクセスポイント、またはその両方)で動作できます。これらのすべてのモードを使用して、ESP32は無線接続を大幅に強化できます。今日は、ESP32のマルチWiFiサポートについて、最も強力なネットワークに接続する方法を議論します。

WiFiMulti機能を備えたESP32

ESP32は複数のネットワークに接続できます。もし複数のネットワークにアクセスできるのであれば、コード内でそれらのSSIDとパスワードを定義する必要があります。ESP32は利用可能なネットワークを検索し、コード内で定義した最も強いWi-Fiネットワークに接続します。

注意: 一度に一つのネットワークに接続します。そのネットワークへの接続が失われた場合、ESP32は他の利用可能なWiFiネットワークに接続します。

Arduino IDEでWiFiMultiの例を開くことができます:

行くには: ファイル > サンプル > WiFi > WifiMulti

ESP32に複数のWiFiネットワークを追加する方法

ESP32ボードに複数のWiFiネットワークを追加するために、WifiMulti関数とaddAP()を使用します。addAP()関数は、複数のSSIDとパスワードを引数として受け入れることができます。複数のネットワークを追加するには、それぞれのSSIDとパスワードを別々に定義する必要があります。以下は、WifiMulti関数とaddAP()を使用して1つ以上のネットワークを追加するための構文です:

wifiMulti.addAP("SSID Network1", "Password1");

wifiMulti.addAP("SSID Network2", " Password2");

wifiMulti.addAP("SSID Network3", " Password3");

ESP32で最も強力なWiFiネットワークに接続する方法

ESP32を最も強力なネットワークに接続するために、ESP32のWiFiスキャンとWiFiマルチの例を組み合わせます。次の手順を実行するコードをArduino IDEで作成します:

  • 利用可能なネットワークをスキャンします
  • シリアルモニタにRSSI(信号強度)を印刷します。これで、利用可能な最も強いネットワークを確認できます。
  • 最強のネットワークに自動的に接続します。
  • 接続が失われると、自動的に次に利用可能な最強のネットワークに接続します。

コードをテストするために、スマートフォンのホットスポットとWiFiネットワークを使用します。エラーを避けるために、モバイルホットスポットネットワークには常にシンプルな名前を付けてください。

今、Arduino IDEを使用してESP32ボードにコードをアップロードしてください。

コード

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);
}

コードはESP32のWiFiライブラリを定義することから始まり、次にWiFiMultiオブジェクトを作成しました。次に、セットアップの部分で2つのネットワークを追加しました。一つ目はパスワードで暗号化されたWiFiネットワークで、パスワードを提供する必要があります。二つ目はスマートフォンのホットスポットで、こちらはオープンなので、パスワードは不要で、ネットワークのSSIDを入力するだけです。

次に、wifiMulti.run() コマンドを使用すると、ESP32 は利用可能な最も強いネットワークに接続します。WiFi が接続されると、コードは接続されたネットワークのSSID、IPアドレス、およびRSSIを出力します。

出力

ESP32にコードをアップロードした後、最初に利用可能なネットワークをスキャンし、次に最も強いネットワークに接続します。ここでは、各ネットワークのRSSI値を見ることができ、RSSIが低いほどネットワークが強いことを意味します。

ESP32が電話ネットワークに接続されていることがわかります。なぜなら、RSSI値が-62であり、SSIDとパスワードが定義されている他のネットワークはTeam SAMで、値は-73だからです。ここで、モバイルホットスポットネットワークのRSSI値がゼロに近いということは、より強い接続を意味します。

スマートフォンのホットスポットの接続を切断してください。ESP32は他の強い利用可能なネットワークに自動的に接続します。出力として、ESP32が次に強い利用可能なネットワークに接続されているのがわかります。接続されているネットワークは、RSSI値が-65のTeam SAMです。

結論

ESP32は、周囲の最も強いネットワークに接続できます。コード内で複数のネットワークのSSIDとパスワードを定義するだけです。WiFiMulti機能を使用すると、ESP32は使用可能なネットワークをスキャンし、接続が失われるとESP32の範囲内の他の利用可能なネットワークに接続します。