将蓝牙耳机链接到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?

未完待续。

相关文章
相关标签/搜索