ESP8266/ESP32用のMultiAPライブラリを作ってみた。

ESPのESP8266WifiMulti/WiFiMultiはバージョンにより仕様が異なっている。古いバージョンでは非同期処理であったのが新しいバージョンではタイムアウト指定する同期処理となってしまった。そのため比較的長いタイムアウト時間を待つ必要があり、何らかの制御を行っているプログラムでは制御に時間的な問題が発生してしまう。非同期でも処理できたはずなのになんで同期処理に仕様変更してしまったのか通信系だけのアプリならありかもしれないが理解不能だ。

ということで同じような機能を自分で実装してみた。WiFi.status()の戻り値によりスキャン&接続を非同期で処理する。スキャンで検出したAPのRSSI順に接続を試行し全て失敗した場合、或いは、接続が成功した後に接続が失われた場合は再度スキャンから始まる仕様だ。

比較的単純な処理であるものの非同期処理特有の難しさも少しあったりはするが、それなりに実装できたのではないかと思う。

【概要】

add()で登録した接続情報のうちスキャン結果に含まれるSSIDのみを取得する。

接続試行の疑似的なタイムアウト状態を返す。add()で何も登録されてない場合の初回スキャン後、或いは、接続できない状態が3分以上続くとtrueを返すがスキャン動作には影響しない。

add()で登録した接続情報を消去する。

add()で登録した接続情報の数を取得する。

接続情報を登録する。

初期処理を行う。

スキャン&接続をハンドリングする。戻り値としてWiFi.status()の値を返す。

【サンプル・スケッチ】

【修正履歴】
2023-03-29
SDKのタイムアウト値のコードミス?により特定のリビジョンのESP32C3でスキャンが失敗する場合があることへの対応。

【ライブラリ】