Volumio2をボタンで操作<シャットダウン/起動スタート/選局>(RPi.GPIOでボタン制御)

Volumio2をスマホなしで使えるか?



Volumio2を使い始めてしばらくすると、自分なりの使い方が分かってきます。
私の場合は、もっぱらお気に入りのWebラジオ局を流しっぱなしにしています。
よく聞くラジオ局も大体幾つかに絞られてきました。(J-Pop、洋楽Pops、Jazzを気分次第で。)
そうなってくると、スマホでの操作しなければならない頻度はぐっと少なくなり、いっそスマホなしで済ましたくなってきました。

「零函(zero-bako)」には前面にボタンが一つ用意してあります。
これを使ってある程度の操作が出来れば、かなり使い勝手が上がります。


ボタン操作でやりたい事はこんな感じ

①起動スタート(起動後は自動でWebラジオ再生開始)
②Webラジオ局の送り(Webラジオのプレイリストを順番に切り替え)
③シャットダウン

これを一つのボタンで実現させる方法を考えます。
状態別で考えると下図のようになります。
元々「零函(zero-bako)」にはアンプ側の電源ON/OFF付きの音量調整ノブが付いていますので、それに連動してラズパイの電源がON/OFFされます。
ですので基本的に大元の電源ON/OFFはそちらになりますが、ここでやりたいのは、ラズパイ本体側でのシャットダウン/起動スタートになります。
(アンプ側もボタンでON/OFF出来れば良いのですが、それは難しいので…)

まずはボタンの配線から


なぜGPIO3かと言うと、ラズパイには元々GPIO3をGNDに落とすと起動開始すると言う仕様があるからです。
なのでプログラムを変更する必要もなく、これだけで休止中からの「起動スタート」は実現できます。

次はプログラムの変更ですが…

---------------------------------------------------------------------------------------------------------------
以下の説明について。
当方、プログラミングについてはほとんど素人です。
ネットにある関連記事を参考に、適当にプログラムのコードを弄ってます。
結果オーライで運よく上手くいっているだけの可能性が大きいです。
ですので、もし参考にされる場合は、あくまで自己責任でお願いします。
---------------------------------------------------------------------------------------------------------------


シャットダウン/起動スタートボタン(スイッチ)の実現の記事は沢山の方がアップしています。参考にさせてもらったのはここです。

ラズパイとPCをsshで接続する

Volumio2の中の特定のファイルの記述(コード)を一部変更する必要がありますので、まずは変更ファイルにsshを使ってアクセス可能にします。
手順は今までの記事にもありますので、割愛しますが、いつものようにTera Termを起動して、図のような画面が出てくればOKです。この画面でPCからVolumio2にアクセスします。



PC上でこの画面に入力したコマンド(呪文のようなもの)がWiFi経由でVolumio2内のプログラムに届き、その反応が文字で逆にこの画面に戻ってきます。
このやり取りを繰り返して修正を進めます。

先にシステム環境を整える

Volumio2のシステムには「RPi.GPIO」がインストールされていないようです。
なので、先にインストールします。
「RPi.GPIO」はGPIOをプログラムでコントロールする場合に必要なライブラリーです。
ssh画面で「sudo apt-get update」と入力して、Enterキーを押します。
かなり時間がかかりますが終了まで待ちましょう。
一番下の行が下図のような文字列になればOKです。

次に「sudo apt-get install python-rpi.gpio」と入力して、Enterキーを押します。
こちらも多少時間がかかりますが、同様に終了まで待ちましょう。

プログラムファイルを作成する

プログラムファイルは、ボタンの動作を記述したファイルです。

ssh画面で「sudo nano /home/volumio/spbutton.py」と入力して、Enterキーを押します。
新規で「spbutton.py」というファイルが/home/volumioの中に作成されます。
(最初のみ「[sudo] password for volumio:」とパスワードを聞いてきますので、「volumio」と入力して、Enterします。)



上図のメモ帳のような画面になりますので、ここに以下の文字列をコピーしてペーストします。
------------------------------------------------------------------------------------
#!/usr/bin/python
# coding:utf-8
import time
import RPi.GPIO as GPIO
import subprocess
import os

GPIO.setmode(GPIO.BCM)

#GPIO3pinを入力モードとし、pull up設定とします
GPIO.setup(3,GPIO.IN,pull_up_down=GPIO.PUD_UP)

