見出し画像

M5Stack用MIDI音源ユニットをついに手に入れた

  • M5Stack用MIDI音源ユニット(以下、MIDI UNIT)の在庫が復活したので、スイッチサイエンス ウェブショップで購入してみた

  • 購入直前に値上げがあり、ちょっと挫かれそうになったが、ふんばった

    • セール時に売り切れ、その後の値上げ、買うなって言われてる気がした

  • GROVEケーブルも購入、ソケット側の端子も購入してみた

    • ツメあり、なしなどがありそうで、本当に接続できるか不安だったが、接続はできた(まだ電気は流していない)

    • GROVE - 4ピンケーブル 20cm (5本セット)

      • 追記(2024/1230):このケーブルは、黄色と白色が逆なのか!?、1つ下の写真は外側が黄色、だから少し安いのか、完全に盲点であった、恥ずかしすぎる…。(2つ下の写真は、外側が白色)

      • https://www.switch-science.com/products/798

    • GROVE - ユニバーサル4ピンコネクタ 90°(10個入りパック)
      https://www.switch-science.com/products/1123


実験の流れ

  • Windows PCで、Python + midoが動く環境を用意

  • PC向けMIDIインターフェースのMIDI OUTにMIDIメッセージを出力

  • MIDI UNITのInにMIDI信号を入力

    • 以下の画像の「MIDI」部分

  • 「MIDI UNITのTX」から「M5 Stick Plus CのRX」に接続

    • 以下の画像の「UART」部分

  • M5 Stick Plus CのMicroPythonでMIDIメッセージを受信

  • M5 Stick Plus Cで受信したMIDIメッセージを、USBシリアル通信でパソコンに送信

    • 以下の画像の「USBシリアル」部分

  • パソコンで受信したMIDIメッセージを表示



使用したMIDIケーブル

  • 50cmだとテストしやすい

  • ケーブルが柔らかくコントールしやすい

  • もしかするとシールドされていないかもしれないが、ちょっとしたテストなら問題ないと思う



Windows PC側のMIDI出力プログラム

import mido
import time

keyword_out = 'Your MIDI Output port name'

def search_port_out():
    output_name = ''
    for name in mido.get_output_names():
        print(name)
        if keyword_out in name:
            output_name = name
            break
    return output_name


def main():
    output_name = search_port_out()
    if output_name == '':
        print("The port: '%s' is not be found." % keyword_out)
        return
    
    port = mido.open_output(output_name)
    msg = mido.Message('note_on', note=60)
    port.send(msg)

if __name__ == '__main__':
    main()

M5Stack側のMIDI受信プログラム

  • UARTのtxとrxの部分は、環境に合わせて変更する必要がある

  • 状況によっては、UARTの番号の2も変更する必要がある

from machine import UART, Pin
import time

# tx and rx are needed to be changed on your environment.
uart2 = UART(2, baudrate=31250, tx=32, rx=33)

for i in range(1, 10000):
    bytes = uart2.read()
    if bytes is not None:
        print('MIDI Message received: ' + ''.join('{:02x} '.format(a) for a in bytes))
    else:
        print("No data at count:%d." % i)
    time.sleep(1)

ログ

  • Note OnのMIDIメッセージが受信できた

No data at count:1
No data at count:2
No data at count:3
MIDI Message received: 90 3c 40 
No data at count:5
No data at count:6
No data at count:7
No data at count:8
No data at count:9
No data at count:10



  • WindowsとESP32の両方がPythonでプログラミングできて、思考の切り替えが少なくて済む

  • ESP32を介しているのだが、

  • 一見、パソコンでデータ作って、そのデータをパソコンに表示してるだけじゃん!、何が嬉しいの?って思える点が面白い



いいなと思ったら応援しよう!