buildrootでrootfsを作成した組み込みLinuxでBluetoothヘッドセット(イヤホンマイク)を使う方法の一例
カーネルコンフィグ
CONFIG_BT=m
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=m
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_HCIBTUSB=m
CONFIG_SND=m
CONFIG_HID=m
buildrootのコンフィグ
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_ALSACTL=y
BR2_PACKAGE_ALSA_UTILS_ALSAMIXER=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_BLUEZ_ALSA=y
BR2_PACKAGE_BLUEZ_TOOLS=y
BR2_PACKAGE_BLUEZ5_UTILS=y
BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y
BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y
Bluetoothヘッドセットのペアリング
BTヘッドセットのMACアドレスを00:1A:7D:XX:XX:XX
とする。
BTヘッドセットをペアリングモードにした状態でrootユーザーで以下を行う。
# bluetoothctl
scan on
(該当するヘッドセットが見つかるのを待つ)
scan off
pair 00:1A:7D:XX:XX:XX
exit
同じものを再度ペアリングする場合は、一度デバイスを削除してからやり直す。
# bluetoothctl
remove 00:1A:7D:XX:XX:XX
Bluetoothヘッドセット接続のテストスクリプト
# !/bin/sh
set -x
export LIBASOUND_THREAD_SAFE=0
# Check if BT exists
hciconfig |grep -q hci0 || exit 1
# MAC Address of the BT headset
BT_HEADSET=00:1A:7D:XX:XX:XX
cat << __eof__ > /tmp/.asoundrc
defaults.bluealsa.interface "hci0"
defaults.bluealsa.device "$BT_HEADSET"
defaults.bluealsa.profile "sco"
defaults.bluealsa.delay 10000
__eof__
/usr/libexec/bluetooth/bluetoothd &
sleep 1
bluetoothctl power off
sleep 2
bluetoothctl power on
sleep 2
bluetoothctl agent on
bluetoothctl connect $BT_HEADSET
/usr/bin/bluealsa &
sleep 2
while :; do
if bt-device -i $BT_HEADSET |grep -q 'Connected: 1'; then
if amixer -D bluealsa |grep -q 'SCO'; then
sleep 10
else
bluetoothctl disconnect $BT_HEADSET
sleep 1
fi
else
bluetoothctl connect $BT_HEADSET
sleep 5
fi
done
https://github.com/Arkq/bluez-alsa に書いてあるが、
export LIBASOUND_THREAD_SAFE=0
を実行しておくと安定する。
マイクの音をファイルに保存
export LIBASOUND_THREAD_SAFE=0
arecord -f S16_LE -r 8000 -c 1 -D bluealsa test.wav
保存した音声ファイルを再生
aplay -D bluealsa test.wav