BLE MIDIコントローラ(1)
ごぶさたしております。一年ぶりのblog更新です。
BLE-MIDIコントローラの作成編、第一回です。
1. はじめに
ESP-32ではWiFiに加え、Bluetoothを使うことが出来ます。
昨年はWiFi経由でOSCで通信を行いましたが、BLE-MIDIを使うとよりシンプルな構成のMIDIコントローラが作成できそうです。
BLE-MIDIデバイスとして利用する方法について、試した結果を記述します。
2. 開発環境
ESP-32の開発環境としては、ESP-IDFとArduino ESP-32があります。
BLE関係のドライバは共通なのでどちらも使えます。Arduinoの方が設定が楽なのでできればArduinoを優先して使いたいと思います。
ただし、アップデートが頻繁なため古いソースコードだと動かない場合があるようです。
開発環境に含まれているライブラリのバージョンなどに注意が必要です。
BLEの開発元はこちらになります。
https://github.com/nkolban/esp32-snippets
このレポジトリはいろいろ入っていて分かりづらいのですが、BLE関係のソースコードは以下の場所にあるようです。
https://github.com/nkolban/esp32-snippets/tree/master/cpp_utils
※Arduino ESP32やESP-IDFに含まれているため、ここのソースコードを入れる必要はありません。
うまく動かない場合には、Issueを参照してみると良いでしょう。
https://github.com/nkolban/esp32-snippets/issues
3.BLE-MIDIの設定方法
BLE-MIDIを使うためには、BLEのプロファイルとして、デバイス側で次の値を利用します。
MIDI_SERVICE_UUID “03b80e5a-ede8-4b33-a751-6ce34ec4c700”
MIDI_CHARACTERISTIC_UUID “7772e5db-3868-4112-a1a9-f2669d106bf3”
macOSXの場合、デバイスとのペアリングにはMIDI studioを使い次のような手順が必要になります。
https://developer.apple.com/library/archive/qa/qa1831/_index.html
また、iOSでも「設定」「Bluetooth」からペアリングが必要です。
macOSX, iOS共に、一度接続が切れると自動で再接続されない仕様のようです。再度同じ手順で接続が必要になります。
4. Examples
以下のソースコードを参考にして、ボタン押下でNote On/Offを送るプログラムを使い動作の確認をしました。
https://github.com/neilbags/arduino-esp32-BLE-MIDI
拙作ESP32基板に5ボタンのシールドを使い、Arduino 1.8.8 + ESP32 1.0.1で動作させています。
macOSXのGarageBand, iOSのMusic Studio, bs-16i, TouchOSCで動作を確認できました。
確認に使ったコードは、以下の場所に置いてあります。
https://github.com/kuwatay/ble-midi
5. 今後の予定
BLE-MIDIでESP32から信号が送れることを確認できました。次のステップは以下の項目になります。
- BLE-MIDI経由の信号受信
- ステップシーケンサの移植
- バッテリー駆動化(基板作成?)
- Windows 10など他の環境での動作確認
- ハイブリッドデバイス化(WiFi + BLE)
また、@tadfmacさん作成中の「コネクタブル・ミラー」と接続する予定ですので、接続方法を検討しています。
(To Be Continued)