ラズパイ Zero によるインターネット・ラジオ 
[ はじめに ]
 先に、後閑哲也さんの
「PICと楽しむRaspberry Pi 活用ガイドブック」に基づいて「赤外線リモコン付きインターネットラジオ」の製作をしました。その続きで、安価で小サイズの「Raspberry Pi Zero WH」でインターネット・ラジオを作って、気軽に、常に音楽を流して置きたいと思いました。「ラズパイ3 B+」に比べて面積にして4割ほどで、価格も2〜3分の1ですから気楽に使えますね。
初期の「Raspberry Pi Zero」と違い、WiFiは使えます。ですが何点か問題があります。
@ スピーカー端子がない。 A USBコネクタは、マイクロが1つしかない。B HDMI は Mini-HDMI である。
・・・などです。
それで、この「ラズパイZero WH 」でインターネット・ラジオを製作するに当たって、追加の材料を入手しました。
@ マイクロ USB - USBx4 ハブ。 A Mini-HDMI - HDMI 変換コネクタ。B マイクロ USB - USB 変換コネクタ。
C USB オーディオアダプタ。
・・・などです。
基本的に、この「ラズパイZero WH 」の通常の操作は、リモート・ディスクトップで扱うつもりですので、最終的には「Mini-HDMI - HDMI 変換コネクタ」や「マイクロ USB - USBx4 ハブ」などは不要なのですが、「SDCard Copier」「Raspberry Piの設定」など、幾つかのメニュー項目が、実機のディスクトップからでないと起動できないようなので、有った方が安心ということで、それらも入手しました。ですが後で、これらのメニューも 「リモートディスクトップから起動できる方法」が分かってまいりましたので、それらのツールも結果的には不要でした(笑い)。

「PICと楽しむRaspberry Pi 活用ガイドブック」の中に、「OSのインストール」「リモートディスクトップ化」「ラズパイのIPアドレスを固定する」「GPIO関連(RPi.GPIO,WiringPi,WebIOPi)ツールのインストール」「MPD と MPCのインストール」などについて詳しく解説されていますので、これらの基本設定は書籍を参照するか、WEBからの情報によって、済ませておいてください。これらの設定は、ラズパイを扱う上での基本的な設定ですので、インターネットラジオに限らず有用だと思います。
私は、「ラズパイZero WH 」に使うSDカードは「赤外線リモコン付きインターネットラジオ」で使用した「ラズパイ3 B+」の SDカードをコピーして「ラズパイZero WH 」に挿して、変える必要の有るところだけ(IPアドレス固定の設定など)を変更して使いました。「ラズパイZero WH 」には、オーディオ出力コネクタが付いていないので、この後の作業を進めるのは、手探りとなり、やや困難 (できますが手応えが無い場合も有り)ですので、私と同じようにされるとやり易いのではないかと思います。下の写真は、今回、製作したものの動作中の様子です。





スピーカー (RECCARZ SP2040)は、重低音が出ますということで Amazonから入手(850円程度、その後値上がりしている) しました。小型・安価ながら結構良い音を出していると思います、ボリュームも付いています。このスピーカーの電源は USBのオスですので、上の写真のようにラズパイの +5V(コネクタピン4)と GND(コネクタピン6)から取っています。「ラズパイ2, 3」の場合でしたら、そのまま USBコネクタに挿せます。USBオーディオ 変換アダプタ(VENTION)は、同じく Amazonから入手(900円程度)しました。これは、通常のUSBですので、別途、マイクロUSB - USB 変換コネクタを付けています。なお、ヒートシンクを付けていますが、それほど熱をもたないので必ずしも必要はないです。余っていたので付けただけですから・・・(笑い)


【 1 】リモートディスクトップ
下図が Windows 10 パソコンから起動した画面です。「ラズパイ3 B+」などに比べると、表示までの速度と処理速度は、さすがに遅いですが、本体にディスプレイ・キーボード・マウスを付けなくとも操作できる快適さは得難いものです。



