Raspberry Pi用ラジカセ風スピーカ Pimoroni社Speaker pHATの使い方メモ

Pimoroni社(英国)はRaspberry Pi用の虹色のケースで有名なメーカーです。最近はRaspberry Pi用の拡張ボード(HAT)などを次々に開発しており、SwitchScienceや秋月電子通商でも取り扱われるようになりました。
その拡張ボードのなかから、スピーカ、DAコンバータ、スピーカ用アンプ、10個のバーLEDが実装されたラジカセ風スピーカSpeaker pHATを紹介します(部品は全て裏面に実装されている)。
写真は、Raspberry Pi Zero 本体+Pibow Zero ケース+Speaker pHATを組み合わせた時の一例です。懐かしいラジカセのような図柄と、再生音とともに変化するLEDバー表示、そして基板の背面では白色LED(バーLED兼用)が透過色のPibow Zeroケースを照らします。
音楽とともに揺れる光を想像してみると、ワクワクしませんか?
Pimoroni
なお、ハードウェアを製作するには、ピンヘッダとスピーカ端子の半田付け、スピーカのビス止め作業が必要です。また、Raspberry Pi Zero には、Micro SDカード、ACアダプタを始め、開発用の周辺機器(モニタ、キーボード、マウス、USBハブ、USB無線LANアダプタ等)が必要です。
スピーカを基板へビス止めするときは、スペーサ用のナットを使用せずに、スピーカ本体を基板へ接触させてください。Pibow ケースの天面がスピーカのマグネット部に接触するので、スペーサを入れると、その厚みで下記長IOコネクタの接触が不十分となります(ケースに入れない場合はスペーサを使っても良い。音質はスペーサなしのほうが良いが、スペーサが無いと大音量時に音が割れる)。

インストール方法と使い方

インストールを行うには以下のcurlコマンドを実行します。
test.shを実行すると簡単な音声と音楽を再生します。test.pyはLEDのテスト用です。
また、mpg321でMP3ファイルの再生が出来ます。
$ sudo apt-get install mpg321
$ cd Pimoroni/speakerphat/test
$ ./test.sh                                                  # LED+オーディオデモ(mpg321なしでも再生可能)
$ ./test.py                                                  # LEDテスト用
$ mpg321 test.mp3                                      # MP3再生デモ
$ mpg321 再生したい音楽ファイル.mp3           # 好きな曲を再生しよう。

AquesTalkで漢字交じりのテキスト読み上げ(音声再生)

次に、漢字交じりの音声を読み上げるAquesTalkのインストールを行ってみましょう。
$ wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tgz
$ tar xzvf aquestalkpi-*.tgz
$ aquestalkpi/AquesTalkPi -f aquestalkpi/test.txt |aplay
$ aquestalkpi/AquesTalkPi "漢字交じりのテキストを読み上げます" |aplay
筆者が配布しているESP-WROOM-02用のgitをダウンロード済の方は、下記のコマンドでインストールが可能です。
$ cd ~/esp/tools/
$ aquestalk_setup.sh
インストーラ:

簡易HTTPサーバで音声データ入力用のユーザインタフェースを作成

(追記:2017/8/13)
より音声データを簡単に再生するために、Raspberry Pi上で簡易HTTPサーバを動かします。下図は、パソコンやスマホのブラウザからRaspberry Piへアクセスした時の画面です。テキストボックスへ文字を入力し、[Enter]キーもしくは[送信]ボタンをクリックすると、音声が出力されます。
以下は簡易HTTPサーバのBashスクリプトです。nkfをインストールしてから実行してください。
#!/bin/bash
amixer cset numid=1 200
IP=`hostname -I|cut -d" " -f1`
TALK="日本語を話します。"
HTML="\
HTTP/1.0 200 OK\n\
\n\
<html><head>\n\
<title>Test Page</title>\n\
<meta http-equiv=\"Content-type\" content=\"text/html; charset=UTF-8\">\n\
</head>\n\
<body>\n\
<h3>AquesTalkPi</h3>\n\
<form method=\"GET\" action=\"http://"${IP}"/\">\n\
<input type=\"text\" name=\"TEXT\" value=\"TALK\">\n\
<input type=\"submit\" value=\"送信\">\n\
</form>\n\
</html>\n\
\n\
"
echo "Listening HTTP port 80…"  
while true
do
    echo -e $HTML\
    |sed -e "s/\"TALK\"/\"${TALK}\"/g"\
    |sudo netcat -lw0 -v 80\< br>    |while read TCP
    do
        HTTP=`echo -E $TCP|cut -d"=" -f1`
        if [ "$HTTP" = "GET /?TEXT" ]; then
            TALK=`echo -E $TCP\
            |cut -d"=" -f2\
            |cut -d" " -f1\
            |sed -e "s/+/ /g"\
            |nkf –url-input` 
            echo -E "TEXT="${TALK}
            kill `pidof aplay` &> /dev/null
            sleep 0.5
            aquestalkpi/AquesTalkPi "${TALK}"|aplay &
        fi
    done
done
# ダウンロード:

音量を変更するには

音が大きすぎる時は、以下のコマンドで音量を下げることが出来ます。スピーカの振動が構造部品などで共振し、音が割れてしまう場合は、音量を下げることで、多少、改善することができます。末尾の数字を小さくするほど、音も小さくなります。

amixer cset numid=1 230

動作の一例

完成後の動作例を示す動画です。

OSのバージョンによってはSpeaker pHATが動作しないらしい

Linuxのバージョンによっては動作しないという情報を得ています。ネットに記載された情報だと、少し古い4.9.24や、4.9.25では動作しないようです。
ただし、より古いバージョンでも動作するようなので、必ずしも最新版が良いとは限りません。当方が動作確認を行った時のバージョンです。

$ uname -a
Linux raspberrypi 4.9.30+ #1001 Fri May 26 16:03:39 BST 2017 armv6l GNU/Linux

バージョンによっては下記のようなエラーが出るらしい
Unable to determine hardware version. I see: Hardware : BCM2835
つぎは、スピーカボックスへ収容します。下記のリンクをクリックしてください。
スピーカボックスへ収容したRaspberry Pi用ラジカセ風Speaker pHAT
https://blogs.yahoo.co.jp/bokunimowakaru/55859194.html
by ボクにもわかるRaspberry Pi