MIDIで接続してデータ送受信するまで経緯Grove端子でつなげるMIDIシールド(necobit電子)を買ってみた。これで家の電子ピアノと繋いで子供に自慢しようとしたところ、どうやら有線のMIDI端子はないことに気づいた。MIDIとしては使えるようだ。マニュアル見るとAppleのみ接続を保証とかいてあるが、そんなことはないはず?Arduinoのライブラリとかは一通りそろっていそうなので、簡単に接続できると思ったのだけど、そうでもなかったので記録しておく。設定~接続までここは特にサンプルコードどおりに勧めて苦労せず。Onとか送ってみたら全然認識しない。調べたらとりあえず暗号化しないとダメとの事。以下を適切に追加すればOKだった。BLEDevice::setEncryptionLevel(ESP_BLE_SEC_ENCRYPT);M5-StickCのボタン押せば音が鳴るところまではできた。受信これがどうもうまくいかない。追加されている以下のコードを追加したけどだめ。Android端末に入れてみる。鍵盤ひいたらNotification経由でMIDIメッセージが読み込めている。StickCで接続したときと違っていることに気づく。connectで接続したときは、こう。M5Stickで接続しているときはこう。Stickの時には液晶のbluetoothマークの横にP+MIDIが出ていない。苦労はしたが、無事sniffer化できたので比較。StickCのほうは暗号化を一時停止。connectとの違いは、下の赤枠部分の有無。connectで接続したあとは、IntervalのネゴシエーションがMasterとSlaveとの間でやりとりされている。*params)というのを見つけた。intervalを設定して呼び出せば何かやってくれそう。handlerを登録した後辺りに追加。Stickで読み出せるようになった。snifferで見てみても、と、なんとなくinrtervalをネゴって決めるような動作が見られた。parameterの更新をそれぞれ追加すれば送受信は大丈夫そう。MIDIの変換器を作るところまではがんばろう。Eyemotionをつなげようとした。サポートしているはずなのに中々認識されない。探していると、以下の情報があって、rpi-updateを実行して再起動したところ何事もなく認識された。https://forums.raspberrypi.com/viewtopic.php?t=7397#p123185ちなみにwebcam.txtの設定は、以下の通り。Snifferとして使えたという記録。ESP32のBLE-MIDIライブラリをつかって家の電子ピアノを制御しようとしたところ、どうもうまくいかない。Playにあるアプリだと一応音が出る。Bluetoothだとお手軽なSnifferが結構あるのではないかと調べてみた。SnifferTI社提供の、PACKET-SNIFFERが無償で使えそうなところ。どちらもそれぞれの提供するチップの開発キットやドングルで動作。nRF52840とかCC2540とかその手のチップ。SnifferはWiresharkのプラグインとして提供されているが、PACKET-SNIFFERは独自のツール。Snifferにしてみる。Sniffer導入HW購入HWはnRF系のチップの乗ったドングルや開発キット、場合によってはFWを書き込む環境が必要とのこと。簡単そうなのは、Adafruit社の以下のドングル。SnifferのFWが書き込まれているとのこと。nRF51822ただAmazonで4,000円(2022/9)とちと値がはる。nRF52840が安くて入手性もよさそう。欲しかったのでマルツで頼んだ。翌日配送で送料いれると2,400円くらい。データ解析」を参考にすすめてみる。FWやSWはNordicのページからダウンロードすればよいらしい。Desktopとかいうのをインストールした。立ち上げて上記のようにBluetoothとProgrammerをインストール(必要かどうか不明)。Snifferを書き込むためProgrammerを立ち上げる。loader書き換えにはJ-Linkを使えと書いてある。miniとかはずっと欠品中。接続してデバッグピンから書き込む方法があります。CDC経由でいけるとの事。driveに見えるようになり、バイナリをドラッグアンドロップでコピーするだけというお手軽さ。これ使っている人いないかと見たら、Nordicのドングルでやっている人がいた。XIAOもUF2アップデートに対応しているらしいとのこと。PCに接続して、Type-Cコネクタの直近の小さいボタンを素早く二回押す。すると以下のようにドライブとして認識される。あるファイルを消したくなるが、そのままここにバイナリをコピーすればOKらしい。0xada52840などで変換。Snifferとして認識された。そのあとのWiresharkの設定などはいろいろなページを参考に特に詰まることなく進められて、無事パケットのキャプチャーまで進められた。