EspBle+無印ESP32でNimBLEとClassicの同時利用

概要

ESP32シリーズ用BLEライブラリEspBle
概要ESP32用のArduinoライブラリであるEspBleを作ってみました。ESP32の標準ライブラリは微妙なところがあるのと、API関連をEspUsbシリーズと統一したもので作り直してみました。作成物こちらのライブラリになります。まずE…

上記EspBleライブラリですが、BLEは使いやすいNimBLEに統一してあるのですが、無印ESP32はClassicも同時に利用することができます。現状ESP-IDFでもできないDual Hostをがんばって実現しました。

Dual Hostとは?

EspBle/docs/GUIDE_DUAL_HOST.ja.md at main · tanakamasayuki/EspBle
Contribute to tanakamasayuki/EspBle development by creating an account on GitHub.

通常はBLE用のNimBLE hostか、両方使えるけれどAPIが微妙なBluedroid hostを選択して利用する必要があります。EspBleではhostとコントローラーの間の通信に対してブローカーを追加することでBLE向けの通信と、Classic向けの通信を分離することができています。

そこでBLE向けはNimBLE host、Classic向けはBluedroid hostに接続することで同時利用ができるようになりました。

いろいろ技術的には面倒なことをしているのですが、BLEはシンプルで全ESP32シリーズ共通のAPIに統一し、Classicは無印ESP32のみですが同じようなAPIで利用することができます。

実際のところBluetooth Classicでも使われるのはシリアルポートのSPPとオーディオ系、そして古いゲーム機などで利用されているHIDぐらいだと思います。

PCMFlowBluetooth/examples/A2dpSinkM5Speaker/A2dpSinkM5Speaker.ino at main ?? tanakamasayuki/PCMFlowBluetooth
Contribute to tanakamasayuki/PCMFlowBluetooth development by creating an account on GitHub.

ちなみにオーディオ系の場合にはCore2でA2DPの待ち受けをして、iPhoneやパソコンから接続をしてM5Stack側のスピーカーから音を鳴らすなどが簡単に利用可能です。ただしBluetooth系の音声コーデックをEspBleに入れるとライセンスとかで微妙なこともあるので、別ライブラリに分離してあります。

PCMFlowBluetoothはコーデックを担当して、PCMFlowでサンプリングレートやチャンネル数を整え、PCMFlowDeviceでM5Stackのスピーカーにバッファを追加しながら再生する部分を担当しています。

まとめ

Dual HostはESP-IDFでも計画はされていますがまだまだ実装されていない機能です。Bluedroidは両方使えるので便利なのですが、設計が古いのと両方使える分かなり中身が複雑になっています。BLEとClassicに分離したのでお互いにシンプルに使えるようになったのが利点だと思います。

コメント