Raspberry Pi ZeroをOTGモードを使って、PCからMIDIデバイスとして認識できるように設定します。OTGはUSB On-The-Goの略です。 OTGを使うとPCがUSBのHost(親側)、Raspberry Pi ZeroをFunction(子供側)にすることができます。 普通のRaspberry Pi 2 Raspberry Pi 3はこのモードに対応していません。 ここではRaspberry Pi ZeroをMIDIデバイスにしてみます。 設定はLinuxの扱いに慣れていないとちょっと難しいかもしれません。
config.txtとのcmdline.txtの2つのファイルを書き換えます。
> pi@raspberrypi:~ $ sudo vi /boot/config.txt
私の場合、config.txtの一番最後の行は以下のようになりました。
... ... [pi4] # Run as fast as firmware / board allows arm_boost=1 [OTG] dtoverlay=dwc2
> pi@raspberrypi:~ $ sudo vi /boot/cmdline.txt
私の場合cmdline.txtを書き加えた結果、以下のようになりました。
console=serial0,115200 console=tty1 root=PARTUUID=fe7ff3ab-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP rootwait modules-load=dwc2,g_midi quiet
コマンドラインで、以下の2つの命令を実行することでも書き換えられます。
> pi@raspberrypi:~ $ sudo sed -i -e '$ a dtoverlay=dwc2' /boot/config.txt > pi@raspberrypi:~ $ sudo sed -i s/rootwait/rootwait\ modules-load=dwc2,g_midi/ /boot/cmdline.txt
2つのファイルを書き換えたらrebootします。
> pi@raspberrypi:~ $ sudo reboot
Ubuntu 23.10では設定ファイルの場所(ディレクトリ)が変わっていました。 私はUbuntu 23.10をRaspberry Pi Zero2にインストールしました。
config.txtとcmdline.txtの2つのファイルは、/boot/firmwareにあります。
> cd /boot/firmware > sudo vi config.txt
config.txtの最終行は以下の様に書かれていました。
[cm4] # Enable the USB2 outputs on the IO board (assuming your CM4 is plugged # into such a board) dtoverlay=dwc2,dr_mode=host
以下のようにdr_mode=hostを削除して下さい。
[cm4] # Enable the USB2 outputs on the IO board (assuming your CM4 is plugged # into such a board) dtoverlay=dwc2
cmdline.txtの修正は上と同じです。rootwaitを探して、 rootwait modules-load=dwc2,g_midiと修正します。
参考にUbuntuのバージョンは/etc/os-releaseをcatすることで確認できます。
> cat /etc/os-release PRETTY_NAME="Ubuntu 23.10" NAME="Ubuntu" VERSION_ID="23.10" VERSION="23.10 (Mantic Minotaur)" ...
Raspberry Pi Zero 2において Ubuntu 24.04の場合、config.txtとcmdline.txtの2つのファイルは、/boot/firmwareにあります。 config.txtを見ると以下のようにdtoverlay(Device Tree オーバーレイ)が何回か設定されています。
# Config settings specific to arm64 arm_64bit=1 dtoverlay=dwc2 # Enable the KMS ("full" KMS) graphics overlay, leaving GPU memory as the # default (the kernel is in control of graphics memory with full KMS) dtoverlay=vc4-kms-v3d disable_fw_kms_setup=1 [pi3+] # Use a smaller contiguous memory area, specifically on the 3A+ to avoid an # OOM oops on boot. The 3B+ is also affected by this section, but it shouldn't # cause any issues on that board dtoverlay=vc4-kms-v3d,cma-128 [pi02] # The Zero 2W is another 512MB board which is occasionally affected by the same # OOM oops on boot. dtoverlay=vc4-kms-v3d,cma-128 [all] [cm4] # Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into # such a board) dtoverlay=dwc2,dr_mode=host [all]
OTGモードで動作させるには、以下の行をコメントアウトします。
[cm4] # Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into # such a board) # dtoverlay=dwc2,dr_mode=host
一般に、Raspberry PiをUSBデバイス(クライアント)として使いたい場合は、 dr_mode=deviceのように設定を変更する必要があります。この設定で、Raspberry Piは、 コンピュータのUSBポートに接続されるデバイスとして動作します。
わかる範囲で記載しておきます。
disable_fw_kms_setup=1
ブートプロセスに関連する設定で、ファームウェアによる KMS (Kernel Mode Setting) の設定を無効にします。
KMSは、カーネルが直接グラフィックスモードの設定を制御する方式です。無効の場合、ファームウェアがKMS設定を行わず、
代わりにLinuxカーネルがこれらの設定を担当します。 これにより、特定のハードウェアや設定で起こり得る互換性の問題や、
メモリの管理が異なる形で行われる可能性があります。
この設定が有効になっていると、Raspberry Pi のファームウェアが起動時にディスプレイの解像度やグラフィックスモードを設定します。
OOMエラーとは
Zero 2Wは512MBのメモリを搭載していますが、起動時にメモリ不足によるエラー(「Oops」)が発生することがあります。 OOMエラーとは、システムが利用可能なメモリを使い果たし、必要な処理が実行できなくなる状況を指します。
Raspberry Pi Zeroでは、Ubuntuのデスクトップが立ち上がっていて、Chrmiumが使える場合を想定しています。 デスクトップが立ち上がっていない場合は、コマンドラインで確認を参照して下さい。
PCとUSB接続します。Raspberry Pi Zeroには2つのUSBポート付いています。 この内、内側ののUSBと記載されている端子とつないで下さい。
PCでデバイスマネージャーを開くと、サウンド、ビデオ、および…の項目にMIDI functionが追加されています。
一方、Raspberry Pi Zeroでは、amidi -lコマンドを使って、f_midiという名前でMIDIデバイスが認識できます。
> pi@raspberrypi:~ $ amidi -l Dir Device Name IO hw:0,0 f_midi
Web MIDIを使って、MIDIの送受信をチェックします。PCのChromeで、このページを開きます。MIDI IN:/MIDI out:の両方にMIDI functionを設定します。
Raspberry Pi Zeroでも同じページを開きます。MIDI IN:/MIDI out:の両方にMIDI functionを設定します。
PC側のPushを押します。Raspberry Pi ZeroのブラウザでMIDIが受信できます。
Raspberry Pi Zero側のPushを押します。PCのブラウザでMIDIが受信できます。
Raspberry Piではデスクトップが立ち上がっていない場合、コマンドラインでMIDIメッセージ のやりとりを確認します。
PC側の準備は上と同じです。PCとデバイスをUSBで接続します。
PCでデバイスマネージャーを開くと、サウンド、ビデオ、および…の項目にMIDI functionが追加されています。
Web MIDIを使って、MIDIの送受信をチェックします。PCのChromeで、このページを開きます。MIDI IN:/MIDI out:の両方にMIDI functionを設定します。MIDI Gadgetと表示される場合もあります。
デバイス側ではamidi -d -p hw:0,0,0のコマンドでMIDIの受信待ちになります。PC側でPushをクリックするとデバイス側でMIDIを受信できます。
> pi@raspberrypi:~ $ amidi -l Dir Device Name IO hw:0,0 f_midi > pi@raspberrypi:~ $ amidi -d -p hw:0,0,0 90 30 7F 80 30 00 90 34 7F 80 34 00 90 37 7F 80 37 00 90 30 7F 90 34 7F 90 37 7F 80 30 00 80 34 00 80 37 00
反対に、デバイス側からMIDIを送信する場合は、以下の2つのコマンドを使います。 まずechoコマンドで、MIDIのバイナリファイルを作成します。
> pi@raspberrypi:~ echo -n -e "\x90\x66\x77" > midi.bin
次に、amidiコマンドでメッセージを送信します。
> pi@raspberrypi:~ amidi -p hw:0,0,0 -s midi.bin
PC側で受信したMIDIメッセージが表示されます。