MicroPythonでBLEのローレベルの実装がなされている。MIDI over BLEを理解して、できることなら、ボリュームやスイッチが一杯付いたMIDIコントローラ(BLE接続)を自作したい(MicroPython+ESP32で)。
手始めに、BLE接続可能なMIDI楽器(KorgのMicroKey AIR)を見つけられるか?やってみた。
ESP32+MicroPythonの組み合わせでBLE.gap_scan()を実行した
結果:
スマフォだとMicroKeyAirを見つけられるが、MicroPythonのBLEライブラリでは見つけられず。あるいは、Connectしてもらず。なぜだろうか。。BLE.gap_scan()では複数のBLEサーバを見つけられるのだが、どれがMicroKeyAirの電波かもわからない。MicroKeyAirはどんなパケットをAdvertiseしているのか不明。他のBLE機器が邪魔なので、ESP32とMicroKeyAirを銀紙で巻いて電波暗室にして、BLEの電波が一つになるよう絞って調査するか。。
ちゃんとしたSnifferでないとmicroKEY AirからどんなAdvertising Packetが出ているのか把握できないので、手段もないのでローレベルでの調査はやめて、、、ひとまず、先行事例のOpen MIDI Drum等をESP32 + Arduinoで動かしてみる。
今後の取り組み:
BLE用Snifferを買って実際に飛んでいるパケットを見てみる。推測だけど、、認証オプションが有効なようで、認証(鍵交換?)の所で何か問題になっているのではなかろうか。。
■以下資料と参考記事URL
service と characteristic のUUID定義
• MIDI Service (UUID: 03B80E5A-EDE8-4B33-A751-6CE34EC4C700) • MIDI Data I/O Characteristic (UUID: 7772E5DB-3868-4112-A1A9-F2669D106BF3) • write (encryption recommended, write without response is required) • read (encryption recommended, respond with no payload) • notify (encryption recommended)
関連資料
ROHM社のBLE解説記事
基礎知識 | ROHM TECH WEB
ESP32を使ったBLEの実験と解説。この記事をちゃんと読めばEPS32上でBLEを動かす方法が分かるはず
ESP32・BLE通信
GATTの仕様書一覧
ガット仕様 |ブルートゥース®テクノロジーウェブサイト
ガットサービス |ブルートゥース®テクノロジーウェブサイト
UUID
UUID詳細
MIDI over BLE の仕様解説、仕様書
MIDI over BLE - v2.13 - Bluetooth API Documentation Silicon Labs
Bluetooth LE MIDI Specification
micropython/examples/bluetooth at master · micropython/micropython · GitHub
Bluefruit LE Snifferを使用したBLEプロトコル解析 | TomoSoft
DSAS開発者の部屋:技適マークつき BLE パケットスニファを入手する
MIDI over BLEによる楽器例:MIDI Drum 等
ESP32でBLE MIDIを使う - Open E-drums
ble-midi/BLE-MIDI_BUTTON5.ino at master · kuwatay/ble-midi · GitHub
MicroPythonのBLEライブラリによる温度センサー実装例
micropython/ble_temperature.py at master · micropython/micropython · GitHub
ESP32版Arduiono BLEのサンプルコード
ESP32_BLE_Arduino/examples at master · nkolban/ESP32_BLE_Arduino · GitHub
micropython/examples/bluetooth at master · micropython/micropython · GitHub
■ご参考URL
詳しくは分からないけど、BLE MIDIの楽器類はEncryptionオプションが有効になっていて、このオプションがMicroPython版 BLEライブラリで正しく処理されないためにDiscover/Connectでうまくいかないのではなかろうか。。
ble support and encrypted characteristics · Issue #5174 · micropython/micropython · GitHub
MIDIberry (MIDI over BLEに対応)
CircuitPython — Adafruit CircuitPython 0.0.0 documentation
_bleio — Bluetooth Low Energy (BLE) communication — Adafruit CircuitPython 0.0.0 documentation
Adafruit_Learning_System_Guides/powerglove_ble_midi.py at master · adafruit/Adafruit_Learning_System_Guides · GitHub
GitHub - skratchdot/ble-midi: A Bluetooth Low Energy MIDI library written in javascript
ble-midi/Apple-Bluetooth-Low-Energy-MIDI-Specification.pdf at master · skratchdot/ble-midi · GitHub
ble-midi/rp52public.pdf at master · skratchdot/ble-midi · GitHub
CircuitPythonではEncryptedオプションに対応しているようである。。
https://learn.adafruit.com/bluetooth-le-hid-volume-knob-with-circuitpython?view=all