LoginSignup
4
7

More than 5 years have passed since last update.

GoogleHome/AmazonEco を RaspberryPi の Bluetooth スピーカーにする

Last updated at Posted at 2018-10-28

はじめに

標題の通りなのですが、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
/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
/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
/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アドレス>」をして起動音を出してます。

/usr/local/bin/connect-bluetooth.sh
#!/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
/etc/rc.local
# connect to bluetooth speaker
/usr/local/bin/connect-bluetooth.sh

exit 0

あと、実行権限を忘れずに!

$ sudo chmod +x /usr/local/bin/connect-bluetooth.sh

起動スクリプトは、起動時に接続されない方だけです。

再起動後、無事音が鳴るようになりました!

しばらくすると切断される

再接続用のスクリプトを用意

/usr/local/bin/reconnect-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

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7