ESP8266で複数のSSIDを利用する


ESP8266さん、すんごい便利なんですが、サンプルコードを見ると一つのSSIDを使うコードばっかりで、環境に合わせてソースいじって書き込みし直ししなきゃいけないの面倒なんですよね。

普通のパソコンやスマホのように、複数のアクセスポイントを登録しておいて、使える電波を使って欲しい!

その実現方法を紹介します。

#include <ESP8266WiFiMulti.h>

複数のSSIDを利用するライブラリが存在し、そのサンプルコードが下記URLにあります。

これをそのまま利用すればOKですね。

もうちょい実用的に

サンプルの紹介だけだと芸がないので、もうちょっと実用的な感じにしたコードに書き直しました。

MyWiFiMulti.ino
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;

wl_status_t prevWifiStatus = WL_IDLE_STATUS;   

void setup() {
  Serial.begin(74880);  // 起動時に合わせて74880bpsにする
  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("");
  Serial.println("boot");

  // ここではまだ繋ぎに行かない
}

void loop() {
  wl_status_t wifiStatus = wifiMulti.run();
  if ( prevWifiStatus != wifiStatus ) {
    prevWifiStatus = wifiStatus;
    if( wifiStatus == WL_CONNECTED) {
      Serial.println("WiFi connected");
      Serial.println("SSID: ");
      Serial.println(WiFi.SSID());
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    else {
      // ステータス毎にメッセージ変えたほうがいいかも(各自宿題)
      Serial.println("WiFi error?");
      Serial.println(wifiStatus);
    }
  }

  // do something
}

再接続したときの他、接続が切れたときなどにもシリアルに出力するようにしてみました。

各自宿題のところは
https://www.arduino.cc/en/Reference/WiFiStatus
を参考に、なんとかしてみてください