フォーラムを開設しました!Raspberry Pi の話題はこちらで!

pHAT BEATとRaspberry Pi Zero Wでミュージックサーバ

pHAT BEATとRaspberry Pi Zero Wでミュージックサーバ

2017年現在、Raspberry Pi でミュージックサーバーというと、Volumio2が思い浮かべられます。小さい拡張ボード(pHAT)とRaspberry Pi Zero Wで使えたらと思いましたが、これハマりました。UVメーターが光りません・・・。こうなるとこのHATの意味が無いので、素直に推奨環境で動作が認められているRaspbian環境で構築しました。

材料

今回のコンセプトは、Wi-Fiが無くても単独で音楽が再生できる音楽プレイヤーを目指します。

また、レベルメーター装備で音源はハイレゾ対応で、それなりの音を楽みたい。

最終的にstand-aloneにて運用したいです。初めはWi-Fi環境の中でのセットアップとし、後日改めてBluetoothなりpeer-to-peerなりで外へ持ち出せるようにしたいと思います。

  • Raspberry Pi Zero W ×1
  • pHAT BEAT ×1(+スピーカー×2)
  • RASPBIAN STRETCH LITE(Release date:2017-08-16)
  • mopidy ×1(MPDなど)※ここのmpdは総称ではなくアプリケーション名
  • SDカード×1(class10対応)(音楽ファイルを入れるため32GBにしました)

 

