Raspberry Pi ZeroにRadiko Playerを導入する

Pi ZeroにRadiko Playerを導入してみました。

ZeroでRadikoを聴く訳ではないのですがほかのテスト目的でインストールしたところ少し気がついた点があったので軽く纏めてみました。

OS 2017-04-10-raspbian-jessie-lite

カード作成

dd if=2017-04-10-raspbian-jessie-lite.img of=/dev/sda bs=1M

wiringPiインストール
内蔵alsaで音を出すには前回記事を参照
jessie-liteにはwiringPiがインストールされてないのでインストールします。

# apt install libi2c-dev git-core
# cd
# git clone git://git.drogon.net/wiringPi
# cd wiringPi
# ./build

mplayer関連
radikoスクリプトは適当に調達

# apt install mplayer swftools libxml2-utils libav-tools rtmpdump

lighttpd

# apt install lighttpd php5-cgi
# lighty-enable-mod cgi
# lighty-enable-mod userdir
# gpasswd -a www-data audio

/etc/lighttpd/conf-available/10-cgi.conf編集
下記の部分コメントを外してphp部を追記

cgi.assign      = (
        ".pl"  => "/usr/bin/perl",
        ".py"  => "/usr/bin/python",
        ".php" => "/usr/bin/php-cgi",
)

radikoスクリプトをブラウザから実行すると停止する
新規にインストールするといつもこの現象が発生します。
適当に触っているといつの間にか正常に再生できてしまうのですが今回は少し真面目に挙動を観察してみました。
コマンドラインからは連続再生できる
らじるスクリプトは正常に再生できる
インストール直後は正常に再生できる
再起動後は1分足らずで停止する

ここでroot権限でコマンドラインからradikoスクリプトを実行
正常に再生する
ブラウザからも正常に再生する
再起動後も正常に再生する

/var/tmpにできるauthkey.pngとplayer.swfも最初に実行したユーザーのままです。
カード2枚で試しましたがほぼ同じ結果を得ています。という訳でなにが原因なのかはわかりませんでした。

ボリューム値を取得する
amixer -R からボリューム値を取得していますがカードが変わると当然取得する箇所も変更になります。
sampleの//print_r($vol_a);の部分をコメントアウトすると画面に表示します。
取得している箇所は2箇所あります。(先頭附近と下記箇所)

// goto vol
        vol:
            $vol = shell_exec("amixer -c 0 -R 2>&1");
            $vol_a = explode(' ',$vol,30);
            $vol_s = $vol_a[24];
print_r($vol_a);
            $vol_x = substr($vol_s,1,3);


空白ごとに切り出しているのでamixer -Rから大体の切り出す数と目的のナンバーを指定します。

ブラウザのキャッシュが効いているのでクリアするかブラウザを再起動すると見えてくると思います。

スマホ対応デザインにしてみた

小さいボタンを使用したのでスマホでもこんな感じに見えると思います。

lighttpdからradiko.shを実行するとmplayerの実行ログはsyslogに記録されていました。
ZeroではこのログがSDへのアクセスになりノイズとなってしまいます。
そのためmplayerの実行ログはすべて捨てるようにしました。
radiko.sh -p FMT /dev/null & → 1>/dev/null 2>/dev/null &

参考 index.php_zero_radiko

Raspberry Pi Zero PWMオーディオを試してみる

Pi Zeroにはオーディオジャックがありません。

GPIO端子を利用して内装音源から音を出す方法が公開されているので試してみました。

参考サイト
adafruit.com Pi Zero PWM Audio
othermod.com Raspberry Pi Zero Audio Circuit

adafruit.comではGPIO端子にPWMを割り当てるため2つの方法が紹介されています。
両方試してみましたが音を出すだけならばDTOを利用するのが簡単です。

Option 1. Use Device Tree Overlay

/boot/config.txtに追記

dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4

次にraspi-configを実行してHeadphoneに切り替えます。

