將藍牙耳機鏈接到Raspberry Pi 3(A2DP&HSP)

第1步:PulseAudio

隨處提到的一個問題是ALSA對藍牙技術的支持退出。如今惟一的方法是PulseAudio。
資料來源:https : //git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=4ff9b99292eca193dc0c149722328cb0b1ab0818php

HSP(包括A2DP)所需的最小版本是:Bluez 5 / PulseAudio 6 
資料來源:https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/6.0/git

我建議重新的Raspbian Jessie圖片開始:https
//www.raspberrypi.org/downloads/raspbian/github

更新並升級它:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo reboot
json

檢查軟件包的版本:
dpkg -l bluez
版本  5 .23-2 + rpi2bootstrap

dpkg -l pulseaudio
版本:  5 .0-13 
警告:Raspbian庫仍在使用的PulseAudio 5架構

清除預先安裝的PulseAudio:
sudo apt-get purge pulseaudioless

要手動安裝PulseAudio 6或更高版本,有兩種方法,它們均可以。工具

方法1:從Debian Backports安裝PulseAudio學習

編輯源列表:
sudo nano /etc/apt/sources.list網站

添加行:
deb http://ftp.debian.org/debian jessie-backports main

將PGP密鑰添加到您的Raspberry Pi:
gpg --keyserver pgpkeys.mit.edu --recv-key 8B48AD6246925553
gpg --keyserver pgpkeys.mit.edu --recv-key 7638D0442B90D010
gpg -a --export 8B48AD6246925553 | sudo apt-key add --
gpg -a --export 7638D0442B90D010 | sudo apt-key add --

更新軟件包列表:
sudo apt-get update

安裝PulseAudio及其藍牙模塊:
sudo apt-get -t jessie-backports install pulseaudio pulseaudio-module-bluetooth

檢查版本(6或更高版本):
dpkg -l pulseaudio pulseaudio-module-bluetooth

ii pulseaudio 7.1-2〜bpo8 + 1 
ii pulseaudio-module-blue 7.1-2〜bpo8 + 1

您能夠直接跳到步驟2

方法2:使用PulseAudio來源

從Freedesktop.org下載源代碼:
wget https://freedesktop.org/software/pulseaudio/releases/pulseaudio-6.0.tar.xz

解壓縮並轉到目錄:
tar xvf pulseaudio-6.0.tar.xz
cd pulseaudio-6.0

運行引導腳本:
./bootstrap.sh

我將在這裏總結我遇到的全部錯誤(以防人們經過複製/粘貼進行搜索):
./bootstrap.sh: line 46: intltoolize: command not found
configure: error: Unable to find libltdl version 2. Makes sure you have libtool 2.4 or later installed.
configure: error: *** sys/capability.h not found. Use --without-caps to disable capabilities support
No package 'json-c' found
No package 'sndfile' found

所以安裝以上全部庫:
sudo apt-get install intltool libtool libcap-dev libjson0-dev libsndfile1-dev

該腳本如今應該正確結束,而且在命令行中,您能夠看到已完成配置的表格,以及啓用/禁用的部分。在我身邊:udev,bluez5,ofono,native-headset,alsa,X11,systemd,...都沒有啓用,因此我安裝了額外的庫:
sudo apt-get install libudev-dev libsbc-dev libbluetooth-dev libx11-xcb-dev libasound2-dev libsystemd-dev libsamplerate0-dev

從新執行./引導程序,如今缺乏部件已啓用。

而後,製做並安裝PulseAudio(這須要一些時間,喝一杯咖啡)。
sudo make
sudo make install
sudo ldconfig
最後一條避免共享庫的錯誤的命令沒有找到。

第2步:藍牙硬件

要關閉內置藍牙控制器(BCM43438),請將其列入黑名單:
sudo nano /etc/modprobe.d/raspi-blacklist.conf

添加行:
黑名單btbcm 
黑名單hci_uart

CTRL + X,而後是Y,而後是Enter

重啓:
sudo reboot

如今鏈接你的藍牙USB加密狗,個人是華碩BT400。
(在這一步,結果可能會有所不一樣,也許你的USB加密狗已經被Raspbian支持)

對於華碩BT-400,我必須手動安裝固件。
要知道您的硬件是否被正確調用,請在此處檢查:
dmesg | grep -i bluetooth

在個人狀況下,我看到錯誤:
[155.924366] bluetooth hci0:brcm / BCM20702A1-0b05-17cb.hcd的直接固件加載失敗,出現錯誤-2

在這裏我須要解釋一些事情。USB dongle中的芯片組來自Broadcom(BCM)
Broadcom的固件是專有的,這意味着它們不會被共享爲開源,有時甚至不會在Linux存儲庫中共享。
因此要使用它,你必須找到相應的.hcd文件並將其存儲在/ lib / firmware文件夾中。

簡單的方法是在線下載華碩驅動程序:
wget http://dlcdnet.asus.com/pub/ASUS/wireless/USB-BT400/UT_USB_BT400_6516000.zip -P /home/pi/Downloads/

解壓縮它:
sudo apt-get install zip
cd /home/pi/Downloads/
unzip UT_USB_BT400_6516000.zip

