2
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?

Raspberry Pi 5のUSB-CポートをUSB-MIDIデバイスにしてみた

Last updated at Posted at 2025-11-06

Raspberry Pi 5 の USB-C ポートは、USBホストではなくUSBペリフェラル(USB機器)モードに設定できるそうです。

ということで、USB-MIDIデバイスとして使えるようセットアップしてみました。検索すると意外と情報があるようで完全ではなく、きっちり最新のDebianでの動作手順がまとまっているページがなかったので、備忘録としてまとめておきます。

手順

Raspberry Pi 5を買う

2025/11 RAM8GB版を秋月で買いました。14,960円でした。

標準搭載のUSBポートをUSBペリフェラルに設定できるのはRaspberry Pi Zero 2 と Pi 5ぐらいらしいので注意してください。また、ペリフェラル化できるのは特定のポートだけで、どのUSBポートでもOKというわけではないようです。Pi 5の場合はUSB-Cポートです。

起動する

Raspberry Pi Imagerで適当なSDカードに起動イメージを焼いて、Debian系Linuxを入れて起動します。私はヘッドレス起動で良いので 64bit版の Raspberry Pi OS Lite (Debian Trixie) にしました。

USBポートをperipheralモードにする

Raspberry Pi 5に何らかの手段でログインし、/boot/firmware/config.txt 末尾の[all]セクションに以下を追加します。

/boot/firmware/config.txt
dtoverlay=dwc2,dr_mode=peripheral

USB-MIDIのモジュールを有効にする

/boot/firmware/cmdline.txt の rootwait の直後に modules-load=dwc2,g_midi を挿入します。追加したものがこんな↓感じです。改行すると動かなくなるので注意してください。

/boot/firmware/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=4e9ef90c-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_midi cfg80211.ieee80211_regdom=JP

再起動します。

$ sudo reboot

USB-MIDIのサービスを動かす

/usr/bin/midi_over_usb を作って以下の内容を書き込みます。

/usr/bin/midi_over_usb
#!/usr/bin/env bash
cd /sys/kernel/config/usb_gadget/
mkdir -p midi_over_usb
cd midi_over_usb
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "fedcba9876543210" > strings/0x409/serialnumber
echo "Your Name" > strings/0x409/manufacturer
echo "MIDI USB Device" > strings/0x409/product
ls /sys/class/udc > UDC

strings/0x409/{serialnumber,manufacturer,product}echoで流し込んでいる値はお好みで変更して構いません。

できたら、実行権限を追加します。

$ sudo chmod +x /usr/bin/midi_over_usb

サービス自動起動のため、/etc/systemd/system/midi_over_usb.service を作成して、以下の内容を書き込みます。

/etc/systemd/system/midi_over_usb.service
[Unit]
Description=Start USB MIDI gadget
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/bin/midi_over_usb
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

最後にサービス有効化

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now midi_over_usb.service

動作チェック

正しく設定できていれば、Pi 5のUSB-CポートをPCと繋ぐとUSB-MIDIデバイスとして認識され、適当なMIDIソフトからポートが見えるはずです。

Pi側でも aconnect -l を実行すると、f_midi ポートが見えるはず。

$ sudo apt install -y alsa-utils # まだインストールされていなければ
$ sudo aconnect -l
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 16: 'f_midi' [type=kernel,card=0]
    0 'f_midi  

上記の例だとクライアント16:0f_midiなので、

$ sudo aseqdump -p 16:0

とすると、MIDI入力の監視が始まります。PC側からMIDIデータを何か送信すると、コンソールにMIDIメッセージがダンプ表示されます。

2
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
2
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?