Raspberry Pi Zero W v1.1を使って、電源を入れると自動でインターネットラジオ「FMジャングル」を再生する小型ラジオを作ったときの設定メモです。
音声出力にはUSB-DACを使用します。 今回は、Windowsでは「AB13X」と表示されるUSB Type-C → 3.5mmステレオ出力アダプタを、Raspberry Pi Zero WのmicroUSB OTG経由で接続しました。
構成
- Raspberry Pi Zero W v1.1
- Raspberry Pi OS Lite 32-bit
- Wi-Fi接続
- USB-DAC
- mpvでHLSストリームを再生
- systemdで起動時に自動再生
1. 必要なパッケージを入れる
sudo apt update sudo apt install -y mpv alsa-utils curl
2. USB-DACを確認する
USB-DACを接続して、認識されているか確認します。
lsusb aplay -l cat /proc/asound/cards
例:
card 1: Audio [AB13X USB Audio], device 0: USB Audio [USB Audio]
この場合、USB-DACは card 1, device 0 です。
3. USB-DACから音が出るか確認する
speaker-test -D plughw:1,0 -c 2 -t sine
音が出ればOKです。
止めるときは Ctrl + C です。
4. mpvの音声出力先を設定する
毎回USB-DACを指定しなくてよいように、mpvの設定ファイルを作ります。
mkdir -p ~/.config/mpv nano ~/.config/mpv/mpv.conf
内容:
no-video=yes ao=alsa audio-device=alsa/plughw:Audio,0 volume=80
環境によって Audio で指定できない場合は、次のようにカード番号で指定します。
no-video=yes ao=alsa audio-device=alsa/plughw:1,0 volume=80
5. 再生テスト
まずNHK FMなどで再生確認します。
mpv --no-video "https://simul.drdi.st.nhk/live/5/joined/master.m3u8"
次に、FMジャングルを再生します。
mpv --no-video \ --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \ --referrer="https://listenradio.jp/" \ --http-header-fields="Origin: https://listenradio.jp" \ "https://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8"
これでFMジャングルが再生できれば成功です。
6. 自動再生スクリプトを作る
例ではユーザー名を piuser としています。
実際のユーザー名に置き換えてください。
mkdir -p /home/piuser/bin nano /home/piuser/bin/play_fmjungle.sh
内容:
#!/bin/bash URL="https://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8" exec /usr/bin/mpv --no-video \ --demuxer-lavf-o=http_persistent=0,reconnect=1,reconnect_streamed=1,reconnect_delay_max=10 \ --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \ --referrer="https://listenradio.jp/" \ --http-header-fields="Origin: https://listenradio.jp" \ "$URL"
実行権限を付けます。
chmod +x /home/piuser/bin/play_fmjungle.sh
手動で確認します。
/home/piuser/bin/play_fmjungle.sh
7. systemdで起動時に自動再生する
サービスファイルを作ります。
sudo nano /etc/systemd/system/fmjungle.service
内容:
[Unit] Description=FM Jungle Internet Radio Player After=network-online.target sound.target Wants=network-online.target [Service] Type=simple User=piuser ExecStart=/home/piuser/bin/play_fmjungle.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
有効化して起動します。
sudo systemctl daemon-reload sudo systemctl enable fmjungle.service sudo systemctl start fmjungle.service
状態確認:
systemctl status fmjungle.service
ログ確認:
journalctl -u fmjungle.service -f
再起動して、自動再生されるか確認します。
sudo reboot
8. Wi-Fiを複数登録する
自宅と会社など、複数のWi-Fiを登録しておくと、現在見えているSSIDに自動接続できます。
現在の接続確認:
nmcli connection show --active nmcli device status
Wi-Fi一覧:
nmcli device wifi list
自宅Wi-Fiを登録する例:
sudo nmcli connection add type wifi ifname wlan0 con-name home-wifi ssid "自宅SSID" sudo nmcli connection modify home-wifi wifi-sec.key-mgmt wpa-psk sudo nmcli connection modify home-wifi wifi-sec.psk "自宅パスワード" sudo nmcli connection modify home-wifi connection.autoconnect yes sudo nmcli connection modify home-wifi connection.autoconnect-priority 10
会社Wi-Fiを登録する例:
sudo nmcli connection add type wifi ifname wlan0 con-name office-wifi ssid "会社SSID" sudo nmcli connection modify office-wifi wifi-sec.key-mgmt wpa-psk sudo nmcli connection modify office-wifi wifi-sec.psk "会社パスワード" sudo nmcli connection modify office-wifi connection.autoconnect yes sudo nmcli connection modify office-wifi connection.autoconnect-priority 20
優先度は数字が大きい方が優先されます。
上記例では、両方見えている場合は office-wifi が優先されます。
手動で切り替える場合:
sudo nmcli connection up home-wifi sudo nmcli connection up office-wifi
現在接続しているSSIDを確認:
nmcli -t -f ACTIVE,SSID dev wifi | grep '^yes'
IPアドレス確認:
hostname -I
9. DHCPになっているか確認する
現在有効な接続名を確認します。
nmcli connection show --active
例:
NAME TYPE DEVICE office-wifi wifi wlan0
DHCPか確認します。
nmcli connection show office-wifi | grep ipv4.method
DHCPなら次のように表示されます。
ipv4.method: auto
ルーティングでも確認できます。
ip route
次のように proto dhcp が出ていればDHCPで取得しています。
default via 192.168.0.1 dev wlan0 proto dhcp
10. SSHで状態確認する
SSHでログイン後、次のコマンドで状態を確認できます。
Wi-Fi接続状況:
nmcli device status nmcli -t -f ACTIVE,SSID dev wifi | grep '^yes' iw dev wlan0 link
インターネット接続確認:
ping -c 3 8.8.8.8 ping -c 3 google.com
FMジャングルサービスの状態:
systemctl status fmjungle.service
mpvが動いているか確認:
pgrep -a mpv
ログ確認:
journalctl -u fmjungle.service -n 50
リアルタイムでログを見る場合:
journalctl -u fmjungle.service -f
再生を再起動する場合:
sudo systemctl restart fmjungle.service
11. まとめ確認スクリプト
毎回複数のコマンドを打つのが面倒なので、簡易チェック用スクリプトを作ります。
nano /home/piuser/bin/radio_status.sh
内容:
#!/bin/bash echo "===== Host =====" hostname hostname -I echo echo "===== Wi-Fi =====" nmcli -t -f ACTIVE,SSID dev wifi | grep '^yes' || echo "No active Wi-Fi" iw dev wlan0 link echo echo "===== Internet =====" ping -c 1 -W 2 8.8.8.8 >/dev/null && echo "Internet: OK" || echo "Internet: NG" echo echo "===== FM Jungle Service =====" systemctl is-active fmjungle.service systemctl is-enabled fmjungle.service echo echo "===== mpv Process =====" pgrep -a mpv || echo "mpv is not running" echo echo "===== Audio Devices =====" aplay -l echo echo "===== Recent Logs =====" journalctl -u fmjungle.service -n 15 --no-pager
実行権限:
chmod +x /home/piuser/bin/radio_status.sh
実行:
/home/piuser/bin/radio_status.sh
12. トラブル時の確認ポイント
音が出ない
USB-DACが見えているか確認します。
aplay -l cat /proc/asound/cards
mpvの設定も確認します。
cat ~/.config/mpv/mpv.conf
Wi-Fiにつながらない
nmcli device status nmcli connection show nmcli device wifi list
2.4GHzのSSIDを使っているか確認します。 Raspberry Pi Zero Wは5GHz Wi-Fiには対応していません。
FMジャングルが鳴らない
配信URLにアクセスできるか確認します。
curl -L -I \ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \ -H "Referer: https://listenradio.jp/" \ -H "Origin: https://listenradio.jp" \ "https://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8"
200 OK が返れば、配信サーバーには到達できています。
サービスを再起動します。
sudo systemctl restart fmjungle.service
13. 補足:安全シャットダウンボタン
電源をいきなり抜くとSDカード破損の可能性があるため、安全シャットダウンボタンを付けるのもよいです。
GPIO3、つまり物理ピン5と、GNDの物理ピン6に押しボタンを接続します。
GPIO3 / 物理ピン5 ---- ボタン ---- GND / 物理ピン6
設定ファイルを開きます。
sudo nano /boot/firmware/config.txt
環境によっては次の場合もあります。
sudo nano /boot/config.txt
最後に追加します。
dtoverlay=gpio-shutdown
再起動します。
sudo reboot
これでボタンを押すと安全にシャットダウンできます。
まとめ
Raspberry Pi Zero Wでも、ブラウザを使わず mpv で直接HLSストリームを再生できれば、軽量なインターネットラジオ端末として十分使えます。
今回のポイントは次の3つです。
- USB-DACをALSAで認識させ、mpvの出力先に設定する
- FMジャングルのURLにUser-Agent、Referer、Originを付けて再生する
- systemdで起動時に自動再生する
これで、電源を入れるだけでFMジャングルが鳴るRaspberry Piラジオになります。