打開驅動程序的.inf文件並查找華碩
cd BTW6.5.1.6000_Win7_USB_ASUS/Win32/
cat bcbtums-win7x86-brcm.inf

搜索支持您硬件的驅動程序。對於華碩BT400,我找到相應的文件:
BCM20702A1_001.002.014.1315.1347.hex

不是它是.hex,因此我須要將它轉換爲.hcd,我將使用hex2hcd工具:
cd /home/pi/Desktop
sudo apt-get install git
git clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make

在這裏,我遇到了錯誤,因爲樹莓派配置
gcc -O2 -march =原生hex2hcd.c -o hex2hcd 
***錯誤在`gcc':雙免費或腐敗(頂部):0x015fdc58 *** 
<內置>:目標食譜'hex2hcd'失敗
make:*** [hex2hcd]停止

因此我修改了Makefile:
sudo nano Makefile

替換該行:
CFLAGS = -O2 -march = native 
經過
CFLAGS = -mcpu = cortex-a53 -mfpu = neon-vfpv4 
(來源:https://www.raspberrypi.org/forums/viewtopic.php?f = 28&t = 139091&p = 922980)

重作make命令,如今你有可執行文件hex2hcd:
cp /home/pi/Downloads/BTW6.5.1.6000_Win7_USB_ASUS/Win32/BCM20702A1_001.002.014.1315.1347.hex /home/pi/Desktop/hex2hcd/
./hex2hcd BCM20702A1_001.002.014.1315.1347.hex BCM20702A1-0b05-17cb.hcd

這裏要注意.hcd文件的名稱,它與上面的錯誤中缺乏的是同一個 dmesg | grep -i bluetooth

將其複製到固件文件夾,從新啓動並檢查藍牙啓動:
sudo cp BCM20702A1-0b05-17cb.hcd /lib/firmware/brcm/
sudo reboot
dmesg | grep -i bluetooth

應該如今正確地調用固件!

如今咱們將鏈接藍牙耳機(與支持A2DP的步驟相同)

啓動Bluetoothctl工具並啓動一切:
bluetoothctl
power on
agent on
default-agent

打開耳機,爲個人按我按住按鈕,直到我看到白色閃爍的LED。

開始掃描:
scan on

幾秒鐘後,您將看到耳機名稱和MAC地址(xx:xx:xx:xx:xx:xx)

配對,信任並鏈接它:
pair xx:xx:xx:xx:xx:xx
trust xx:xx:xx:xx:xx:xx
connect xx:xx:xx:xx:xx:xx

如今耳機已正確鏈接到Raspberry Pi。
不然,它應該是PulseAudio守護程序,它還沒有運行。
打開新的控制檯並啓動它:
pulseaudio --start

返回到其餘控制檯並從新鏈接耳機:
connect xx:xx:xx:xx:xx:xx

如今耳機已鏈接!

檢查PulseAudio中的卡片:
pactl list cards

您能夠看到藍牙卡,以及可用的配置文件A2DP和HSP。
對我來講,默認配置文件是headset_head_unit,若是它不適合你,強制它:
pacmd set-card-profile 1 headset_head_unit

告訴PulseAudio將耳機用做默認的「信號源」和「信號源」:
pacmd set-default-sink bluez_sink.xx_xx_xx_xx_xx_xx
pacmd set-default-source bluez_source.xx_xx_xx_xx_xx_xx

用麥克風記錄本身:
parecord -v voice.wav

CTRL + C結束它。

回放:
paplay -v voice.wav

你在聽你的聲音嗎?

最後檢查A2DP是否也能正常工做,激活它: 你的聲音就是這樣。
pacmd set-card-profile 1 a2dp_sink
paplay -v voice.wav

本教程將適用於任何能夠找到ASUS驅動程序源的藍牙USB適配器。

若是您有任何問題或意見,請隨時經過評論詢問我。

故事爲何RASPBERRY PI BLUETOOTH不工做

這一部分正在進行,由於我天天都在學習有關藍牙配置文件,硬件體系結構,IP問題等的新內容。

這裏的目的不是責怪Raspberry Pi,而是要理解爲何它是NOK以及如何糾正它。
由於當天咱們只想經過電路板完成而不須要外接附加組件。
在此以前,若是您想擁有HSP配置文件,我建議使用藍牙USB加密狗。

一些快速筆記和問題:

  • 樹莓派使用Broadcom BCM43438「combo」出貨集,用於Wi-Fi和藍牙
  • Broadcom固件是專有的,並非Linux發行版的全部時間
  • 顯然,BCM43438的固件與BCM43430相同(但如何肯定...)
  • 人們報告稱,使用Wi-Fi和藍牙會致使音頻質量差和鏈接速度緩慢
  • Raspberry Pi Zero Wi將會有一樣的問題(相同的BCM 43438)
  • Raspberry Pi無線的架構是什麼(我知道它不是開源的...)?
  • 什麼是總線和協議(HCI,UART,SCO,SDIO ...)?
  • 在Raspberry Pi Foundation贊成此硬件以前,有沒有人檢查過藍牙音頻是否可用?
  • 爲何在Raspberry Pi硬件列表(在網站中)中未說起BCM43438?

未完待續。

相關文章
相關標籤/搜索