M5Stack用MIDI音源ユニットをついに手に入れた
M5Stack用MIDI音源ユニット(以下、MIDI UNIT)の在庫が復活したので、スイッチサイエンス ウェブショップで購入してみた
購入直前に値上げがあり、ちょっと挫かれそうになったが、ふんばった
セール時に売り切れ、その後の値上げ、買うなって言われてる気がした
GROVEケーブルも購入、ソケット側の端子も購入してみた
ツメあり、なしなどがありそうで、本当に接続できるか不安だったが、接続はできた(まだ電気は流していない)
GROVE - 4ピンケーブル 20cm (5本セット)
追記(2024/1230):このケーブルは、黄色と白色が逆なのか!?、1つ下の写真は外側が黄色、だから少し安いのか、完全に盲点であった、恥ずかしすぎる…。(2つ下の写真は、外側が白色)
GROVE - ユニバーサル4ピンコネクタ 90°(10個入りパック)
https://www.switch-science.com/products/1123
実験の流れ
Windows PCで、Python + midoが動く環境を用意
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を介しているのだが、
一見、パソコンでデータ作って、そのデータをパソコンに表示してるだけじゃん!、何が嬉しいの?って思える点が面白い