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の範囲内の他の利用可能なネットワークに接続します。