while True:
    GPIO.wait_for_edge(3, GPIO.FALLING)
    sw_counter = 0

    while True:
        sw_status = GPIO.input(3)
        if sw_status == 0:
            sw_counter = sw_counter + 1
            if sw_counter >= 200:
                os.system("sudo shutdown -h now")
                break
        else:
            subprocess.call('volumio next', shell=True)
            break

        time.sleep(0.01)
------------------------------------------------------------------------------------

そのまま保存します。(日本語の部分が文字化けしているかもしれませんが大丈夫です。)
キーボードの「Ctrl」キーを押しながら「x」キーを押すと、保存するか聞いてきますので、「y」キーを押します。
ファイル名をspbutton.py(元のまま)にするか聞いてきますので、「Enter」キーを押して保存完了です。

簡単に動作の説明をしますと、22行目の「os.system("sudo shutdown -h now")」(=シャットダウン開始)がボタンの長押し時に、25行目の「subprocess.call('volumio next', shell=True)」(=リストの次送り)が短押し時に、それぞれ実行されます。

ちなみに、25行目の「subprocess.call('volumio next', shell=True)」の「next」のところを変更すると違う動作のボタンに変更できます。(例えば「toggle」にすれば、play/pauseボタンになります。)
変更できる機能の種類はVolumioの公式ページで確認できます。

サービスファイルを作成する

サービスファイルは、ラズパイが起動する時に先ほど作成したプログラムファイルを自動的に読み込むようにするためのファイルです。

同様にssh画面で「sudo nano /lib/systemd/system/spbutton.service」と入力して、Enterキーを押します。
同様にメモ帳画面に以下の文字列をコピーしてペーストします。
------------------------------------------------------------------------------------
[Unit]
Description=do something

[Service]
ExecStart=/usr/bin/python /home/volumio/spbutton.py

[Install]
WantedBy=multi-user.target
------------------------------------------------------------------------------------

これも同様に保存します。

それぞれのファイルを使えるようにする

ファイルは作成しただけでは動かない場合が多いです。(特に新規で作成した場合)
ssh画面でまず「sudo chmod 755 /home/volumio/spbutton.py」と入力して、Enterキーを押します。
次に同様に「sudo chmod 755 /lib/systemd/system/spbutton.service」と入力して、Enterキーを押します。
この操作は2つの新規作成のファイルにラズパイの中で使用する際の権限を付与するものです。

さらにサービスファイル「spbutton.service」は、ラズパイの起動時に紐づけされたプログラムファイルを「読み込む」か「読み込まない」かを指定できますので、「読み込む」設定に指定します。
ssh画面で「sudo systemctl enable spbutton.service」と入力して、Enterキーを押します。
(もし、「読み込まない」設定にしたい場合は、「sudo systemctl disable spbutton.service」です。)

以上でプログラムの変更は完了です。


実際の動作は?

Volumio2を再起動して動作を確認します。

①完全に起動した事を確認した後、ボタンを押すとプレイリストの再生が始まります。
さらに押すと、プレイリスト内でリストが次に送られます。
②ボタンを長押し(4~5秒)すると、シャットダウンが始まります。
③シャットダウンして完全にラズパイが休止中状態になっているのを確認した後、ボタンを押すとラズパイが起動スタートします。

とりあえずは上手く動作しているようです。
ただ、いろいろ調整した結果、長押しの時間は上手く動作するためには結構長くしないといけなくなりました。
あと、たまに長押ししようとして、短押しと判断されシャットダウンにならない事もあります。
この辺は要改善ですね。

自動で再生を開始する(プラグイン導入)

あとは起動時に自動的にWebラジオの再生を始めるようにしたいのですが、これを実現するプラグインがありました。「AutoStart」です。

「AutoStart」はプラグインメニューの「Miscellanea」タブを選択すると出てきます。
インストールしてアクティブにすればそれだけでOKです。
これでプレイリストの先頭から自動で再生を開始してくれます。
プレイリストにはよく聞くWebラジオ局を先頭にリストしておきましょう。
(Webラジオ局の場合、操作しない限り同じ局をずっと再生し続けます。)

このプラグインのメリットがもう一つ。
Volumio2は起動に時間がかかる(2分弱)ので、起動完了のタイミングが分かりにくいのですが、自動で再生が始まれば、起動完了した事がすぐ分かります。



コメント