chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

俺BLE MIDIを改修、FL-Studioと接続テスト

前回KORGのMicroKEY Airのパケットをキャプチャして、アドバタイズの内容、再接続について理解できたので、nimBle版ペリフェラルサンプルコード(bleprph)を書きなおして、BLE MIDIとして仕立ててみた。元ソースからの修正点は以下

  • AdvertisingはBLEMIDIのUUID128のみ、デバイス名は削除
  • GATTのService/CharacteristicsをBLE MIDIに修正
  • BLE MIDIのCharacteristicsのFlagに、BLE_GATT_CHR_F_NOTIFYを追加

この修正でビルドして、ESP32に焼いて接続テスト。
なお、ビルド時のペアリング・認証用Configは以下

#
# Example Configuration
#
CONFIG_BLE_SM_IO_CAP_DISP_ONLY=y
CONFIG_EXAMPLE_IO_TYPE=0
CONFIG_EXAMPLE_BONDING=y
CONFIG_EXAMPLE_MITM=y
CONFIG_EXAMPLE_USE_SC=y

結果として、Windowsとペアリングできて、一旦Disconnectされるが、BLE MIDIを使うアプリ(FL-Studio)を起動すると、俺BLE MIDIが認識されて、接続可能となる。以下はFL-StudioのMIDI設定ダイアログ画面、俺BLE MIDIが表示されている。

次の仕事は、、俺BLEMIDIからMIDIデータをFL-Studioに送信する機能の実装。割り込み駆動でSWを制御して、SWが押されたら、MIDI信号をNotifyでFL-Studioに送信する予定。OS配下での割り込み駆動プログラミングで、さらに、Notify送信とかどうやったらいいのかよくわからず。。

■追記
割り込み駆動でSWを制御するコードはesp-idfのサンプル*1にあったのでそれを流用、一方、NimBleのNotify関数の使い方がよく分からず。サンプルもほとんどなさそうなのだった。。

ArduinoでNimBleの実装があるようで、それを参考にしてみる。。
NimBLE-Arduino/src at master · h2zero/NimBLE-Arduino · GitHub

■追記
割り込み駆動タスクを足したりしていると、BLEすらまともに動かなくって、戻しても戻らないという。。仕事でこれをやったら滅茶苦茶怒られただろう。。「一度動いたソースはコミットしとけや!」

*1:esp-idf/examples/peripherals/gpio