更新日:2021/7/10
M E N U
前書き
「スマホレスで音楽再生したい。」
ここ最近、スマホのミュージックプレイヤーで m3u8 ファイルをインポート出来ると知ってからというもの、あれやこれやと音楽環境が整いつつあるようになってきた。
初めはスマホ (Xperia ZL2) に AUNE audio BU1 を繋いで音楽を楽しんでいたが、スマホのバッテリー管理がなかなかに面倒臭いので据え置きのプレイヤーが無いかと探していると、ラズベリーパイをデジタルトランスポーター代わりに出来ると知って、工作も楽しそうだしいっちょやってみるかと一念発起。
前提条件
まずは「ラズパイで何でも出来るなら勉強がてらいろいろ盛り込んでみよう」。
DAC は BU1 があるので純粋にトランスポート機能さえあれば良い。
しかしプレイヤー側は割と何でも出来ると聞いているので、どうせなら GPIO 端子を使って色々やってみたい。
そこで、以下のような機能を持たせてみることにした。
- LCDディスプレイ表示の実装
- 再生停止ボタンの実装
- LEDステータスランプの実装
- 電源ボタンの実装
早送り・巻き戻しはそれほど頻繁に使わないのでブラウザもしくはスマホアプリのコントローラーで制御すれば良い。
音量は DAC・ヘッドホンアンプ側で変更するため不要。
準備したもの
色々準備した。まず基本的には以下のハードウェアを用意。
- ラズベリーパイ 3B以上
今回は値段の差もあって 4B を選んでみたがこれがちょっと失敗。
- microSD カード
Volumio は 4GB 以上推奨。
- 5V/3A USB 電源
音楽再生をするだけならば実測 1A 以下だったので余裕を見て 1.5A でもヨシ。
- USB メモリもしくはそれに準じるもの
音源入れておくストレージ。
- ケース
剥き出しで使うのはやっぱり危ない。
他に拡張機能を持たせたいなら次の部品なども必要。
注意事項として、ラズパイは出来れば 3B か 3B+ を選ぼう。
4B は高性能なのだがそれ故に CPU が爆熱で窒息ケースに収めると CPU 温度が 60度にも達する。4B は 85度でサーマルスロットリングが働くので若干の余裕はあるが、Volumio を動かす程度なら 4B のスペックは不要なので 3B 系にしておいたほうが無難 (音楽再生用としてよく使われているようだ)。
ZeroW (ZeroWH) でも使えないことはないが、Volumio が
かーなーり!重(遅)い!! ので覚悟しよう。
実装 - ハードウェア編
今回は機能のフル実装ということで、GPIO の配線は以下のようにした。
(ピン番号とGPIO番号は一致しないことに注意!!)
注意すべき点としては、
- ボタンは基本ピンモードが入力でプルダウンなので端子の反対側は Vcc (3.3V) へ繋ぐ。ただし電源ボタンだけはプルアップ仕様なので GND へ繋ぐ。
- ボタン類のプルアップ抵抗はラズパイ内部でプルアップ・プルダウン抵抗が入っているので不要。
- LED はピンモードを出力モードにするので端子の反対側は GND へ繋ぐ。
- LED は LED が要する電圧に沿って抵抗を入れること。3.5V/20mA ならそのまま繋げられるが 1.8V/20mA の場合は 100Ωの抵抗を入れる。
実装 - ソフトウェア編
Download:
Volumio デジタルトランスポーター制御スクリプト "wo.py"
Volumio は普通にインストールする。
追加で以下のプラグインをインストールしておく。
- Backup & Restore Data - 設定ファイルやプレイリストのバックアップ
- BPIO Buttons - ボタン制御
"BPIO Buttons" の設定は以下の通りに実施。
- Enable Play/pause : ON → GPIO Pin : 17
ssh を使うので Volumio を焼いたら一旦 microSD カードをカードリーダーから取り出しもう一度刺し直して BOOT パーティション (Windows のエクスプローラで "BOOT" となっている microSD カードのパーティション) に「SSH」という空 (0バイト) のファイルを作る。ファイルが有ることで ssh が有効になるので空で良い。また、拡張子は着けてはならないので注意。
ソフトウェア面ではこれらのボタンやLEDを Python と sh スクリプトで制御することにした。
ssh ログイン時のユーザー名は "volumio"、パスワードは "volumio" で同じとなっている。
% ssh volumio@xxx.xxx.xxx.xxx
※ xxx.xxx.xxx.xxx は Volumio の IP アドレス
このパスワード、よく「ssh を使う場合は変更しましょう」と説明されているサイトが多いが、
これを変更すると Volumio がファイル操作を行えなくなるので変更してはならない。目立ったところではプラグインの導入に失敗したりメディアの取り外しが出来なくなる。
セキュリティ的には設定が終わったら ssh を無効化 (BOOT パーティションの SSH ファイルを削除するだけ) すれば良い。
- ucb ディレクトリはディレクトリごと /usr/local/ 配下にコピー。パーミッションは 755 としておく。
- systemd ディレクトリは中のファイルを /etc/systemd/system/ にコピー後、以下のコマンドでインストールする。
% cd /etc/systemd/system/
% sudo sh systemctl-reload.sh
- linkupwait.conf を必要に応じて変更する。
- wo.py の以下の部分を必要に応じて変更する。
先頭の python のパス
I2C_ADDR のアドレス (普通はこのまま。i2cdetect -y 1 で調べてください)
TNUM を必要に応じて変更
- /boot/config.txt に以下の設定を入れておく。
dtoverlay=act-led,gpio=8
python のパッケージもインストールする必要がある。
% sudo apt-get -y install python-smbus python-netifaces python-psutil python-RPi.GPIO python-mpd
LED ランプは以下のように。
- 赤:オンライン失敗警告・シャットダウン開始
- 青:init 中
- 緑:オンライン (NIC に IP アドレスが割り振られてネットワークに繋がってるはずの状態)
- 赤2 (GPIO.8):アクセスランプ
完成
Q&A
▼wo.py 関連
- Q. LCD が文字化けする
-
マレに文字化けします。モード選択を触れば表示が都度リセットされるので元に戻ります。
- Q. モード切替時に何度も押すのが面倒臭い
-
押しっぱなしで変わります。
- Q. 電源ボタンを触るとすぐにシャットダウンするから怖い
-
仕様です。
- Q. 電源入ったかどうかわからん
-
init で LED をオンにしてるので青ランプが光るのが結構遅いです。
15秒くらい経ってアクセスランプが明滅しなければ電源が入ってないので電源ボタンを押し直してください。
- Q. シャットダウン後すぐに電源抜いていい?
-
出来れば 5秒数えてからにしてください。
▼Volumio 固有
- Q. Spotify プラグインで停止は出来るが再生が出来ない。
-
プラグインの仕様です。
- Q. Volumio でメディアの取り外しが出来ない。
-
volumio ユーザーのパスワードを変更したら操作が効きません。Volumio の焼き直しから実施してください。
# どうもパスワードを元に戻しただけではダメっぽかったので。
- Q. プラグインの導入・削除が出来ない。
-
同上。
- Q. 再生時、曲の始まりと終わりで一瞬音が大きくなる。
-
「プレイバックオプション」の DSD の設定項目にある「音量の正規化」が DSD にも影響するのでこれをオフにしてください。
- Q. USB DAC が「オーディオ出力」の選択肢に出てこない。
-
機器をオンにしてください。OS に認識されていないと選択肢に出てきません。
- Q. 「音量オプション」で "Mixer Type" がソフトウェア以外選べなくなった。
-
なぜか Software を一度選んでしまうと二度と戻らないようです。Volumio の焼き直しから実施してください。
- Q. 初期設定時に Volumio にアクセスできない (ZeroW)。
-
Volumio が AP モードで動いてるので WiFi で Volumio の AP を探してください。AP のパスワードは "volumio2" です。
接続出来たら自宅の WiFi に繋ぐような設定をしてください。
- Q. USB に格納されているプレイリストの曲が再生できなくなった。
-
正規の方法でシャットダウンしなかった場合 USB のマウントポイントが変わっている可能性が有ります。
USB メモリを外して Volumio を起動してから ssh でログインし、/media/ に Music や Music_ などディレクトリが沢山出来ている場合は全て削除してください。
% sudo rmdir /media/Music*
削除したら一旦シャットダウンし、USB メモリを刺して起動するとプレイリストの曲を再生できるはずです。
- Q. 左の列の「アルバム」とか「アーティスト」とかいらないんだけど…。
-
「設定」→「Source」→「Source Visibility」で表示する項目を選べます。
- Q. 音楽ライブラリで並び順がマレにおかしいものがある。
-
仕様っぽい。
- Q. 「音楽ライブラリ」の "INTERNAL" ってなんですか?
-
Volumio が入っている microSD カードの空きの部分です。実は Volumio は裏で Samba が動いているので Windows のエクスプローラでアクセスできたりする。
ワークグループが同じなら「\\VOLUMIO」、これでダメなら「\\x.x.x.x」(x.x.x.x は Volumio の IP アドレス) でアクセス可能で、書き込みも出来たりするのでここに音源を置いても良い。
- Q. Samba が動いているならば外部 USB メモリも刺せば書き込めませんか?
-
デフォでは書き込めない (リードオンリー) が /etc/samba/smb.conf を適切に書き換えれば書き込み可能になります。
検討中
- 電源ボタン長押しでのシャットダウン
現在は LCD の文字化けが発生するので未実装。
- 電源投入時の LED ステータスランプ
現在は init が走り出してしばらくしてから点灯するが、gpio-poweroff を使えば電源投入とほぼ同時に点灯させられるもののシャットダウン後に再度起動が出来なくなるので未実装。
> Info: Drives a GPIO high or low on poweroff (including halt). Enabling this overlay will prevent the ability to boot by driving GPIO3 low.