在树莓派上安装UbuntuMATE后,在系统中安装VNC、ftp、SSH等软件,配置好开发环境,然后就是打造一个基于树莓派的蓝牙音箱。
为什么不在Raspbian系统中来实现?通过前期的评测发现,在Raspbian系统中,蓝牙功能不是很稳定,Blueman和系统自带的pi-bluetooth有冲突的地方,在配对的时候能够明显发现这个问题,两个应用在获取系统消息时会导致对方状态出现问题。而Ubuntu的蓝牙功能相对稳定很多。
准备工作
为了实现蓝牙音箱,我们还需要一些外设,3.5mm的音频线,一个音箱。音箱我使用的是一个多功能移动电源,自带音箱功能。
将音箱和树莓派的3.5mm音频接口连接起来,测试环境搭建完成。
通过ftp将音乐mp3文件拷贝到服务用VLC播放,没有声音,由于我接了HDMI的显示器,很可能声音走HDMI了,因此需要重定向声音的输出。
首先确认声卡驱动已经加载
lsmod | grep snd_bcm2835
使用amixer命令修改audio输出到3.5mm耳机孔(与Raspbian系统中sudo不同,Ubuntu中sudo是需要密码的,可以vim /etc/sudoers取消sudo的密码)
sudo amixer cset numid=3 1
使用VLC播放mp3,这时音箱终于有声音了。
找到问题所在了,但是这个解决办法不是一劳永逸的办法,重启后设置就没有用了。为了重启后也有效,需要修改配置文件/etc/pulse/default.pa。
sudo vim /etc/pulse/default.pa
在文件的末尾添加:
set-sink-port 0 analog-output
基本的蓝牙测试
在Ubuntu MATE上测试基本的蓝牙功能,能够scan到设备,配对,从手机端的已配对设备中,可以发现树莓派 Ubuntu MATE是支持媒体音频A2DP。
从树莓派 UbuntuMATE通过蓝牙发送文件到手机,能够正常发送。
配置树莓派蓝牙音箱
手机通过蓝牙连上树莓派后,播放音乐。额,没有声音!? 从手机的文件管理软件中发现btsnoop_hci.log的size一直在增加,说明Audio 数据是通过蓝牙发送到树莓派了,怀疑问题应该是在树莓派端运行的Bluez有问题。
分析手机端的log,将文件拷贝到电脑,修改后缀为.cfa文件,双击btsnoop_hci.cfa文件打开,分析可以发现蓝牙协议栈运行正常,音频数据也发送到对端。因此猜测双方蓝牙协议栈运行都是正常的,是树莓派的声音路由策略的问题。
在树莓派中配置设备连接的profile。鼠标右击桌面右上角的蓝牙图标,在弹出的菜单中点击“设备(D)”菜单项;选中手机设备,右击打开菜单项。
选择“设置(S)”菜单项,在设置菜单中,将手机配置为音频源,点击“Next”歌声终于从音箱播放出来了,一个基于树莓派的蓝牙音箱。
PS:打开手机端的Bluetooth数据包log的方法,可以参考前面的评测文章
一起玩树莓派3+蓝牙的配置与评测。
调试
为了调试树莓派Ubuntu的Bluez,安装bluez-hcidump,可以将协议栈的hci packet dump到文件中。
sudo apt-get install bluez-hcidump
将hci的log保存到bt.cfa中,使用FTS工具来分析。
hcidump –w /data/bt.cfa
本帖最后由 shenlan1986 于 2016-11-16 19:59 编辑