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

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

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

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

【概要】

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

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

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

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

接続情報を登録する。

初期処理を行う。

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

【サンプル・スケッチ】

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

【ライブラリ】

“ESP8266/ESP32用のMultiAPライブラリを作ってみた。” への3件の返信

  1. こちらのMultiAPライブラリ公開ありがとうございます。大変便利に使わせていただいております。
    M5Stack社のESP32シリーズでは問題なく利用できていました。
    最近Xiao Studio ESP32C3という低消費電力の商品が発売されたので購入し、MultiAPライブラリを組み込んでみたところDisconect状態でいっこうに繋がりません。試しに#define ESPWMAP_DEBUG 0を1に修正したところつながりました。
    DEBUG 0に戻し、Serial.printf の位置に delay(10) を書いてみたところ繋がりました。ESP32C3に対応して頂けないでしょうか。よろしくお願いします。

  2. 先日コメントいたしました、Xiao studio ESP32C3で「MultiAPライブラリ」が、disconnect しか返さず使えなくなったという報告についてですが、原因が分かりました。
    サンプルスケッチにおいてCPUクロックが40MHzに設定されていたのが原因でした。
    CPUクロック80MHz以上に設定すれば正常に動作しました。
    また安心して「MultiAPライブラリ」を使用することができます。
    お騒がせしました。
    ありがとうございました。

    1. ESP32C3でCPUクロック40MHzでの誤動作の件、自己解決されたとのことで安心致しました。
      頂いた情報は今後の参考にさせて頂きます。
      ご連絡ありがとうございました。<(_ _)>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください