[原创] 一起玩树莓派3+树莓派蓝牙音箱

shenlan1986   2016-11-16 19:54 楼主
在树莓派上安装UbuntuMATE后,在系统中安装VNC、ftp、SSH等软件,配置好开发环境,然后就是打造一个基于树莓派的蓝牙音箱。
为什么不在Raspbian系统中来实现?通过前期的评测发现,在Raspbian系统中,蓝牙功能不是很稳定,Blueman和系统自带的pi-bluetooth有冲突的地方,在配对的时候能够明显发现这个问题,两个应用在获取系统消息时会导致对方状态出现问题。而Ubuntu的蓝牙功能相对稳定很多。
准备工作
为了实现蓝牙音箱,我们还需要一些外设,3.5mm的音频线,一个音箱。音箱我使用的是一个多功能移动电源,自带音箱功能。
IMG_20161116_162137.jpg IMG_20161116_162159.jpg
将音箱和树莓派的3.5mm音频接口连接起来,测试环境搭建完成。
系统图.jpg
通过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。

配对完成.png 设备属性.png

从树莓派 UbuntuMATE通过蓝牙发送文件到手机,能够正常发送。

发送文件.png

配置树莓派蓝牙音箱
手机通过蓝牙连上树莓派后,播放音乐。额,没有声音!? 从手机的文件管理软件中发现btsnoop_hci.log的size一直在增加,说明Audio 数据是通过蓝牙发送到树莓派了,怀疑问题应该是在树莓派端运行的Bluez有问题。 分析手机端的log,将文件拷贝到电脑,修改后缀为.cfa文件,双击btsnoop_hci.cfa文件打开,分析可以发现蓝牙协议栈运行正常,音频数据也发送到对端。因此猜测双方蓝牙协议栈运行都是正常的,是树莓派的声音路由策略的问题。 在树莓派中配置设备连接的profile。鼠标右击桌面右上角的蓝牙图标,在弹出的菜单中点击“设备(D)”菜单项;选中手机设备,右击打开菜单项。
选中手机.png
选择“设置(S)”菜单项,在设置菜单中,将手机配置为音频源,点击“Next”歌声终于从音箱播放出来了,一个基于树莓派的蓝牙音箱。
设置音频.png
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
dump.png
本帖最后由 shenlan1986 于 2016-11-16 19:59 编辑

回复评论 (1)

给力, 多谢楼主
点赞  2017-6-23 09:42
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复