MPDとは?
MPD=Music Player Daemon サーバー・クライアント型のプレイヤーです。プレイリストや楽曲のデータベースを管理します。操作などのインターフェイスにクライアントソフトが必要になります。(参考:Music_Player_Daemon

 

スピーカー

今回用意したスピーカーは、ハードオフにてジャンク品を540円で購入しました。型番しかなく、しかもその型番では詳細が分からない中華圏の物です。新しい型番が3Wとあったので、恐らく3W程度のものと推測しました。本体はプラスティックでしたのでバラしてスピーカーユニットだけ取り出しました。

バラしたらやはり3Wでした。4Ωです。
バラしたらやはり3Wでした。4Ωです。

 

pHAT BEATには2つのスピーカーがスナップイン端子で接続できます。1つのスピーカーは3Wまで対応しています。(3W per channel)また、ボード裏にはディップスイッチでモノラルとステレオを切り替えられます。モノラルとありますが2つをブレンドした擬似的なステレオです。

 

ハンダ付け

pHAT BEATとRaspberry Pi Zero Wを接続するにはハンダ付けが必要になります。

ハンダ付けが苦手またはしたくない場合は英Piromoniの「GPIO Hammer Header」でGPIOを本体に取り付けてください。

 

モニターに繋がずにセットアップする場合(ヘッドレスインストール)は、sshの有効化、無線LANの設定ファイルをRaspbianが書き込まれたSDカードにコピーしてください。

ヘッドレスインストールをしない場合は、画面にて一度インストールが終わった後に設定しますが、Raspbian liteの場合はデスクトップ(の機能)が入っておらずにてマウスでの操作が出来ません。コマンドでの作業になります。

Raspberry Pi zero W のヘッドレスインストール(キーボードやマウスなしでRaspbianをインストールする方法)

sshの有効化

sshファイルを作成して/boot直下にコピーします。

RaspbianをインストールするときSSHを有効化する方法

無線LANへ自動接続

wpa_supplicant.confを予め用意してssh同様に/boot直下へコピーします。

Raspberry Pi zero W のヘッドレスインストール(キーボードやマウスなしでRaspbianをインストールする方法)

 

初回起動

電源を入れてから1分程度待つと、遠隔操作する側(MacまたはPC)のターミナルにて接続する。

初期パスワードはraspberry

(情報)何回か同じPCやMacでSSH接続していると、何回もOS同じローカルにSSHで接続するため認証が違うと怒られログインできません。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

The ECDSA host key for raspberrypi.local has changed,

and the key for the corresponding IP address

is unknown. This could either mean that

DNS SPOOFING is happening or the IP address for the host

and its host key have changed at the same time.

この場合は認証した/Users/’ユーザー名’/.ssh/known_hostsを編集すれば良いのですが、面倒なのでそのファイル自体を削除して対処しています。

ssh-keygen -R ホスト名

認証のファイルが削除されればいつものようにSSHで接続できます。

初期設定を済ます

この辺りはLocation(地域)設定だけで問題ありません。

Raspbianは4GBで構成されるらしく、NOOBSでインストールした場合は、SDカードの容量いっぱいに使うため、このconfigでExpand Filesystemをしないとならない。※Raspbianのイメージからの場合は必要ありません。

再起動後、コマンドにて確認する場合は以下です。

ファイルシス   サイズ  使用  残り 使用% マウント位置

/dev/root         30G 1022M   28G    4% /

devtmpfs         213M     0  213M    0% /dev

tmpfs            218M     0  218M    0% /dev/shm

tmpfs            218M  3.1M  215M    2% /run

tmpfs            5.0M  4.0K  5.0M    1% /run/lock

tmpfs            218M     0  218M    0% /sys/fs/cgroup

/dev/mmcblk0p1    42M   21M   21M   51% /boot

tmpfs             44M     0   44M    0% /run/user/1000

Raspberry Pi の初期設定(RASPBIAN JESSIE WITH DESKTOP)

pHAT BEATの設定

pHAT BEATを利用するにあたり、専用のソフトウェアをインストールし設定していきます。

※VolumioなどRaspbianを元にした専用OSでこのpHAT BEATが上手く動作しないのは試してみたところ無理と分かりました。どうもpHAT BEAT用ソフトウェアだけでは何か足りないのでしょう。またVolumio自体の問題でpHATが上手く制御できません。また試してみたいと思います。

ソフトウェアのダウンロード

Pimoroni公式サイトからpHAT BEAT用のpHAT BEAT softwareをダウンロードしインストールします。

https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-phat-beat

This script will install everything needed to use
pHAT Beat

Always be careful when running scripts and commands copied
from the internet. Ensure they are from a trusted source.

If you want to see what this script does before running it,
you should run: ‘curl https://get.pimoroni.com/phatbeat’

Support for your operating system is experimental. Please visit
forums.pimoroni.com if you experience issues with this product.

Note: pHAT Beat uses the I2S interface
The on-board audio chip will be disabled if you proceed!

Do you wish to continue? [y/N]

 

補足;インストール途中、下記のようにfullインストールするか聞かれます。開発用のサンプルコードやリソースファイル、ドキュメントなども入ります。通常は入れなくても構いませんが、入れて置いても問題ありません。/home/pi/Pimoroni/phatbeatへフォルダ分けされてダウンロードされます。

※最後にご紹介するpvumeterのプログラム修正に利用します。

 

pHAT Beat comes with examples and documentation that you may wish to install.

Performing a full install will ensure those resources are installed,

along with all required dependencies. It may however take a while!

Do you wish to perform a full install? [y/N]

ドキュメントとpipなどのアプリケーションなどです。入れて置いても問題ありません。容量や他のライブラリとの影響を懸念するならばフルインストールではなくても良いでしょう。

pimoroniソフトのインストール

pimoroni-dashboardというソフトがアクセサリカテゴリにインストールされます。これはデスクトップのX環境がないLiteではコマンドラインにて起動できます。

https://github.com/pimoroni/phat-beat

※インストール直後はpimoroni (1.0.2)でしたが、ソフト起動後にUPDATEがあるということでアップデートしたら1.04が記事執筆時点の最新バージョンでした。

pimoroni-dashboardの起動

コマンドラインから起動すると公式のpHAT BEATを設定するプログラムが表示されます。以下、raspbian liteでの画面キャプチャーです。

piromoni(1.02)->1.04へアップデートした

Pimoroni Dashboardのメインメニュー

  1. HAT製品の選択
  2. pHAT製品の選択
  3. その他の製品の選択
  4. Pomoroniのキットやプロジェクト製品
  5. すべてのライブラリの更新
  6. 製品ドキュメントの閲覧
  7. 問題がありヘルプを参照
  8. Pimoroniショップへ

意訳で申し訳ないですが、ここではpHAT BEATなので、2番の「My Pimoroni product is a pHAT」を選んで設定します。

9番のpHAT BEATです。

しばらく(5〜10分程度でしょうか)でインストールが終わります。

Finalising Install…

i2s-mmap overlay already active

hifiberry-dac overlay already active

Already up-to-date.

This script will install everything needed to use

Pi VU Meter

コマンド1行で設定が終わるのは簡単で間違いようもありませんね。上記のようにpHAT BEATの中は、hifiberry-dacと認識されています。恐らくLEDの製品とハイレゾの製品を合わせた2次製品と思われます。

動作テスト

ここまでで準備は完了しました。これで音声を再生すると接続されたスピーカーから音が出て、LEDのレベルメーターが動作するはずです。・・・が、音が鳴ってもLEDのレベルメーターが光らない場合は、途中の手順で何か問題あったのではないでしょうか? 最初からやり直した方が無難かも知れません。

まずは音からテストし1つずつ確認していきます。

サウンド再生のテスト

以下のコマンドで音声ファイルを再生してみます。

女性の声で「フロントレフト、フロントライト」と繰り返す音声が流れます。

「フロントライト」と再生されると2列のLEDのうち、右に対応したレベルメーターが動き、左の場合はその逆となりきちんと左右で別れて音声とシンクしていることが分かります。

asound.confの修正は要らない

今回のバージョン(1.04)から修正されたようで、asound.confの修正は要らなくなりました。

以下、デフォルトでのasoud.confを記載しておきます。

以前は足りない項目の追加と一部を修正しないとなりませんでしたが、何も変更する必要がありませんでした。

LEDが光るかテスト

今回は(へたくそな)ハンダ付けをしました。これが正常に動作するのか分かりません。ハンダ付けが難しい場合はハンマーヘッダーというキットが売っています。これなら圧着させることで同じようにGPIOヘッダピンを接続できます。

では、光るかどうかのテストは、公式サイトに倣いターミナルにてpythonのプロンプトから確認します。

Type “help”, “copyright”, “credits” or “license” for more information.
>>>

このようなプロンプト画面で止まりますので、>>>以降に下記スクリプトをコピー&ペーストしてください。

3行を一度にコピー&ペースト

端の2個だけ赤くLEDが点灯します。

 

一度LEDを消します。次を2行まとめてコピー&ペーストしてください。

 

最後に全部を青く最大光度で光らせます。

 

LEDを消します。

 

pythonから抜けて元のターミナルに戻ります。

これで光ればハンダ付けは概ね問題なかったということになります。

音楽再生用環境のセットアップ

今回はネットラジオではなく、またNASからでもなく、内蔵のSDカード32GBへ音楽ファイルを転送して聴く形式を取ります。

そのためまずはMPD環境を整えます。

今回はMPDにmopidyを利用します。(Raspberry Pi zero系ではVolumioはバグで上手く動作しませんでした)

インストール方法は下記を参考にして次からの手順を確認してください。

https://docs.mopidy.com/en/latest/installation/debian/#debian-install

GPG keyの登録:

パッケージソースのダウンロード:

Mopidyのインストール:

以下コマンドにてインストール

音楽を転送できるようにsambaのインストール

他の端末から音楽ファイルを共有(Wi-Fiで転送)したいので、sambaを入れ共有フォルダを設定します。分かり易い様に、mopidyで音楽ファイルの場所であるローカルの/var/lib/mopidy/mediaをSambaで共有する形にしてあります。適時読み替えてください。

パスワードを設定した方が良いでしょう。

 

設定ファイルの追記

下記を追記します。

パーミッションの変更

パーミッションは777にしましたが適時変更してください。

 

sambaサービスを再起動する。

 

Mopidy.confの修正と追加

mopidy.confにて動作させるための設定をします。追記が主になります。環境によって書き換えてください。

Mopidy公式ドキュメント

 

デフォルトは以下:

このデフォルトの一番最後から下記を追記します。

追加項目:

ホスト名は、例えば「rpi-mopidy」とするなら、

と記述してください。

 

 

mpdクライアントをインストール

 

インストールしたら、先程のconfの[http]の項目に下記を追加する。(上記には既に追加済み)

 

IPアドレスはifconfigコマンドで調べられます。

 

ホスト名を変更するにはもう一度raspi-configから設定すると簡単です。

 

mopidyを再起動しステータスを確認します。

 

ステータス確認(終了はcontrol+C)

mopidy.service – Mopidy music server

Loaded: loaded (/lib/systemd/system/mopidy.service; enabled)

Active: active (running) since 火 2017-08-29 09:34:54 JST; 5s ago

Process: 987 ExecStartPre=/bin/chown mopidy:audio /var/cache/mopidy (code=exited, status=0/SUCCESS)

Process: 984 ExecStartPre=/bin/mkdir -p /var/cache/mopidy (code=exited, status=0/SUCCESS)

Main PID: 991 (mopidy)

CGroup: /system.slice/mopidy.service

└─991 /usr/bin/python /usr/bin/mopidy –config /usr/share/mopidy/conf.d:/etc/mopidy/mopidy.conf

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Mixer volume set to 50

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Starting Mopidy audio

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Starting Mopidy backends: StreamBackend, M3UBackend, F…kend

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Audio output set to “alsasink”

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Loaded 4 local tracks using json

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Starting Mopidy core

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Starting Mopidy frontends: MpdFrontend, HttpFrontend

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     MPD server running at [::]:6600

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     Starting GLib mainloop

8月 29 09:34:58 raspberrypi mopidy[991]: INFO     HTTP server running at [::ffff:192.168.XX.XX]:6680

Hint: Some lines were ellipsized, use -l to show in full.

 

スキャン音楽ファイルのスキャン方法

Running “/usr/bin/mopidy –config /usr/share/mopidy/conf.d:/etc/mopidy/mopidy.conf local scan” as user mopidy
INFO Starting Mopidy 2.1.0
INFO Loading config from builtin defaults
INFO Loading config from /etc/mopidy/mopidy.conf
INFO Loading config from command line options
INFO Enabled extensions: mpd, http, stream, m3u, softwaremixer, file, local
INFO Disabled extensions: none
INFO Found 35 files in media_dir.
INFO Checking 0 tracks from library.
INFO Removing 0 missing tracks.
INFO Found 16 tracks which need to be updated.
INFO Scanning…
INFO Scanned 16 of 16 files in 13s.
INFO Done scanning.

テスト用に転送してあった35ファイルがデフォルトの/var/lib/mopidy/mediaに見つかりました。

これで準備は完了です。

 

最後にサービスとして自動起動するように設定します。

 

Mopidyのクライアントソフト

再生するためにクライアントソフトを用意します。と、言ってもブラウザから制御するのですが、Mopidyにエクステンション(拡張)アプリケーションを入れないとなりません。

先程のmopidy.confにて[http]項目を有効にしてあります。拡張用のアプリケーションをインストールします。

Mopidy-Moped-0.7.1です。

 

またMopidyを再起動させ

ブラウザに下記を入力(localhostはIPアドレスまたはホスト名)

http://localhost:6680/

ここから音楽を再生できます。

ただ、レベルメーターが表示されないかと思います。恐らく、制御するグループにmopidyが入っていないからだと思いまして、以下のようにLEDとボタンの制御のgpioにmopidyユーザーに参加させました。

mopidyをgpioのグループに入れる

 

ちなみに・・・

グループからの削除は以下のコマンドで。

 

もう一度Mopidyを再起動します。

 

レベルメーターがあまり上がらない

音楽とレベルメーター点滅するように動作できたものの、音量の割にはレベルメーターが低い・・・。

かなり大きな音量でもレベルは行っても3です。8まであるのに何だかな〜と。

音量もPCMはmopidy起動時に50にセットしてあります。

mixer_volume = 50

mopidy.conf より

音が大きいからとボリュームを30とかに下げるとLEDは1つしか光らない。

ここからの作業は注意が必要です。

ネットにて情報を見付けました!

I’m actually still in the midst of (slowly, sorry) migrating the VUMeter code over to a version that uses Python for its front-end. With Python in the mix, it’s much easier for anyone to modify the behaviour of the VUMeter and test it pretty much immediately.

You could brave the development version of VUMeter,

or you could modify the pHAT BEAT plugin of your existing version by editing:

https://github.com/pimoroni/pivumeter/blob/master/src/devices/phat-beat.c#L884

Then running the installer again (from your edited local copy).

The plugins unfortunately get no information about how loud the music is, so the scaling factor can’t be (easily) adjusted automatically. I had an idea to use a slow moving-average to set the scale, but then instead switched over to using Python for the front-end, which makes it far easier to support long-term.

http://forums.pimoroni.com/t/adjust-vumeter-on-phatbeat/5569/2

要はソースコードを書き換えてもう一度インストールすればいいとのこと。

ソースコードのちょうどこの部分。

この・・・ meter_level / 32767.of ・・・の数値は音量を16進数で表したもの。

音楽や音には全く知識がないのですが、最大音量に対して鳴らしている音が小さすぎるということなのでしょうか。LEDを光らせる際にその割合を変えてあげれば小さな音でも光らせることができると思ったのです。

公式のサポートフォーラムにも似たような投稿がありました。相対的なスケールの値が無いので、どうしても最大音量の値を下げるしかないですね。他にもsocketとしてPython-serverで実現するようなことがありました。ちょっと敷居が高いので辞めて単純な数値の入れ替えで再セットアップしました。

http://forums.pimoroni.com/t/phat-beat-increase-vu-meter-sesitivity/5120

数値を単純に半分に修正して再セットアップ

pivumeterのソースファイルは既にフルインストールの際にpiディレクトリに保存されています。

/home/pi/Pimoroni/pivumeter

この中のソースファイル /src/device/のファイルです。

 

ご覧のように32768の半分である16384にしました。

 

再セットアップ

上位ディレクトリにsetup.shがありますので、それで再度このpivumeterだけ再インストールします。

一応、システムを再起動した後、もう一度「pimoroni-dashboard」を実行し、pHAT BEATの設定に合わせます。(この時に /etc/asound.confの中身も書き換わります)

 

念のため今一度システム再起動します。

以下、比較画像です。

最大音量の変更前;

 

最大音量の変更後;

動画はこちら

https://raspida.com/phatbeattestmov

 

音量設定

かなりの方が、いきなり音が大きく出て驚くため、音量を変更しておきましょう!先程、alsa-utilsもインストールされていたので、alsamixerにて音量を確認&変更します。

 

表示されたPCM音源の音量

amixerのコマンドで設定することもできます。

Simple mixer control ‘PCM’,0

Capabilities: volume

Playback channels: Front Left – Front Right

Capture channels: Front Left – Front Right

Limits: 0 – 255

Front Left: 255 [100%]

Front Right: 255 [100%]

限界値は0-255という値で、左右ともに255(100%)の音量です。これをひとまず60%に下げておきましょう。

コマンドにて以下です。

Simple mixer control ‘PCM’,0
Capabilities: volume
Playback channels: Front Left – Front Right
Capture channels: Front Left – Front Right
Limits: 0 – 255
Front Left: 153 [60%]
Front Right: 153 [60%]

 

 Airplayにも対応させる

airplay はスマホで再生する音楽の出力先を、BluetoothでRaspbianにして再生させます。

pimoroni-dashboardから設定できます。

これでスマホから音の出力先をホスト名で出ますので変えると(デフォルトでRaspberry)音も出ますしレベルメーターも動きます。

 

感想

ちょっと、いやだいぶ長い投稿になってしまいました・・・。手順を細かく記載しているので長いですが、やっていることはそんなに多く有りません。特に初回セットアップやら環境を除けば、3つくらいの作業です。

実際に一度初めからこの手順通りに再現してみたので、同じように動作するハズです。間違いなどありましたらご指摘ください。

次は、Wi-Fi環境が無くてもクライアントから操作でき、更にこれを納めるケースの製作に取りかかります!

主に参考にさせていただいたサイト;

 

フォーラムでお待ちしています!

CTA-IMAGE 記事を読んでご指摘をはじめ、質問などございましたらフォーラムにご記入ください。
話題は何でも構いません。Raspberry Pi の情報交換ができたら私も勉強になります!よろしくお願いいたします。

作ってみたカテゴリの最新記事