# raspi-config
7 Advanced Options → A4 Audio → 1 Force 3.5mm (‘headphone’) jack

以上で再起動すると

12 ALT5
13 ALT0

準備ができました。

さすがに直にアンプに接続してみるとガーガーピーピーいいます。

まずは仮で簡単にフィルタのテストをしてみます。

フィルタの解説についてはothermod.comのページを参考にしてみました。
フィルタを組んでテストしてみると大きな問題があります。
1.音の出だしの1回目のみかなり強烈なポップノイズが発生する、またシャットダウン時にも発生。
2.マイクロSDへのアクセス時にノイズが載る。
PWM変換ノイズはある程度フィルタで除去できますがマイクロSDへのアクセス時に発生するノイズは可聴音のため完全に除去することは困難と思われます。再生音自体はまあまあそれなりにいい音がしていると思います。

シャットダウン時のポップノイズについてはothermod.comのページにあるように抵抗の入れる位置を変更することにより除去することができました。
最初のポップノイズ発生時は出力端子に+の電圧が発生、10uFのコンデンサが充電して以降は発生しません。シャットダウン(リブート)はーの電圧が発生して10uFと150Ωの抵抗の時定数でうまく相殺されるものと思います。聴感上はオリジナルの回路と比べても変わらないと思います。
以上から音楽再生用としての使用はかなり厳しいと思いますが音を出す何かの実験用にはUSBポートを消費しないことからも有用と思います。
簡単にユニバーサル基板に組んでみることにしました。


以前Pi1BでポップノイズによってPAMアンプを壊してしまった経緯があることからトランジスタを追加しています。完全に抑えることはできませんがPAMアンプを壊さない程度まで小さくすることはできます。フィルタの抵抗値は手持ちの関係から変更しています。コンデンサも聴感上あまり変わらないので10nにしています。

最初の再生時にポップノイズが発生することから起動時に1回喋らせることにしました。
スクリプトを作成します。aplay実行後もマイクロSDにアクセスがあるので30秒のsleepを入れています。
/root/pwmaudio.sh

#!/bin/bash
gpio -g mode 27 out
gpio -g write 27 1
sleep 1
aplay /usr/share/sounds/alsa/Front_Center.wav
sleep 30
gpio -g write 27 0
# chmod 755 /root/pwmaudio.sh

/etc/rc.localに追記、起動時に実行します。

fi
/root/pwmaudio.sh > /dev/null 2>&1
exit 0


実験環境
RUNピンにタクトスイッチを取り付けたのですがZEROの場合はLEDが消灯、消費電力もかなり少ないためシャットダウン後のパワースイッチとしても使えそうです。
但しUSBポートに接続している機器はやはり電力を消費していますが!


テストはradikoとaudio playerにはAudaciousをインストールして試してみました。
radikoやAudaciousは一旦稼働してしまえばマイクロSDにアクセスすることは少ないのでまあまあ使えるレベルかと思います。但しほかのアプリケーションを起動するとノイズが乗ってくるのがわかります。


マイクロSDアクセス時のノイズはボリューム(alsamixer)を0にしても発生するためアナログラインに直接飛び込んでくものと思われます。
USBポート一つのZEROにとってはマイクロSDアクセス時のノイズが無ければ充分実用になるのですが次期の改善に期待したいと思います。

raspbian-jessie 2017-04-10 (fstab)

Raspbianの新しいイメージ2017-04-10-raspbian-jessieが出ています。

今回のイメージからfstabの書式が少し変更になっています。

Raspberry Pi3にインストールしてみました。

これまでのようにカード作成時にパーテーションを変更した場合はこのままでは起動しなくなってしまいました。

参考 arch linux fstab

カード作成

# dd if=2017-04-10-raspbian-jessie.img of=/dev/sda bs=1M

/etc/fstab