ディスクトップの画面に「シャットダウン」「再起動」のショートカットが配置されています。これは、リモートデスクトップのメニューからは、この2つのコマンドを実行できないので、同様の動作をするショートカットを作っています。このショートカットの作成手順については、ここを 御参照ください。このリンク内に詳しく解説されています。解説は「シャットダウン」だけですが、「再起動」も、コマンドを「sudo reboot」とし、「アイコン」を変更すれば対応できます。「ラズパイZero WH 」の通常の操作は、このリモートディスクトップのみを使うことにしていますので、このショートカットは先のリンクを参照して、是非作ってください。バックアップのための SD Card Copyier もコマンドを「env SUDO_ASKPASS=/usr/bin/pwdpic.sh sudo -AE dbus-launch piclone」 とすることで起動できることが分かったのでこれもショートカットを追加しました。

【 2 】USBオーディオ変換アダプタを使えるように設定
これに付きましては、このリンクに大変お世話になりました。参考にした部分は、
USB-Audio変換アダプタをデフォルトのサウンドデバイスにする内容(下記)を /home/pi/.asoundrc に記入しました。次のコマンドを実行します。

sudo nano /home/pi/.asoundrc

そして、新しい .asoundrc ファイルを編集します。それに下記の内容を記入します。

リスト1


なお、これは隠しファイルになっているので、ファイルマネージャのメニューの[表示]-[隠しファイルを表示する]にチェックを入れないとファイルマネージャには表示されないことにご注意ください。

次に、USBスピーカーの優先順位を上げなければ、音がでません。順位を確認します。
cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio

USB は、2番目になっています。このままでは、音がでません。

「USBスピーカーの優先順位を上げる」についての情報は、WEB上にたくさん有るのですが、指示通りにしても優先順位が上がらなかったりして、色々と試行錯誤しました。最終的に、あるリンクを参照して実行した次の作業でOKとなりました。
専用の設定ファイル /etc/modprobe.d/alsa-base.conf を新規に作り、その中に次のように記入することでカードの認識順序を変更でき、優先度を変更できました

sudo nano /etc/modprobe.d/alsa-base.conf

実行すると、何も書いてない alsa-base.confファイルの nanoエディタが立ち上がります。そしてそこに、以下の3行を記入します。

options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1

保存して終了し、再起動します。これで音がでました。ちなみに順位を確認してみます。
cat /proc/asound/modules
0 snd_usb_audio
1 snd_bcm2835

確かに、順位が変わっています。


【 3 】MPD と MPCのインストール
インターネットラジオの本体である MPD と MPC のインストールに付いては「PICと楽しむRaspberry Pi 活用ガイドブック」に詳しく解説されています(WEB上にも沢山あります)ので、それを参照してください。ただ、局リストの作り方が、書籍の内容からは少々変更されていますが、何とか対応できると思います。参考に、私の 30局の分の局リストを掲載します。

リスト2-局リスト


上のリストの 全ての範囲をドラッグして選択します、その状態で右クリックしてコピーします。それをエディタに貼り付けて、「名前を付けて保存」で名前を test.m3u とし、 /var/lib/mpd/playlists に保存してください。
スピーカーが生きており、局リストが /var/lib/mpd/playlists に入っていれば、この時点で以下のコマンドでラジオが聞けます。
局リストのファイル名は先程、指定した test.m3u です。以下を実行して確認できます。
mpc clear
mpc load test
mpc playlist
mpc play 27
このインターネットラジオではリモコン(選局・Volume)は付けていません、ですので、それらの操作は、リモートディスクトップの Terminal を使ってコマンドで操作します。その他の mpc コマンドの詳細は、先の書籍に記入(WEB上にも沢山あり)されていますので、ご参照ください。
注意!:文字コードは UTF-8 で保存しなければラズパイで動かす時にエラーとなります。
      ラズパイ側のテキストファイルは UTF-8 でなければなりません。


