ESP32でMIDIを受信してみる
概要
ESP32(MicroPython)で、MIDI信号の受信をテストしてみる実験
MIDIを受信するには、高速なフォトカプラが必要
以前、Roland EDIROL PCR-30の修理を試みて失敗した時に、部品を回収したフォトカプラをを使ってみることにした
メモ:2023/2月ごろの実験
PC410L(フォトカプラ)
PCR-30には、SHARPのPC410L0NIP Seriesというフォトカプラが実装されていた(刻印から察するに)
PC410L(フォトカプラ)の製造日の確認
チップに製造日が刻印されているようだ
PNと書かれているので、2002年の11月に製造されたと思われる
工場の表記は「なし」と判断してよいのだろうか、そうならば日本製だ
アノードマークの右隣のK印は、何を指しているのだろうか
これが、ファクトリ識別子なのだろうか
でも一覧にはない、Kだから韓国かもしれない
こういうのを見て思考を巡らせるのも、分解の醍醐味のひとつである
フォトカプラをDIP化
表面実装ということもあり、はんだを取るのに失敗して、かなり汚くなってしまった
壊れなかったのでよしとしたいが、
部品名が読めなくなってしまったのが致命的(裏に部品名を書くことに、とほほ)
表面実装のはんだを取る勉強になった
DIP変換基板に実装しなおして、ブレッドボードでテストしやすくした
細ピンヘッダが手元になかったので通常のピンヘッダをやすりで削るという苦労もあった
変換基板を使うと、ピンレイアウトが変わって混乱するのは誰もが通る道と思われる
構成図(回路図)
データシートにある抵抗値とまったく同じものがなかったので、微妙に違う値の抵抗を使ったが動作した
MIDI OUTする機器は「CASIO GZ-5」を使った
プログラム
MicroPythonで実装することにした
import machine
import time
uart2 = machine.UART(2, baudrate=31250)
for i in range(1, 10000):
b = uart2.read()
if b is not None:
print(b)
time.sleep(0.01)
プログラムの出力結果
鍵盤で、ド、ド#を押して、ドを離したときのログ(コメントを加筆)
Pythonでbyte arrayをprint()したときの表記
Byte arrayを見やすく表示する実装をするのを怠ってしまったので読みづらい
b'\x9002' -> 0x90 0x30 0x32 Note On (C2 Velocity:0x32)
b'\x1f2' -> 0x31 0x50 Note On
b'0\x00' -> 0x30 0x00 Note On (Note Off)
同じステータスのメッセージが連続する場合、後続のステータスバイト(第1バイト目)が省略が可能
ラーニングステータスと呼ばれる
2行目、3行目がラーニングステータスが働いているので、2バイトになっている
「CASIO GZ-5」のMIDI OUTは、なんとラーニングステータスを使っている、ノートオフは、ノートオンのベロシティ0を使っている
ラーニングステータスを知らないとデータがおかしくみえて焦るので、この実験には不向きであった(実際に焦った)
Byte arrayを16進数の文字列に変換する実装
この実装を入れておけばよかった
''.join('{:02x} '.format(a) for a in b'\x9002') # '90 30 32 '
ランニング·ステータス
楽器作りの夢に一歩近づいた、はず
この記事が気に入ったらサポートをしてみませんか?