proc                  /proc           proc    defaults          0       0
PARTUUID=402e4a57-01  /boot           vfat    defaults          0       2
PARTUUID=402e4a57-02  /               ext4    defaults,noatime  0       1

従来のデバイス名からPARTUUIDの指定に変更になっています。

できたカードをセットして起動するとカードの空き領域を拡張してしまいます。(普通はこのようにして使うのですが)

当サイトでは空き領域の全部を/rootに割り当てたくないためパーティションを切り直します。


/dev/sda2は8000M(8G)にリサイズ
残り全部を/dev/sda3に割り当ててみました。

ですがこのままでは起動しません。PARTUUIDが変わってしまうんですね。(rootで実行)

# blkid /dev/sda1
/dev/sda1: LABEL="boot" UUID="95E0-9AC4" TYPE="vfat" PARTUUID="45afc544-01"
# blkid /dev/sda2
/dev/sda2: UUID="b105f9a8-f450-4976-8ac8-69053f57bab4" TYPE="ext4" PARTUUID="45afc544-02"
# blkid /dev/sda3
/dev/sda3: UUID="e935f818-2bac-4ee9-9637-3db52e1ef389" TYPE="ext4" PARTUUID="45afc544-03"

/etc/fstabの編集

proc                  /proc           proc    defaults          0       0
PARTUUID=45afc544-01  /boot           vfat    defaults          0       2
PARTUUID=45afc544-02  /               ext4    defaults,noatime  0       1

もうⅠ箇所変更します。 /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=45afc544-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles


無事起動することができました。

これで今までと同様に扱うことができます。

# カード作成時の/dev/sda2(/root)はほぼ100%近く使いきっているので必ず拡張が必要です。

Raspberry Pi Zeroを試してみる(ディスクトップ環境Ⅱ)

Raspberry Pi Zeroを試してみて少し気になったところを設定してみたいと思います。

raspbian(2017-03-02-raspbian-jessie)ではロケールの設定のみで日本語が表示できます。

ですが文字を小さくしていくとやっぱり美しくないですね。

日本語環境の設定

フォントのインストール

apt install fonts-ipafont fonts-ipaexfont

日本語入力

# apt install fcitx-mozc

フォント設定
Ubuntuの設定ファイルを借用します。
65-fonts-takao-gothic.conf
65-fonts-takao-mincho.conf
65-fonts-takao-pgothic.conf
ファイル名とパーミッションを以下のようにします。

-rw-r--r-- 1 root root 1414  6月 29  2016 65-fonts-takao-gothic.conf
-rw-r--r-- 1 root root 2091  6月 29  2016 65-fonts-takao-mincho.conf
-rw-r--r-- 1 root root 1256  6月 29  2016 65-fonts-takao-pgothic.conf

/etc/fonts/conf.availに保存します。

# cp 65* /etc/fonts/conf.avail

/etc/fonts/conf.dに移動してリンクを貼ります。

# cd /etc/fonts/conf.d
# ln -s ../conf.avail/65-fonts-takao-gothic.conf
# ln -s ../conf.avail/65-fonts-takao-mincho.conf
# ln -s ../conf.avail/65-fonts-takao-pgothic.conf

設定が済んだら再起動


設定前
システムフォントには等幅フォントが使われています。
なんとなく間が抜けているというか間が開いているというか不自然に感じます。


設定後
こちらのほうが自然ですね。
画像ではわかりにくいですがアンチエイリアスもこちらのほうがきれいにかかります。
あとはアプリケーションごとにフォントサイズを変更すれば見やすくなると思います。

LibreOfficeの日本語化

# apt install libreoffice-l10n-ja


IPA Pゴシックになってますね。

PDF Viewer
デフォルトは伝統的なXpdfが採用されています。
用途によってはXpdfも強力なのですが通常のPDFを閲覧するだけの目的には使いにくいですね。

# apt install epdfview


