け い ざ ん の D I Y 工 房

◆Home
◆住まいの D I Y
◆パソコン D I Y
◆ROBOT D I Y
◆電子工作 D I Y
◆Science

●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 する時に使う
接続解除
 (dev)は Device MAC Address


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 を取りこめる様にして
くれるまで待つしかない。


----------------------------------------------------------------------------------------------------------------------------
・けいざん美術館
・Blog 油絵もろもろ
・EXCEL VBAであくせく
・けいざんの食べログ


                 Site Designed by Kasio Keizan