●RaspberryPi 4B USBドングルによる Bluetooth 接続
2020.07.26
headset から Bluetooth で Raspberry Pi につないで
Mic からしゃべって、RasRobo を音声で制御して動かしたい。
問題は ALSA が Blutooth Software の開発をやめてしまったので、
Pulseaudio を使用するしかない。
しかし、これは音声認識 SOFT の julius 側が対応していなかった。
また Youness の調査結果では Raspberry Pi3B の場合は Headset から
直接 IC Chip Brodcom(BCM43438)と Bluetooth で接続しようとしても、
うまくつながらない。
Raspberry Pi 4B では IC Chip が Cypress (CYW43455) に変更されているが、
これも Pulseaudio を使用していては、うまくつながらなかった。
Raspberry Pi 4B と Headset を外付け Bluetooth〜USB変換 Adapter
(USB dongle) を使用して Bluetooth で接続するしかない。
Bluetooth Headset と USB Dongle
そして SOFT は、Pulseaudio を使用しないで、Headset と
Bluetooth 接続できる SOFT に BlueALSA というものがあり
Bluez5.0 以降を使用すれば、alsa Interface を実現できそう。
ALSA の Interface ならば、julius と接続できるかも。
Bluetooth 用語解説
A2DP
Advanced Audio Distribution Profile の頭文字を取った略称で
Bluetooth で高品質の音楽などを携帯や headset に配信する通信方式
HSP
Headset Profile の頭文字をとった略称で、Bluetooth 搭載 Headset と
通信する手順であり、Stereo・Monaural 音声だけでなく Mic も使用する事が
できる双方向通信方式
HFP
Hands Free Profile の頭文字を取った略称で、車載機器などで Hands free
通話をするための通信手順であり HSP の機能に通信の発信・着信機能が
追加されている。
外付け Bluetooth Adapter
使用したのは、Ammazon で購入した中国製の tp-link UB400 という製品で、
Bluetooth 4.0 対応となっていて Windows 専用です。
lsusb で使用している IC Chip Maker 名を見る事ができます。
$ lsusb
dongle の IC Chip maker 名は Cambridge Silicon Radio となっていました。
$ dmesg
$ hciconfig
$ hciconfig hci0 version
$ hciconfig hci0 features
USB Dongle MAC Address は 00:1A:7D:DA:71:15
Raspberry Pi Audio Receiver
Raspberry Pi Audio Receiver というアプリを github で見つけた。
USB Dongle に使用できるし、Bluetooth (A2DP) を Support している。
$ wget -q https://github.com/nicokaiser/rpi-audio-receiver/archive/master.zip
$ unzip master.zip
$ cd rpi-audio-receiver-master
$ sudo ./install.sh
$ sudo ./install-bluetooth.sh
組込 Bluetooth を止める
Raspberry Pi の組込まれている Bluetooth を止める。
$ sudo nano /boot/config.txt
以下の行を追加する。
dtoverlay=disable-bt
Pulseaudio を止める。
Pulseaudio はたくさんの SOFT を install してあり削除も大変なので、
default.pa, system.pa の設定で機能を止める。
$ cd /etc/bluetooth
$ sudo nano default.pa
下記の行をコメントアウトする。
load-module module-switch-on-port-available
load-module module-switch-on-connect
これは、コメントアウトされているので戻す。
#load-module module-role-cork
#load-module module-suspend-on-idle
$ sudo nano system.pa
下記の行をコメントアウトする
load-module module-bluetooth-policy
load-module module-bluetooth-discover
/etc/profile の設定もコメントアウトした行を戻す。
$ sudo nano /etc/profile
#export ALSADEV="plughw:0,0"
↓
export ALSADEV="plughw:0,0"
bluez-5.54 の install
$ cd /home/pi
$ sudo wget https://mirrors.edge.kernel.org/pub/linux/bluetooth/bluez-5.54.tar.xz
$ sudo tar xvf bluez-5.54.tar.xz
$ sudo apt-get update
$ sudo apt-get install -y libasound2-dev libusb-dev libreadline-dev libglib2.0-dev libudev-dev libdbus-1-dev libical-dev libbluetooth-dev bluez-tools bluez bluetoothsudo
$ sudo apt-get install -y libbsd-dev libsbc-dev
$ cd bluez-5.54 ./configure --enable-library
$ sudo make -j4
$ sudo make install
BlueALSA の install
$ cd /home/pi
$ sudo git clone https://github.com/Arkq/bluez-alsa.git
$ cd bluez-alsa
$ autoreconf --install
autoreconf などという Command はありませんという
Error Message が出てきた。
autoreconf は install してないので、自動で Compile が出来ないならば、
自力で Compile するしかない。
makefile.am, configure.ac は出来ているので、aclocal を実行する。
$ sudo aclocal
ここで、autom4te.cache と aclocal.m4 が作成された。
次に automake -a を実行する。
$ sudo automake -a
ここで、config.sub, install.sh が作成された。
次に、autoheader を実行する。
$ sudo autoheader
ここで、config.h.in が作成された。
次に、autoconf を実行する。
$ sudo autoconf
ここで、やっと configure が作成された。
次に configure を実行してみる。
$ sudo ./configure
おぉー、configure が流れた。
sbc package が無いと Error が出ている。
まだ、makefile が出来てこない。
sbc package の追加
$ sudo apt-get install libsbc-dev
Error はなくなったけど、makefile がやはり作られない。
makefile を作ってくれる m4 の追加
$ sudo wget http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.gz
$ sudo tar zxvf m4-1.4.18.tar.gz
$ cd m4-1.4.18
$ sudo ./configure
$ make
$ make check
$ sudo make install
m4 を install するのに、autoreconf がないといけないときた。
本末転倒。にわとりが先か、たまごが先かになっている。
apt-get でも m4 を install できるとある。
$ sudo apt-get install m4
すでに最新版が入っていますときた。何これ。
やっぱり、Makefile が作られない。
BlueALSA, m4 を削除してついでに Pulseaudio も削除して
最初からやりなおすか。
apt-get ならうまくいくかな。
Program 削 除
まず Pulseaudio を削除するため list 表示
$ dpkg --list
大量に File が出てくる。
何が install されているか確認できる。
以下の program を削除する。
$ sudo apt-get remove --purge m4 #1.4.18-2
$ sudo apt-get remove --purge autoreconf
$ sudo apt-get remove --purge pulseaudio
一応、reboot しておく。
これできれいになった。
再度 install
apt-get で autoreconf を install する。
$ sudo apt-get install dh-autoreconf
$ sudo apt-get install autoconf
$ sudo apt-get install automake
$ sudo apt-get install libtools
Error: libtools pakege が無いといっている。
apt-get で BlueALSA を install する
$ sudo apt-get install bluealsa
bluealsa (1.4.0) install これはうまくいった。
uninstall 時に関連 Program も削除されるので、再度 library install をする。
alsa の Library も install する。
$ cd /home/pi/bluetooth
$ sudo apt-get install alsa-lib alsa-utils alsa-tools
Bluealsa が依存するサードパーティ Library もinstallする
$ sudo apt-get install libasound2-dev libbluetooth-dev libglib2.0-dev libsbc-dev libdbus-1-dev
Error だらけ
alsa-lib alsa-utils alsa-tools は無いといっている。
alsa-lib を Alsa Project からもらう。
$ sudo wget https://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.3.2.tar.bz2
$ sudo tar xvf alsa-lib-1.2.3.2.tar.bz2
$ cd alsa-lib-1.2.3.2
sudo ./configure
$ sudo make
$ sudo make install
alsa-utils を Alsa Project からもらう。
$ sudo wget https://www.alsa-project.org/files/pub/utils/alsa-utils-1.2.3.tar.bz2
$ sudo tar xvf alsa-utils-1.2.3.tar.bz2
$ cd alsa-utils-1.2.3
$ sudo ./configure --disable-alsaconf \
--disable-bat \
--disable-xmlto \
--with-curses=ncursesw &&
make
$ sudo make install
Error: make できない。
alsa-tools を Alsa Project からもらう。
$ sudo wget https://www.alsa-project.org/files/pub/tools/alsa-tools-1.2.2.tar.bz2
$ sudo tar xvf alsa-tools-1.2.2.tar.bz2
$ cd alsa-tools
$ sudo make doc
$ sudo make install
Error : install できない。
よく見るとこの SOFT は、Default で Raspbian に入っている。
余計な時間を消費してしまった。
.asoundrc の設定変更
下記の4行を記述する。
$ cd /home
$ sudo nano .asoundrc
defaults.bluealsa.interface "hci0"
defaults.bluealsa.device "00:6A:8E:00:04:40"
defaults.bluealsa.profile "a2dp"
defaults.bluealsa.delay 10000
起動後に Bluetooth Adapter は有効になっていません。
自動で有効にするには、[policy] main.conf に下記を追加します。
また、起動時に Device が常に見えていて、直接接続できる状態に
ある場合は、[General] Section に下記の行を追加します。
$ cd /etc/bluetooth
$ sudo nano main.conf
以下の行を追加する。
[policy]
AutoEnable=true
[General]
DiscoverableTimeout = 0
Discoverable = true
ControllerMode = bredr
Bluetooth daemon を起動します。
OS 起動時にも起動する様にします。
$ sudo systemctl start bluetooth.service
$ sudo systemctl enable bluetooth.service
bluetooth service が実行されている事の確認
$ sudo systemctl status bluetooth.service
$ sudo systemctl status bluetooth.target
active(running) になっていれば大丈夫。
Device が Up されている事の確認
$ hciconfig -a hci0
hci0 に Down の表示があれば、次の Command で起動する
$ hciconfig hci0 up
hci0 が up running となれば OK
Device の MAC Address を表示させる
$ hcitool dev
Device :
hci0 B8:27:EB:B8:1A:38
もっと詳細情報を見たい時は -a hci0 で表示させる。
$ hciconfig -a hci0
Bluetoothctl による設定。
$ bluetoothctl
# list # show # power on # power off # scan on # scan off # devices # pair (dev) # trust (dev) # paired-devices # connect (dev) # info (dev) # discoverable (on/off) # agent (on/off/capability) # remove (dev) |
ControllerのMAC Address表示 Controllerの状態表示 Controller起動 Controller停止 Device検索開始 Device検索停止 Device表示 Pairing Deviceを信頼する Pairing済Device表示 接 続 Deviceの状態 onで発見可能にする Remote Device から Pairing する時に使う 接続解除 |
pair, trust は yes が出ているのに
Failed to connect: org.bluez.Error.Failed が出る。
つながらない。
override.conf に Service menu の追加
$ cd /etc/systemd/system/bluealsa.service.d
$ sudo nano override.conf
ExecStart=/usr/bin/bluealsa -i hci0
上記の行に、下記の様に Service menu を追加する。
ExecStart=/usr/bin/bluealsa -i hci0 -p a2dp-sink -p a2dp-source -p hsp-hs -p hsp-ag
これは起動時にしか読み込まないので reboot しておく。
これで、org.bluez.Error は出なくなり、connect できた。
早速、julius-test.conf を起動してみる。
$ julius -C julius-test.conf
残念なことに、julius は、指定した Bluetooth Device の card No. device No を
Mic として認識してくれない。
USB Dongle を使用して、USB の Interface から Bluetooth で音声を
取り込もうとしても、julius 側が認識してくれなければつながらない。
対策としては、julius が Version UP して bluetooth を取りこめる様にして
くれるまで待つしかない。
----------------------------------------------------------------------------------------------------------------------------