RaspberryPi4でBluetoothスピーカーを接続する

RaspberryPi4 で Bluetoothスピーカーを接続する手順です。
なお、ここでの設定手順の OS は Ubuntu Server 20.04 LTS です。
すでに Ubuntu で動作している場合は、「BluetoothスピーカとRaspberryPi4の接続」から読み進めてください。


RaspberryPi4 の Ubuntuインストール


外付けHDDに Ubuntu を入れる場合は、次の記事の手順を実施します。

Raspberry Pi 4 Model B で Ubuntu20 をUSB接続のHDD/SSDから起動する: パソコン鳥のブログ


microSDカードにUbuntu を入れる場合は、次の手順を実施します。

まず、PCで作業します。
microSDカードをさしたカードリーダを、PCに接続しておきます。

https://ubuntu.com/download/raspberry-pi から Ubuntu Server 20.04 LTS をダウンロードします。
こちらでは 64bit 版で試しました。


https://www.raspberrypi.org/downloads/ から Raspberry Pi Imager をダウンロード・実行してインストールします。

Raspberry Pi Imager を起動します。
次のような画面になるので、[CHOOSE OS] を選択します。

RaspberryPiImager_1.png


下のほうにスクロールして、[Use custom] を選択し、先ほどダウンロードした、Ubuntu のイメージを指定します。

RaspberryPiImager_2.png


最初の画面に戻るので、[CHOOSE SD CARD] で microSDカードを指定し、[WRITE] を押します。

これで、microSDカードに Ubuntu がインストールされます。



BluetoothスピーカとRaspberryPi4の接続


必要モジュールのインストール


RaspberryPi4 で作業します。


sudo apt-get install pi-bluetooth pulseaudio-module-bluetooth pavucontrol bluez


再起動します。

Bluetooth接続


rootユーザーで、または sudo して以降の作業をします。

次のコマンドを実行します。

busctl tree org.bluez


表示が次のようになることを確認します。

$ busctl tree org.bluez
└─/org
  └─/org/bluez
    └─/org/bluez/hci0


Bluetoothの設定用ツールをターミナルから起動します。

bluetoothctl


デバイスの検索を実行します。次のコマンドを入力します。

scan on


Bluetoothスピーカーをペアリングモードにします。
各スピーカの説明書を見てペアリングモードにしてください。

例えば Amazon Echo / Echo dot は Bluetoothスピーカーとして設定できますが、次のようにします。

PCからブラウザで https://alexa.amazon.co.jp にアクセスするか、スマホでAlexaアプリを起動します。
設定 - デバイス - Echo で、"ワイヤレス" の個所で Bluetooth を選択します。
[新しいデバイスをペアリング] を押します。
検出中... と表示され、ペアリングモードになります。


Bluetoothスピーカーをペアリングモードにすると、RaspberryPi で立ち上げた bluetoothctl のコマンドラインで、下のように表示がされます。

デバイス名 が、つなげたい Bluetoothスピーカーであることを確認します。
(出ていない場合は、しばらく待つと表示されます)
XX:XX:XX:XX:XX:XX の部分は各自異なりますので、以降の説明文中では、各自表示された内容に置き換えて下さい。


[NEW] Device XX:XX:XX:XX:XX:XX デバイス名


ペアリングします。

pair XX:XX:XX:XX:XX:XX


色々出た後、Pairing successful と表示されます。

接続します。

connect XX:XX:XX:XX:XX:XX


Connection successful と表示されます。

次回以降、自動的に接続されるようにデバイスを信用します。

trust XX:XX:XX:XX:XX:XX


Changing XX:XX:XX:XX:XX:XX trust succeeded と表示されます。

これで、Bluetoothスピーカーと RaspberryPi でぺアリング・接続できました。

exit で bluetoothctlコマンドから抜けます。


Bluetoothスピーカの接続確認・音量調節


RaspberryPi4 で mplayer をインストールします。

apt install mplayer


何か mp3ファイルを RaspberryPi4 に持ってきて、mplayer の引数に指定して実行します。
これでBluetoothスピーカーから鳴るはずです。


mplayer XXXXX.mp3


音は鳴ることを確認したら、音量を調節します。

次のコマンドで alsa-utilsパッケージをインストールします。


apt install alsa-utils


次のように、音量を % で指定してコマンドを実行します。


pactl set-sink-volume 1 50%


再度 mp3 を再生し、音量をちょうど良くなるように調節します。


mplayer XXXXX.mp3


ここで調節した音量の % の値をメモしておいてください。
この後の手順でその値を使用します。


pulseaudio の設定


サウンド再生には pulseaudio が必要ですが、Ubuntu デフォルトではpulseaudio はユーザーごとに、ログイン/ログアウトのたびに 起動・終了されます。
これを、ログインせずとも自動起動するようにします。

下記記事の内容に従って設定してください。

Ubuntu20.04 で pulseaudio をシステム起動時に実行する: パソコン鳥のブログ


次に音量調節を実施します。
先の手順でメモしておいた音量の % の値を指定して、次のようにコマンドを実行します。


PULSE_RUNTIME_PATH="/tmp/$(id -u)/pulse" pactl set-sink-volume 1 50%


自動起動している pulseaudio を、ログイン環境からでも使用できるように設定をします。

次の行を末尾に追加します。

.bashrc

export PULSE_RUNTIME_PATH="/tmp/$(id -u)/pulse"


再起動または次のコマンドを実行します。


source ~/.bashrc


音量調節時と同様、サウンドファイルを再生できるか確認してください。


mplayer XXXXX.mp3



起動時に Bluetoothデバイスに自動接続する


Bluetoothスピーカーによっては、Ubuntu起動時に自動的に Bluetooth接続できないかもしれません。

先の手順「pulseaudio の設定」で Ubuntu20.04 で pulseaudio をシステム起動時に実行する に従って作成したスクリプトに追加します。

start_pulseaudio.sh の末尾に ~/connect_bt_sp.sh を追加します。
次のようになります。

~/start_pulseaudio.sh

/bin/sleep 60
mkdir -p /tmp/$(id -u)/pulse
export PULSE_RUNTIME_PATH="/tmp/$(id -u)/pulse"
/usr/bin/pulseaudio -D --exit-idle-time=-1
~/connect_bt.sh


connect_bt.sh を作成します。
XX:XX:XX:XX:XX:XX の箇所は、先の「Bluetooth接続」の手順での XX:XX:XX:XX:XX:XX の部分です。

~/connect_bt.sh

#!/bin/bash

device_target=XX:XX:XX:XX:XX:XX

export PATH=/bin:/usr/bin:$PATH
export PULSE_RUNTIME_PATH="/tmp/$(id -u)/pulse"

FOUND=`pacmd list-sinks | grep "$device_target"`
if [ -n "$FOUND" ]; then
    result=`echo -e "info $device_target\nexit\n" | bluetoothctl | grep "Connected: yes"`
    if [ -n "$result" ]; then
        exit
    fi
fi

echo -e "disconnect $device_target\nexit\n" | bluetoothctl
sleep 1
echo -e "connect $device_target\nexit\n" | bluetoothctl
sleep 1

max=10
i=0
while [ $i -lt $max ]; do
    FOUND=`pacmd list-sinks | grep "$device_target"`
    if [ -n "$FOUND" ]; then
        break
    fi
    sleep 1
    i=$(( i + 1 ))
done

if [ $i -eq $max ]; then
    # 接続できませんでした
    exit 1
fi


実行権をつけます。


chmod +x connect_bt.sh


これで、システム起動時にBluetooth接続されるようになります。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント