18
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?