Pine Tree'S electrical page

ゆくかわのながれはたえない

aitendo 3.5 inch LCD (waveshare)とIrberryDACもしくはSabreBerry+ をRaspberry pi Bで両立させる (インターネットラジオ)

English (Machine translation)

0.イントロ ダクション

 aitendo 3.5 inch LCDIRberryDACもしくはSabreBerry+Raspberry pi Bで両立させることができました。何故こんなことをやろうと思ったかというと、Volumioとかはよくできたソフトなのですが、使うにはパソコンやスマートフォンが必要で、これが意外とめんどくさい。曲や局を変えたいだけなのにいちいちパソコンやアプリケーションを立ち上げなければならない。パソコンをつけっぱなしにすればよいが、それでは電気代が嵩む、こんなところです。単に私が面倒くさがりなだけですね^_^; 

 尚、Raspberry pi のタイプごとに使用するimageや設定方法が異なりますのでご注意ください。

 動画の音が悪いのは撮影したスマホのせいです(^^;。生ではちゃんとハイレゾの音がでてますw。タッチパネルも全く問題なく動作してますので、Raspberry pi の応用範囲がグッと広がるのではないかと思います。以下、かなりざっとですが、今回辿った手順を備忘録の代わりにメモしておきます。

 

1.ハードウェアの設定

 

 Raspberry pi Bでは、I2Sの信号線が全てP5ピンヘッダから出ていますし、LCDのPINソケットは背が高いので、LCDを取付けても隙間からうまく配線を引き出すことができます。Raspberry pi 2 や B+の場合、SabreBerry+を使う場合のピン配置は、こちらを参照してください。

 基盤にLCDを取付けた状態で、基板面からLCDまでの高さが十分にとれずにLCDが浮いてしまうかもしれません。やり方はいろいろありますが、例えば、基板の裏面側のピンの端子からハンダづけで配線を引き出してもよいでしょう。Raspberry pi 2 や A+ B+の場合はこの方法でしょうか。Raspberry pi Bが新品であればP5のピンヘッダを基板の裏面側に立ててLCDとの干渉を避けるという作戦もあります。少し強引ですが、秋月電子通商で売っている安価なリボンケーブルを使うという手もあります。但しリボンケーブルのコネクタは10ピンなので2ピン余ります。私は100均で買った筐体との関係でリボンケーブルを用いる方法を選択しました。LCDを基板に直付けせず、筐体にスペースがあるのであればこういう選択肢もあります。

 電源5VはP5ピンヘッダから取り出してIrberryDAC に供給します(もちろんIrberryDAC の外部電源端子から供給してもOKです)。上の動画ではRaspberry pi Bのはんだ面の5VPINからIrberryDAC用の電源を引き出しています。

 LCD側のPINの仕様はこちらを参考にしました。PIN番号:3, 5, 7, 8, 10, 12, 13, 15, 16は未使用です。特にBITCLOCK(PCM_CLK)と当たる12PINが未使用なのでRaspberry pi 2やA+、B+とかでも大丈夫です。上のビデオではRaspberry pi 2を使っています。Adafruitの2.8inch piTFTもピン配置を見る限りいけそうですね。 

f:id:chibinari1965:20150902233657j:plain

f:id:chibinari1965:20150902233108j:plain

2.ソフトウェアの設定

 2-1.Raspberry PI 2 , B+ ,A+, B共通

まず、こことかここに記載されているリンク先からイメージファイルをダウンロードし、これを書き込んだSDカードを作成します。

続いて、このページの手順に従い、Raspbianの起動時にIRberryDACのモジュールが組み込まれるように設定します。HyfiberryDacのモジュールですが問題ありません。具体的にはこんな感じです。

/etc/modulesを開き、snd_bcm2835の先頭に#を付ける(コメントアウトする)。
/boot/config.txtを開き、dtoverlay=hifiberry-dacを追記する。

※尚、残念ながらこのモジュールを組み込むとXWindowの動作が不安定になりました(DACの動作には問題ありません)。どうもLCDのドライバが怪しいです。あと、ファームウェアのアップデート(rpi-update)を行うと音が鳴らなくなってしまいました。とにかくハマりどころ満載なので、そういうのが好きな方以外は、なんでもかんでも機能させようと、あまり欲張り過ぎないほうが無難です^^; 今後のアップデートを待ちましょうw 

※↑ waveshareのWIkiにアップされているイメージを使い、sudo apt-get update したところ解決しました。hifiberry-dacを組み込んだRaspberry Pi2でもXWindowは正常に動作しています(2015.9.18)。

/etc/modulesのsnd_bcm2835の記述をコメントアウトしないようにするとうまくいくようです。HifiberryDacのページではsnd_bcm2835の記述をコメントアウトするように指示していますが、コメントアウトしなくても今のところ問題なく動作しています(2015.9.28)。

 続いて、/etc/asound.confを作成して以下を書き込みます。

pcm.!default {

type hw card 0
}
ctl.!default {
type hw card 0
}

続いて、sudo reboot で再起動。

最後にドライバがちゃんと組み込まれていることをaplay -lで確認します。

これでRaspberry pi からIRberryDACにI2S信号が出力されるようになります。

 2-2.Raspberry PI B+ ,A+, B

Raspberry PI Bでamazonに掲載されているこちらのimageを試したところ、XWindowが正常に動作しました。尚、ダウンロードの際に画面にエラーがでますが、気にせず突き進んで下さい)。IRberryDACからもちゃんとハイレゾの音が出ています。モジュールの組み込みは上の方法ではなく、こちらに従って行います。この方法でセットアップした場合、コントロールパネルを使用する際、タッチパネルの操作がおかしくなりますので、次のコマンドでキャリブレーションを行ってください(下記のコマンドは連続する一文です)。キャリブレーションの詳細はこちらに詳しく記載されています。

sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate

今年の3月にRaspberry pi 2を買ってから、旧いBの使い道に迷ってましたが、これでよい利用方法が見つかりました(2015.9.8追記)。Raspberry pi 2は動作は早いですが、ソフトウェアの安定性はまだBのほうが上ですね。

3.Volumeコントロールの設定

 

IrberryDACに搭載されているPCM5102Aはハードウェアボリュームの機能が無いのでalsamixerが使えません。そこでSOFTVOLを動作させます。
そのためには以下のようにします。
ファイル /etc/mpd.confを開く。
sudo nano /etc/mpd.conf
この行↓の先頭の♯を外して有効にする。
mixer_type "software"
リブートする。
sudo reboot
尚、ボリュームの調節は例えば次のようにします。

mpc volume +50

mpc volume -20

mpcのコマンドを使いこなしたい場合は例えばこちらを参照してください。

尚、後述するコントロールパネルをインストールすれば、タッチ操作でボリューム調節ができるようになりますのでコマンドによる制御はあくまで動作確認用です。

4.自動ログイン設定

 

こちらの手順に従い、自動ログイン設定をしておきますと、いちいちIDとパスワードを入力しなくて済むので便利です。

 5.コントロールパネルのセットアップ

 

続いて、adafruitのサイトで紹介されているコントロールパネルをセットアップします。英語ですが、読みやすいですし、しっかり書かれていますので、私でも理解できました。具体的にはこのようにします。

6.自動起動設定

 

6-1.shのスクリプトを作成する。スクリプト名は例えばstartpanel.shとします。

#!/bin/sh
mpc play
wait
cd /home/pi/pi-radio
sudo python radioplayer.py

6-2./etc/rc.localを次のように編集します。exit 0 の直前に記述します。

sudo nano /etc/rc.local

 

mpc clear
cd /var/lib/mpd/playlists/
mpc load radio.m3u
cd /home/pi/pi-radio
sh startpanel.sh
wait

尚、radio.m3uファイルは前の記事を参考にして下さい。

 

7. 無線LAN自動接続設定

 

こちらを参考にして設定します。

/etc/wpa_supplicant/wpa_supplicant.conf

/etc/network/interfaces

を設定します。/etc/wpa_supplicant/wpa_supplicant.confの一例です。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="########"
psk="########"
proto=WPA
key_mgmt=WPA-PSK
pairwise=TKIP
auth_alg=OPEN
}

ちなみに、eth0は有線LAN、wlan0やwlan1は無線LANを示してます。無線のみで接続する場合、eth0の行はコメントアウトしたほうが安定する場合があります。/etc/network/interfacesの一例です。

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
#iface wlan0 inet manual
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#auto wlan1
#allow-hotplug wlan1
#iface wlan1 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

 以上でセットアップ完了です。うまくできていればリブート後、コントロールパネルが開きます。

 

8.ネット接続時の問題


 Raspberry pi のネット接続機能の立上りのタイミングによってIRberryDACがうまく起動しないことがあります。5.自動起動設定のスクリプトにwaitを入れているのはそのためです。sleepを設定してもよいかもしれません。WiFI接続がうまくいかない時はWiFiドングルの品質が原因であることも多いです。私が試したドングルの中ではこちらが最も安定しました。

 

