複数のWiFiアクセスポイントを登録し、RSSIが最大のアクセスポイントに接続する事が出来ます。
例えば、職場と自宅で、M5StackをWiFiに接続したい事があるかと思います。そのような場合は、WiFiMultiを使うと簡単にWiFiに接続する事が出来ます。
WiFiMultiライブラリは、ESP32のArduinoライブラリィに含まれています。
関数
WiFiMulti::addAP()
説明
アクセスポイントを追加する。
書式
#include <WiFiMulti.h>
bool WiFiMulti::addAP(constchar* ssid, constchar *passphrase);
引数
- ssid
追加するSSID。 - passphrase
追加するSSIDに接続するためのパスフレーズ。
戻り値
追加に成功したときはtrue、失敗したときはfalse。
WiFiMulti::run()
説明
addAP()で追加したアクセスポイントに接続する。
複数のアクセスポイントが追加(登録)されているときは、(おそらく、)RSSIが最大のアクセスポイントに接続する。
書式
#include <WiFiMulti.h>
uint8_t WiFiMulti::run(uint32_t connectTimeout);
引数
- ssid
追加するSSID。 - connectTimeout
アクセスポイント接続時のタイムアウト。省略可。省略した場合は5000ミリ秒。
戻り値
接続状態。
返却されるのは、以下のenum型。
typedef enum {
WL_NO_SHIELD = 255, // for compatibility with WiFi Shield library
WL_IDLE_STATUS = 0,
WL_NO_SSID_AVAIL = 1,
WL_SCAN_COMPLETED = 2,
WL_CONNECTED = 3,
WL_CONNECT_FAILED = 4,
WL_CONNECTION_LOST = 5,
WL_DISCONNECTED = 6
} wl_status_t;
使用例
以下、使用例です。
ヘッダのインクルード&定義
#include <WiFi.h>
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
loop()
10秒経っても接続出来ないときは、リスタートする処理を入れています。
void setup()
{
Serial.begin(115200);
delay(10);
wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
Serial.println("Connecting Wifi...");
unsigned long startTime = millis();
while(1)
{
if(wifiMulti.run() == WL_CONNECTED)
{
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
break;
} else {
Serial.println(".");
delay(500);
if ((millis() - startTime) > 10000) // タイムアウト(10秒)
{
// タイムアウト処理があれば入れる
ESP.restart();
}
}
}
}
参考URL
以下のURLも参考にしてください。