ESP-WROOM-02を使えばArduinoで簡単にWi-Fi接続ができる
今までArduinoではLチカしかやったことがなく、その後は買って満足して放置していたのですが、ESP8266というWi-Fiモジュールがあるのを知りました。1週間前にESP-WROOM-02を入手し、いろいろと遊んでいるうちに不便なところが出てきました。
1つのアクセスポイントにしか接続できない
異なる接続先に接続するには、そのたびにプログラム中のSSIDやパスフレーズの部分を書き換えなくてはなりません。会社、自宅、外出先(iPhoneのテザリングとか)、再コンパイル無しで繋がると便利です。
そこで、繋がるところに繋がってくれるようにしてみました。
(※ESP-WROOM-02 単体で使用)
プログラム
#define WIFI_SSID_1 "xxxx"
#define WIFI_PASS_1 "xxxx"
#define WIFI_SSID_2 "xxxx"
#define WIFI_PASS_2 "xxxx"
void wifi_connect() {
int i, loop;
int stat;
WiFi.mode(WIFI_STA);
//WiFi.printDiag(Serial);
while (true) {
for (loop = 1; loop <= 2; loop++) {
Serial.print("WiFi(");
Serial.print(loop);
Serial.println(") Connecting...");
if (loop == 1) WiFi.begin(WIFI_SSID_1, WIFI_PASS_1);
else if (loop == 2) WiFi.begin(WIFI_SSID_2, WIFI_PASS_2);
for (i = 0; i < 50; i++) {
stat = WiFi.status();
if (stat == WL_DISCONNECTED) {
delay(500);
} else if (stat == WL_NO_SSID_AVAIL || stat == WL_CONNECT_FAILED) {
Serial.println("WiFi Failed. Connect to another AP");
break; // break to for(i)
} else if (stat == WL_CONNECTED) {
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
break; // break for(i)
}
}
if (stat == WL_CONNECTED) break; // break for(loop)
WiFi.disconnect();
delay(1000);
}
if (stat == WL_CONNECTED) break; // break while(true)
delay(5000);
}
}
プログラムの説明
見ての通り WIFI_SSID_1 と WIFI_SSID_2 の2つのSSIDを定義しています。はじめに1に接続を試みます。指定したSSIDが見つからなかった場合や、認証エラー等で接続に失敗した場合は、即座に2に接続を試みます。もし1と2ともだめなら、5秒待機してもう一度1からやり直します。
実行例
WiFi(1) Connecting...
WiFi Failed. Connect to another AP
WiFi(2) Connecting...
WiFi connected!
IP address: 192.168.0.xxx
最後に
今回は2種類しか設定しませんでしたが、3,4,5と数を増やしていけば簡単に接続先のAPを増やせます。ちなみに私はC言語をあまり理解できていないので(おまけにQiitaも今日が初めて)、変な書き方をしているところがあるかもしれません。こうやった方がいいよ!ってゆうのがありましたら、教えていただけると嬉しいです。