9.ソフトウェアキーボードの登録

 

 X-Windowがうまく起動している場合はソフトウェアキーボードをスタートパネルに登録しておくと便利です。具体的にはmatchbox-keyboardというソフトウェアをダウンロード、コンパイル、インストール、これをスタートパネルに登録します。設定はこちらこちら参照してください。以下のような起動スクリプトを作成します。

sudo nano /usr/bin/toggle-matchbox-keyboard.sh

#!/bin/bash
#This script toggle the virtual keyboard

PID=`pidof matchbox-keyboard`
if [ ! -e $PID ]; then
killall matchbox-keyboard
else
matchbox-keyboard -s 50 extended &
fi

 これに忘れずに実行権限を設定します。

sudo chmod +x /usr/bin/toggle-matchbox-keyboard.sh

デスクトップ定義ファイルを設定します。

sudo nano /usr/local/share/applications/toggle-matchbox-keyboard.desktop

[Desktop Entry]

Name=Toggle Matchbox Keyboard
Comment=Toggle Matchbox Keyboard
Exec=toggle-matchbox-keyboard.sh
Type=Application
Icon=matchbox-keyboard.png
Categories=Panel;Utility;MB
X-MB-INPUT-MECHANSIM=True

以上で登録完了です。

 

10.スタートパネルへのradio-playerアイコン登録

 

X-Windowがうまく起動している場合、次のようにファイルを編集することで、スタートパネルのアクセサリにradio-playerのアイコンを登録することができます。これでタッチパネル操作でいつでもradio-playerを起動させることができるようになります。この辺を参考にしてみてください。

su pi

sudo nano /usr/local/share/applications/pi-radio.desktop

[Desktop Entry]
Name=Toggle pi-radio
Comment=Toggle pi-radio
Exec=/home/pi/pi-radio/startpanel.sh
Type=Application
Icon=matchbox-keyboard.png
Categories=Panel;Utility;MB
X-MB-INPUT-MECHANSIM=True

尚、アイコンはお好みで変更してください。アイコンの画像は次のフォルダに保存されています。

/usr/share/pixmaps 

続いて、忘れずにstartpanel.shに実行権限を設定します。

sudo chmod +x /home/pi/pi-radio/startpanel.sh  

 

11.デスクトップへのアイコン(ショートカット)の登録

 

デスクトップにradio-playerパネルのアイコンを置きたい場合は 10.で作ったファイルを以下のようにしてコピーするだけです。

sudo cp /usr/local/share/applications/pi-radio.desktop /home/pi/Desktop

デフォルトでインストールされているアイコンのファイルは次のディレクトリに格納されていますので、上記と同じように/home/pi/Desktopにコピーすればデスクトップにアイコンを作成することができます。

/usr/share/applications

例えば

sudo cp /usr/share/applications/lxterminal.desktop /home/pi/Desktop

とするとデスクトップにLXDEターミナルのアイコンが作成されます。

  

12.今後の展開

 

  タッチパネルLCDとI2Sが両立したことで、色々と応用が効きそうです。先日の時計機能を組み合わせても面白いかもしれません。まずはpythonをしっかり勉強したいと思います。例えば時計のHPからshスクリプトを実行してプレーヤ操作画面を表示させるとか。例えばこのページなどが参考になりそう。

 今回はIrberryDACを使いましたが、I2S入力のハイレゾDACであれば他のDACでも同じことができるはずです。例えば、こういうのとかこういうのとか。 

 ピンの接続図ぐらいは載せておいたほうがよさそうですね。時間のあるときにやります。ピン配置

 

 13.改善予定

 

・MPCRADIOのパネルで最後の局までめくった際に先頭に戻るようにする。Webベースでパネルを作りなおしても面白いかも。そうすればマウスポインタも動かせる。

・パネルから時計、時計からパネルとダイレクトに表示切り替えができるようにしたい。これもWebベースで実現か。

・時計のWebページに更新ボタンを設ける。 

 

<注意!>以上の工作ではAC電源を扱いますので、感電や火災等のリスクが常に伴います。本稿の内容を再現される方は、ある程度、電子工作について十分な経験と知識がある方を想定しています。本稿を再現されて事故等が発生しても当方は一切、責任を負いませんので、あくまで自己責任にてお願い致します。