良くあるユースケースとして、
- デバイスを起動
- そのデバイスがアクセスポイントになってるので、そこにまずは繋いで、ちゃんと繋ぎたいWiFiのSSIDとパスワードを入力
- 繋がったら通常起動し、そのセットしたSSID/パスワードを利用する
が上げられる。割とちゃんと実装すると大変なんだけど、WiFiManager というライブラリを使うと簡単にできると言うことを ESP8266 WI-FI SSID、パスワードのオンライン設定 より知った。
ライブラリを使える状態にすると
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
void setup() {
WiFiManager wifiManager;
wifiManager.autoConnect();
}
void loop() {
}
だけで上のユースケースが満たされて大変便利だ…。標準でWebUIもついてる。
これにOTA アップデート組み合わせると、めんどくさいけどやりたいことの大きな二つがサクッとやれる。
SSID やパスワードをどこに保存してるか
で、セキュアなのかどうなのか、雑に考えるとEEPROMの上に保持していて物理的な読み出しがしやすくなってるんじゃ無いのかな、と思って WiFiManager のソースを読んだけど、SSIDとパスワードを保存しているコードが解らなくて、esp8266のArduinoのコードを読んでも解らなかった。
もうちょっと調べてみると、esp8266のSDKを通してFlashメモリのWiFi configの領域に書き込んでるみたい。
|--------------|-------|---------------|--|--|--|--|--|
^ ^ ^ ^ ^
Sketch OTA update File system EEPROM WiFi config (SDK)
ていうか File System としてそこそこ大きな領域扱えたんだ!知らなかった。