0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stack CoreS3のUSB-CにMIDI Keyboardを接続してMIDIイベントを受信する

Last updated at Posted at 2024-10-26

背景

最近、上記記事を書いたが、そもそもM5Stack CoreS3はESP32-S3なのでそれ単体でUSB Hostに対応しているので、USB Hostモジュールなど追加せずとも直接MIDI機器をUSB-Cに挿したらやりたいことができるのでは?とおもいやってみた。

やったこと

やってみたと言っても、ひたすら調べて結果見つけた以下のサンプルコードを焼いてみたらできた。ESP32S2向けのようだが、M5Stack CoreS3でも動いた。

examples/usbhmidi/usbhmidi.ino

サンプルは割とローレベルのUSB実装がメインでMIDI.hのようなMIDIに特化したことはやっていなく、以下のように受信したMIDIイベントのバイト列をそのままログ表示しているだけにとどまるので実際に作る際にはもう少し使いやすくした方が良さそうだ。

usbhmidi.ino
uint8_t *const p = transfer->data_buffer;
for (int i = 0; i < transfer->actual_num_bytes; i += 4) {
    if ((p[i] + p[i+1] + p[i+2] + p[i+3]) == 0) break;
    ESP_LOGI("", "midi: %02x %02x %02x %02x",
        p[i], p[i+1], p[i+2], p[i+3]);
}

焼くときはUSB MODEをHardware CDC and JTAGにする (USB OTGにする必要はない)

注意点

これらを実施するとUSB-C Portを機器との接続使ってしまうため、PCでSerialログが表示できなくなる。
例えば、以下のようにしてデバッグする。

  • M5StackのLCDを使ってログを表示する(手軽だが表示領域が狭い)
  • Serial2にログを出力する。TX pin(M5Stack CoreS3ではG17)をUSB Serial converterのRXに繋いでPCで別ポートとして認識させる

また、M5StackはUSB-Cポートからの給電はしていないのでUSB Hostからの電源供給を前提としている機器は外部から電源供給しないといけないが、給電方法についてもこのサイトのREADMEに書いてある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?