はじめに
標題の通りなのですが、GoogleHome/AmazonEco を RaspberryPi の Bluetooth スピーカーにしてみました。
ハード
- RaspberryPi3
- GoogleHome mini
- AmazonEco Dot
- Windows10(母艦)
パッケージをインストールする
$sudo apt install pulseaudio pulseaudio-module-bluetooth
PulseAudio サービス作成
$ sudo vi /etc/systemd/system/pulseaudio.service
[Unit]
Description=Pulse Audio
[Services]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm
[Install]
WantedBy=multi-user.target
PulseAudioとBlueZの通信設定
$ sudo vi /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
<busconfig>
<policy user="pulse">
<allow send_destination="org.bluez"/>
</policy>
</busconfig>
PulseAudioのモジュール設定
Bluetoothのサービスを読み込む設定が必要らしい。以下をファイルの最後に追加。
$ sudo vi /etc/pulse/system.pa
...
### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif
.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
ここで一度、システム再起動。要らないかも。
$ sudo reboot
PulseAudioの起動
$ sudo systemctl start pulseaudio.service
$ sudo systemctl enable pulseaudio.service
ユーザグループ追加
root/pi ユーザをPulseAudioで音声を出力するためのグループに追加。
piユーザだけでも良いかもしれません。私はラズパイの起動音を出したかったのでrootユーザを追加しておきました。
$ sudo usermod -a -G pulse,pulse-access root
$ sudo usermod -a -G pulse,pulse-access pi
GoogleHome/AmazonEco の検索
$ sudo bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX raspberrypi [default]
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
GoogleHome の場合
ここで GoogleHome の 「※ペア設定モードを有効にする」
しばらくすると以下のように見つかるとツラツラ出てくる。
出て来ないときはもう一度「ペア設定モードを有効にする」してみる
※ペア設定モードを有効にする
GooglHomeアプリで ここのSTEP5の状態にする
[NEW] Device ZZ:ZZ:ZZ:ZZ:ZZ:ZZ [ダイニング ルーム]
私のGoogleHomeは「ダイニング ルーム」という名前にしている
ZZ:ZZ:ZZ:ZZ:ZZ:ZZが GoogleHomeのMACアドレス
AmazonEco の場合
この状態で、PCからブラウザで https://alexa.amazon.co.jp にアクセスするか、スマホでAlexaアプリを起動します。
設定 - デバイス - Echo で、"ワイヤレス" の個所で Bluetooth を選択します。
[新しいデバイスをペアリング] を押します。
検出中... と表示されます。
[NEW] Device ZZ:ZZ:ZZ:ZZ:ZZ:ZZ Echo Dot-XXX
私の AmazonEco は Dot なので、Echo Dot-XXX です。
ZZ:ZZ:ZZ:ZZ:ZZ:ZZが AmazonEcho の MACアドレス
GoogleHome/AmazonEcoとペアリング
[bluetooth]# pair ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Attempting to pair with ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Failed to pair: org.bluez.Error.AlreadyExists
[CHG] Device ZZ:ZZ:ZZ:ZZ:ZZ:ZZ Connected: yes
#trustで次回以降自動接続させる
[bluetooth]# trust ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Changing ZZ:ZZ:ZZ:ZZ:ZZ:ZZ trust succeeded
#ペアリングしたGoogleHome/AmazonEchoに接続
[bluetooth]# connect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Attempting to connect to ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Connection successful
# 上手くつながるとGoogleHome/AmazonEchoから 「チロン♪」と鳴ります。
[ダイニング ルーム]# exit
Agent unregistered
[DEL] Controller ZZ:ZZ:ZZ:ZZ:ZZ:ZZ raspberrypi [default]
※うまくいかない場合は、「remove MACアドレス」 で削除した後、再度、やり直してみてください。うまくいく場合があります。
音を鳴らす
aplay /usr/share/sounds/alsa/Front_Center.wav
GoogleHomeが鳴らない
ペアリングしたときに確かに「チロン♪」となったはずなのに鳴りませんでした。
再起動しても鳴らず・・・・。
GoogleHomeアプリで確認したところ、「ペア設定されたBluetoothデバイス」には確かにラズパイが表示されています。もう一度、ペアリングからやり直してみます。
$ sudo bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX raspberrypi [default]
# 一度、削除してから
[bluetooth]# remove ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
(以下、同じ)
GoogleHome再挑戦
aplay /usr/share/sounds/alsa/Front_Center.wav
「♪フロント、センター♪」鳴った!美しい女性の声です❤
んー、何がいけなかったのだろう・・・・?
とりあえず鳴ったので良しと。
ラズパイ再起動後、鳴らず・・・
あらら。もしかして最初に鳴らなかったのも同じ原因?
bluetoothctlコマンドで見てみてもちゃんと信頼済みにも入っているし・・・。
試しに bluetoothctlコマンド で connect だけしてみる。鳴った!
しょうがないので、起動スクリプトに突っ込みます。
起動スクリプトを作ります。
「connect <GoogleHome/AmazonEchoのMACアドレス>」をして起動音を出してます。
# !/bin/bash
bluetoothctl << EOF
power on
connect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
quit
EOF
sleep 5 # 適当にウェイト
mpg321 -q /usr/share/sounds/etc/robot-startup1.mp3
robot-startup1.mp3 は「効果音ラボ」さんのロボット音です。
また、mp3再生には、mpg321 が必要ですので、別途インストールしてください。
けど、connect時にデフォルト音がなるので、起動音は必要ないと思いました。(汗)
$ sudo vi /etc/rc.local
:
# connect to bluetooth speaker
/usr/local/bin/connect-bluetooth.sh
exit 0
あと、実行権限を忘れずに!
$ sudo chmod +x /usr/local/bin/connect-bluetooth.sh
起動スクリプトは、起動時に接続されない方だけです。
再起動後、無事音が鳴るようになりました!
しばらくすると切断される
再接続用のスクリプトを用意
# !/bin/bash
bluetoothctl << EOF
power on
disconnect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
quit
EOF
sleep 5 # 適当にウェイト
bluetoothctl << EOF
power on
connect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
quit
EOF
sleep 5 # 適当にウェイト
mpg321 -q /usr/share/sounds/etc/robot-startup1.mp3
SpecialThanks!!
http://yamtlabo.blog.bbiq.jp/blog/2018/06/raspberry-pi-ze-de45.html
http://belial6.hateblo.jp/entry/2017/06/30/003546
http://dungeonneko.hatenablog.com/entry/2017/01/12/171250
https://soundeffect-lab.info/
https://s.webry.info/sp/vogel.at.webry.info/201712/article_10.html