epdfviewはUIもシンプルで軽く、印刷も可能です。
vi Likeな人は更に軽いMuPDFと使い分けるといいと思います。

スクリーンショット
コマンドラインによるスクリーンショットアプリケーションもあるのですがX上で使用するのはこれが断トツで使いやすいと思います。

# apt install gnome-screenshot


画面上をちょっと保存したい時は簡単にできます。

ディスクパーテーション
カード作成時に作成したパーテーションはこのままではrootしか扱えません。
パーテーション全体をユーザーで使用するためにはマウントした状態で(root)

# chown pi:pi a8c3c677-2451-4f34-aa5c-bddc1a7dac2f


またはrootでディレクトリを作成してそのディレクトリをやはりユーザー所有にするとよいでしょう。

ディスクトップショートカットアイコン
どうでもいいといえばそれまでなのですがディスクトップにショートカットアイコンを追加するとショートカットマークのついたアイコンが作成されます。またこのアイコンは名前の編集ができません。

ファイルマネージャを起動して/home/pi/.local/share/applicationsを選択
Main Menu Editorを起動して配置したいアプリケーションを選択
チェックを外すかプロパティを選択するとファイルマネージャにアイコンが生えてきます。


ディスクトップにドラッグするとマーク無し名前変更可能なショートカットアイコンが作成されます。

稀にファイルマネージャをクリックすると勝手にショートカットアイコンにフォーカスが移って起動してしまうことがあるかもしれません。
まあどうでもいいことなので気になる人は試してみるといいかもしれません。

Raspberry Pi Zeroを試してみる(RealVNC)

前回はZeroにディスクトップ環境を構築していろいろ試してみました。ブラウザなどPi3と比べると重く感じるものもありますが概ね良好に動作するものと思います。

raspberry pi財団が掲げる子どもたちがプログラミングを学習する環境をという意味ではPi Zeroはなかなかいい教材だと思います。(子どもたち以上におじさんたちが喜んでいる感じもしますが)

現在のraspbianはRealVNCを採用しています。今回はもうひとつのアプローチであるリモートデスクトップ接続を試してみました。
環境はVNCサーバーにPi zero クライアントはPi3

以前のVNCは挙動不審でこれまではxrdp+rdesktopを使っていました。

# apt install xrdp tightvncserver


現在でもそれなりに動くのですがコピー&ペーストができないという問題があります。(rasbian同士)
確かプロジェクトは終了していたはずなのでやむを得ません。

VNCサーバーの設定
Pi3をディスクトップ環境に戻してzeroにsshでアクセスします。
xrdpとVNCは共存できないのでraspi-configからVNC設定をします。

# raspi-config
5 Interfacing Options
P3 VNC


はい


ターミナルが開いて
インストールしたtightvncserverは削除されます。
cups関連もインストールされます。

クライアント(Pi3)の設定
当サイトのPi3は新規インストールはまだしていないのでメニューにはVNC Viewerがありません。
RealVNCのダウンロードページからRaspberry Pi用のVNC Viewerを適当なところにダウンロードします。

ダウンロードしたVNC-Viewer-6.0.2-Linux-ARM.gzを展開します。

展開するとVNC-Viewer-6.0.2-Linux-ARMができるので実行権限をつけます。

$ chmod 755 VNC-Viewer-6.0.2-Linux-ARM


VNC-Viewer-6.0.2-Linux-ARMをクリックして実行をするとVNC-Viewerが起動します。

最初の画面は必要ないので閉じて


上部にホスト名かIPアドレスを入力するとダイアログが出現

Continueをクリック


ログイン画面がでました


ログインできました。
動作もなかなかいいですね。
コピペもOKです。
youtubeの映像も動作しますが起動するまで少々時間がかかります。


終了すると記録が残ります。

次回はここをダブルクリックで起動できます。

RealVNCも商売が絡んでいるせいもあってかかなり気合が入っているようです。

次回もう少し触ってみようと思います。

Top