volumioに操作ボタンをつける
年を越した連載記事になってしまいました。
最もローコストなMPD+AirPlayシステムの構築方法(1)
最もローコストなMPD+AirPlayシステムの構築方法(2) の続きです。
本日は、Raspberry Pi のGPIOを使って、操作ボタンをつけてみようと思います。
GPIOとはGeneral Purpose Input Output の略で、簡単に言うとマイコンの入出力ピンのこと。 入力として使ったり出力として使ったり、シリアル通信やPWMに使うことができるピンもあります。 機能を切り替えて使えるポートのことです。
volumioはとても便利で高音質ですが、操作はplay / stop ですら、ネットワーク上から行なわなければなりません。 これはMPD全般に言えることです。 しかし、多くのメーカー製のネットワークプレーヤーでは操作ボタンが付いています。 画面も付いています。
画面までつけるのはちょっと骨の折れる作業ですので、とりあえずは操作ボタンを用意しましょう。
Raspberry PiのI/Oはこちらにまとまっています。
そして、そのI/Oを操作するライブラリも各種用意されています。
操作する言語は、C、C++、シェルスクリプトなどなど色々な方法があるのですが、どうもRaspberry PiでのI/O操作はPythonが多いようです。 「パイソン」と呼びます。
Pythonはスクリプト言語ですので、Perl cgi やjavaスクリプトのように、動作させながらちょこちょこと編集していけるので割とお気楽です。 C言語のようにコンパイルする必要がありません。
とは言っても、私はこの言語を使ったことがありませんでした。 ということで、google検索にて参考にできる優良ソースを探します。 Raspberry Pi はユーザー数がとても多いので情報も沢山あります。 ありすぎて、どれを参考にするか迷うほど。
目をつけたのは、これです。
ただし、そのまま使用しようとしても、volumioとの相性なのか自動起動に登録したときに、うまく動作しませんでした。 ということで少し改変させて頂いています。
pythonはスクリプト言語ということでCPU負荷が気になる方も多いと思います。 実際に動作させた状態でスレッドの負荷をみて見ると、0.3% 0.0%を繰り返していて、ほぼ問題のない負荷でした。 メモリ使用量は1.1%と意外と多いです。 pythonが大きなライブラリを持っている為でしょうか。
■GPIOライブラリの登録
まずは、sshでRaspberry Pi に接続します。
sudo apt-get update
sudo apt-get -y install python-rpi.gpio python-daemon
python-rpi.gpioがpythonスクリプトからGPIOを使うためのライブラリです。 一緒にpython-daemonもインストールします。 後で使うことになります。
少し時間がかかりますが、無事にインストールが終わったら次へ進みます。
■操作ボタンのスクリプトを作る
参考にした元ソースを改変したものがこちら。 -> mpd_ctrl2.py
これをRaspberry Pi に転送します。
cd /home/volumio
wget nw-electric.way-nifty.com/blog/files/mpd_ctrl2.py
次にパーミッションを変更して実行できるようにします。
chmod +x /home/volumio/mpd_ctrl2.py
上記スクリプトは「mpc」というMPDのクライアントソフトへ命令を出しています。 mpcはvolumioに標準で入っていて、コマンドラインからMPDを簡単に操作できるようになっています。 便利ですね。 ちょっとだけ例をあげますと、
mpc play :再生開始
mpc next :次の曲へ
mpc volume 90 :ボリュームを90%に設定
という具合です。
■操作ボタンを作る
P1 headerにボタンを接続します。 この写真は、初期テスト中でボタンは2つしか付いていません。
こちらがハードウェアの回路図です。 プルアップ抵抗は3.3Vへ接続しておきます。
GPIOのプルアップ・レジスタをイネーブルして内蔵プルアップを使えば 3.3Vへのプルアップ抵抗は必要なくなります。
その方法は、いたって簡単。
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
とするだけです。 詳しくは上記ソースコードをご覧下さい。
■スクリプトの自動実行
実行は、
sudo /home/volumio/mpd_ctrl2.py
とするだけです。
これを、起動時に自動で実行するには、rc.localに登録しておきます。 先日も書きましたが、volumioは /etc/rc.local を起動時に上書きしますので下記のようにします。
/var/www/_OS_SETTINGS/etc/rc.local に下記の1行を加える。
/usr/bin/python /home/volumio/mpd_ctrl2.py & /dev/null 2>&1
実は、参考にしたスクリプトのままですと、自動実行させると、何故かすぐに落ちてしまう現象があって悩みました。 mpd_ctrl2.py はデーモン化して実行するようにしています。 理由はよく分かりませんが、これでうまくいきました。
以上で完了です。
Raspberry Pi が起動したら、Play/Pauseボタンを押してみてください。 PlayListに登録された楽曲が再生できるはずです。 楽曲の登録やPlayList編集、その他の設定はWEB-UIから行なって下さい。
赤外線リモコンに対応させるというのアリでしょうね。 よりいっそうメーカー製のネットワークプレーヤーに近づくような気がします。
現在、一番上の写真のように Wave IOというUSB-DDC基板を接続しています。
このDDCはUSB Audio class 2.0に対応していまして、アシンクロナス転送ができます。 つまり、Wave IO上のクロックがマスタークロックとして動作します。 そしてI2S接続でDACへデータを転送すると、マスタークロックの精度やジッターは、Wave IO基板上のクリスタルに依存するようになります。 スタンドアロン volumio と合わせると、
Low-Jitter
Bit Perfect
no PC
no NAS
no DISC
no network ( LAN / Wi-Fi )
という環境が割と簡単に実現できます。
まあ、私自身、まだI2S接続のDACを組み上げていないので、そこまでの環境ではないです。 こういうシステムもあるのだな、と皆様に知っていただきたいというだけです。
ブログ村ランキングに参加してみました
他の方の記事も興味深いものがあります。
« 最もローコストなMPD+AirPlayシステムの構築方法(2) Volumio + RaspberryPi | トップページ | 頒布再開いたします »
「PCオーディオ」カテゴリの記事
- RaspberryPi Pico USB-DDC化 I2SとMSBファースト後詰め出力対応(2022.03.21)
- RaspberryPi Pico USB-DDC化? I2S出力調査(2022.03.20)
- efuさんのWaveSpectraが公開停止していた(2022.03.09)
- ラズパイをUSB-DACとしてスマホに認識させる方法 gadget mode(USB Audio Class 2.0)(2020.10.16)
- PCに組み込むヘッドホンアンプ Sound RABBIT & 900万PVありがとう企画(2020.10.10)
「Raspberry Pi」カテゴリの記事
- 来年からRapberryPiの供給が改善されるらしい。(2022.12.17)
- ラズパイオーディオお手軽インストーラー[MUTE](2022.07.08)
- 2022年版のRaspberry Pi OSではユーザー、パスワード設定が必須に(2022.05.05)
- あのオーディオデザインさんがラズパイオーディオを発売(2022.04.18)
- Volumio/MoodAudioに秋月電子のI2CタイプOLEDを接続して曲名などを表示するPython3版(2022.03.26)
コメント
« 最もローコストなMPD+AirPlayシステムの構築方法(2) Volumio + RaspberryPi | トップページ | 頒布再開いたします »
超えるハードルが何個?いくつもの山もあるので、
先が遠いですが、なかなか面白そうな物ですね。
基本中の基本からしてわかっていないのですが、
キーボードはUSB接続でしょうね。たぶん。
そうでなければ、呪文(コマンドと言うそうな)を打てませんし。
投稿: まるは | 2014年1月 6日 (月) 22時19分
まるはさん
コンポジットビデオ、もしくはHDMI接続して画面をだせば、USBキーボードを接続してコマンドを入力することもできると思います。
私は、sshという通信を使って接続しています。 telnetの暗号化版って感じです。
パソコンが1台あれば、RaspberryPiにはLANを接続してコマンドを打つのでUSBキーボード&画面はいりません。
RaspberryPiって、教育目的で中学生くらいからを対象にしているらしいのです。 それにしては敷居が高いですよね。 イギリスの中学生は、この程度の事はみな出来るって事なのでしょうか?
日本でも小学校からコンピューターの授業があるとか、我々の時代では考えもしない事になっているのかもしれません。
ところで、RaspberryPi と MUSES01 オペアンプが同じような価格っていうのも感慨深いものがありますね。
買うならどっちだ!? と無意味に問いかけてみます。
投稿: たかじん | 2014年1月 7日 (火) 18時35分
>パソコンが1台あれば、RaspberryPiにはLANを接続してコマンドを打つのでUSBキーボード&画面はいりません。
なるほど。肝心なことが欠落していました。
1台に1個のモニターというのが頭にありました。
>RaspberryPiって、教育目的で中学生くらいからを対象にしているらしいのです。
となると私は小学生レベルです。
投稿: まるは | 2014年1月11日 (土) 10時26分
まるはさん
いやいや、今の小学生、レベル高いっすよ。
会社の人の子供が、4歳で親のスマホでメールが打てるようになって、5歳現在、iPad miniの設定やらゲームやら、親より詳しいって。。。
あれ? 幼稚園か? 5歳って。
ちなみにメニュー画面に出てくるような漢字は、ほぼ読めるらしい。
さすがにUNIXコマンドとかはわからないだろうけど、教えたら出来ちゃいそうで恐い。
投稿: たかじん | 2014年1月11日 (土) 11時37分
たまたま通りかかった古い記事に失礼します。たかじんさんが4歳でメール打てる子について書いていたのでコメントさせて頂きました。
私は小さい頃はベビーカーに乗りながら普通の鉄道雑誌を普通に多分理解して読んでいたそうですw なので駅とかで字とかが読めてたとか言ってたと思います。
親が寝る前に本を読んでくれた時も手を抜いて飛ばしたらここ飛ばしたと指摘していたそうです。
携帯は流石にまだツーカーホン時代だったので大したことが出来るわけではないですが、家にはセガがIBMと共同開発したメガドライブ搭載PCのテラドライブ(OSはIBM DOS)が昔あったっぽい感じなのでそれがもし残っててその小さい頃に触ったしていたら今以上に色々PCでやってたかもしれないですね。
今でもDOSは触れますし、ubuntuもデュアルブートでPCに入れたりwindows10を早速で試したりPCを自作やノートPCの分解したり、スマホを弄ったり(root化やカスタムROM焼等)と色々やってはいますがw
長文失礼しました。
投稿: ugambow | 2015年6月 1日 (月) 22時12分
ugambow さん
機会さえ与えてあげれば子供が学んでいく勢いはとめられないですね。
投稿: たかじん | 2015年6月 2日 (火) 22時14分