【 4 】起動スクリプトの制作
ラズパイに電源が入ると自動的に起動されるファイル(start_radio_shutdown.py)を作ります。下に、そのリストを載せます。

リスト3-start_radio_shutdown.py


上のリストの 全ての範囲をドラッグして選択します、その状態で右クリックしてコピーします。それをエディタに貼り付けて、「名前を付けて保存」で名前を start_radio_shutdown.py とし、 /home/pi/radio(書籍では Radio) に保存してください。私は、ディレクトリ名を小文字スタートにしていますが、統一すれば良いだけです。
 なお、コードを見ていただければ分かると思いますが、リモートデスクトップを使わなくてもシャットダウンできるように、GPIO番号17(コネクタ番号11)を 3.3V(コネクタ番号1)に2〜3秒接続するとシャットダウンに入ります (注意:GPIO番号17の隣は GNDですので 3.3Vをショートさせないようにしてください)。


【 5 】自動起動の設定をする
下記の文を実行し、nano エディタで rc.local ファイルを開いてください。

sudo nano /etc/rc.local
開いたファイルの最後に、次の文を記入してください(ホルダ名が radioに成っていることに注意、Radioにしているなら変更)。

python /home/pi/radio/start_radio_shutdown.py &

これで、インターネットラジオが自動起動されます。start_radio_shutdown.py の中でOSが完全に立ち上がるのを待つタイマーを入れていますので、ラジオの音が出るまでかなり待たされます(1分ほど)。

次に、定期的にコマンドやプログラムを実行させるファイルを編集します。下記のコマンドを Terminal から実行します。
crontab -e

エディタが立ち上がるので、このファイルの最後に、下記の文を追記してください。
00 0-23/3 * * * mpc play 27

これは、連続で稼働させていると、たまに再生が止まったり、飛々再生になっている時があり、そのための対応です。その状態になっている時にリモートディスクトップを起動して再度、mpc play 27 を実行すると、通常の再生に復活しますので、この対策を追加しました。追記した処理の内容は、3時間ごとに mpc play 27 を実行するようにするものです。一瞬、音が途切れますが、それほど違和感なく使えています。たまに再生が異常になる理由は分かりませんが、たぶん、環境が違えば(別のラズパイZeroなど)、この処理は不要になるかもしれません。

局リスト:27番の局は、連続で「癒やし系」の音楽を流し続けています。もし、他の局がよろしければ、リモートデスクトップを接続してターミナルから mpc play XX で変更してください。XX は、私の局リストの場合 1〜30です。このコマンドで気に入った局が見つかりましたら、その局を通常の再生の局にするために、 start_radio_shutdown.py の中の局指定の mpc play 27 や上記の crontabファイルも変更してください。音量も変更できますので、書籍を参照 (WEB上にも情報はあります) し、コマンドを確認してください。

もちろん、「赤外線リモコン付きインターネットラジオ」のようにリモコンも付けられますし、GPIOを使ってのスイッチでのコントロールもできますが、ただ今回は、連続で音楽を流し続けるのが目的でしたので、一切を省略して簡素な構成にしました。また追加として、長時間使っていると、ハングアップすることがあるので、
こちらを参照して、ウォッチドッグタイマーを設定しました。

追記
 上記のウォッチドッグタイマーの設定をしていたのですがハングアップしました。まったく音が出なくなっていたので「リモートデスクトップ」の接続を試みましたが、これも接続できませんし、ping も通りません。それでも電源を入れ直しましたら問題なく動作を再開しました。ラズベリーパイが立ち上がり、ラジオが再生された時に、再確認のため、もう一度フォークボム(
:(){ :|:& };:)を撃つとキチンと再起動します。そういうことでしたので、遠隔地ではないのですが、このインターネットラジオにも、下記のリンクの「ラズパイのハードウェアWDT基板」を取り付けました。

Reported by TokioYamada@ADK
汎用製品通販のページへ        ラズパイのハードウェアWDTの製作へ         USB-IOのページへ