ESP32をBluetoothで制御できることは確認済なので、それを発展させて、DSPラジオを操作することを考えた。以前製作した週間スケジュールが可能なRDA5807 FM DSPラジオ(通信にはWiFiを使用)の仕様を目標に、Bluetooth(以下BLE(Bluetooth Low Energy))を通信手段に使用し、実現した。コントローラには、BLEの動作が確認できたXIAO ESP32S3を使用した。作成したスケッチと利用方法はGithubに登録してある。
BLEのメリットは、WiFiのようにアクセス環境やSSIDやパスワードの設定が不要なので、機器に詳しくない人(さらにArduinoの開発環境を知らない人)にも使ってもらえることである。
今回、PCとESP32S3(XIAO製)はBLEで通信するが、PC側はブラウザ(Chrome)がサポートするWeb Bluetooth APIが利用できる。操作画面の作成はHTMLを利用し、プログラムはjavascriptでコーディングする(BLEにはWiFiのようにWebサーバーのサポートが無いので外部ファイルとして作成し、ブラウザからロードする)。
ESP32S3側(「ペリフェラル」と呼ぶ)には、BLEの規格である「GATT」に準拠したサービスを立ち上げておく必要がある。このサービスのデータ構造には、「GATT」の「Current time service 」を流用した。色々あるBLEのSCANツールから検索できるので便利である。
データ構造の要素には、「キャラクタリスティック 」と「ディスクリプタ 」があり、PC側(「セントラル」と呼ぶ)から読み書きできる。
「読み」は情報の検索(例えば週間スケジュールの読み込み)、「書き」はコマンドの伝達(例えば、DSPラジオの音量の変更)に利用する。
PC側からのjavascriptによる「キャラクタリスティック 」と「ディスクリプタ 」の読み書きは、非同期に実行されるので、「Promise」と呼ばれるオブジェクトを使ったコーディングにする必要がある。
ESP32S3側では、これらの読み書きの要求は、各「キャラクタリスティック 」と各「ディスクリプタ 」ごとに定義されたコールバック関数で処理する。
全体として、「見通しが悪く、簡単ではない」という印象である。
HTMLで作成した画面を以下に示す。
利用者がArduinoの開発環境を利用しないで使い始められるよう、ラジオ局の初期登録をブラウザからできるようにしている。
電源ON後に、ブラウザに上の画面を定義したHTMLファイルをロードし、BLEスキャンを行って、このDSPラジオに接続し、現在時刻を設定すると動作可能となる(「Connect to ESP32」、「Set current time to ESP32 RTC」ボタンをクリック)。
目標の機能は、ほぼ実現しているが、BLEの制限(一度に送受信できるデータ量(おそらく200バイト以下))により、スケジュールの表示が、1日(曜日)単位になっている。
また、BLEの特性で接続が直ぐに切れてしまう(この環境では約30秒)ため、操作の都度、接続操作が必要で、使い勝手が良くない。
(基板はXIAO ESP32C3の物を流用した。ピン数と電源関係のピン位置が同じなので流用できる)