LoginSignup
18
18

More than 5 years have passed since last update.

ESP8266で複数のSSIDを利用する

Posted at

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
を参考に、なんとかしてみてください:sweat_smile:

18
18
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18