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

ALL
スポンサーリンク

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

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


nbsp;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接続されるようになります。

コメント