2024/06/03 電子書籍「電子書籍出版・技術文書作成を劇的に加速!秀丸エディタ + Markdown + Pandocの驚異」を出版

複数のアクセスポイントを登録出来るWiFiMulti

ESP32

複数の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も参考にしてください。

タイトルとURLをコピーしました