就是几块钱的骁龙410随身wifi,有蓝牙、wifi、4G。利用其蓝牙和wifi的功能,把蓝牙音箱接入到ha中。大致原理是将蓝牙音箱连接到刷了openwrt的随身wifi,再通过squeeze协议连接到ha。涉及到的软件包括,管理蓝牙连接的bluez,负责将蓝牙音箱转为alsa声卡的bluealsa(https://github.com/arkq/bluez-alsa, bluez5已经不支持alsa,所以转这么一道),负责连接squeeze协议的squeezelite。优点是随身wifi比较便宜,可以直接插在离蓝牙音箱近的地方,不受转发器(随身wifi)和ha之间的距离限制。不过现在市面上的骁龙410在慢慢减少了,能不能买得到看自己。
做的前期工作包括:
- 将msm8916(骁龙410)适配到主线openwrt
- 驱动wifi,蓝牙,声卡,modem,按钮等
- 适配固件文件系统至squashfs格式,ext4比较容易在插拔中损坏
- 添加一些额外的功能包
(原本是想作为ha在紧急情况下的短信和电话通知的网关,目前收发短信可以跑通,通话没有成功)
正式开始:
可以直接刷其他人的openwrt,但是过程中缺少的软件包需要自己补齐。
连接流程:
1、在随身wifi上刷入openwrt,确认蓝牙和wifi都正常,wifi连接至ha所在网络,并能ping通ha主机
2、确保openwrt内已安装bluez-daemon、squeezelite、bluealsa
这里提供一个我编译的bluealsa包,但是没在其他随身wifi上测试过,安装过程如果提示缺少其他依赖的包需要自己补全
bluez-alsa_4.1.1-1_aarch64_generic.ipk
(115.39 KB, 下载次数: 24)
#安装命令
opkg install bluez-alsa_4.1.1-1_aarch64_generic.ipk
4、重启一下,bluealsa会后台运行
5、蓝牙音箱开机,在随身wifi命令行内执行
#打开蓝牙连接工具
bluetoothctl
#扫描蓝牙
scan on
#等待蓝牙音箱的MAC地址和名字显示出来
connect 音箱MAC地址
#提示蓝牙成功,如果有异常,检查bluealsa是否已经运行,bluealsa未运行的情况下连不上音频
#信任蓝牙音箱
trust 音箱MAC地址
#退出
exit
中间出现的异常可能是蓝牙功能未驱动、缺少安装包之类的通病,拿着报错内容多谷歌一下
5、(可选)测试蓝牙音箱连接成功,正常可以继续
#上传一个测试音频并执行
aplay -D bluealsa 测试音频.wav
#如果连接了多个音箱可以指定音箱
aplay -D bluealsa:MAC地址 测试音频.wav
6、在ha中添加squeeze协议支持(集成>添加集成>SlimProto),集成会监听3483端口等待连接,记得开放这个端口(看不懂这句的大概率会卡住)
7、编辑/etc/config/squeezelite
config options 'options'
option name 'SqueezeWrt'
option model_name 'SqueezeLite'
option close_delay '0'
option priority '0'
option max_sr '0'
option device 'bluealsa:MAC地址'
option dsd_over_pcm '0'
option ircontrol '0'
option server_addr 'ha地址'
option enabled '1'
重启一下squeezelite
/etc/init.d/squeezelite restart
8、检查ha中的集成,顺利的话会出现一个播放器
9、完成。比如绑定到网易云音乐
TODO
当然还有更简单的方式:直接释出打包好的随身wifi固件,开发网页界面来自动连接和配置。但是根据我对论坛的观察,字越多流程越复杂越容易出问题的帖子才越有热度 : )
|