Ricky Hao

Raspberry Pi 4:使用bluez和bluealsa,将树莓派改造为蓝牙音箱

概述

家里有个不带蓝牙的音箱,而带蓝牙的小爱同学Mini又居然是单声道,因此,为了让音箱能连上蓝牙,只能掏出我珍藏已久的树莓派4了。
我的Raspberry Pi 4装的是ArchLinux AArch64,至于别的发行版不是很清楚,不过应该可以作为参考使用

安装

bluez

可以使用pacman或者yay等其他包管理直接安装(官方源就有)

bluez-alsa-git

这个包仅在AUR源有,我使用的是yay,因此能够直接安装。
也可以通过以下步骤手动编译安装:

  • git clone https://aur.archlinux.org/bluez-alsa-git.git
  • makepkg -sri

配置

config.txt

树莓派默认是未启动Bluetooth蓝牙和Audio音频功能的,我们需要在/boot/config.txt内增加以下语句来打开蓝牙和音频,并强制将音频输出改为3.5mm接口:

dtparam=krnbt=on,audio=on
audio_pwm_mode=2
hdmi_drive=1
hdmi_ignore_edid_audio=1

bluez

首先,我们需要设置bluetooth.service为自启动:

  • sudo systemctl enable bluetooth

然后,编辑/etc/bluetooth/main.conf,修改以下选项来实现蓝牙设备的开机自启:

[General]
Name = RaspberryPi4     # 可以改为自己的设备名称
DiscoverableTimeout = 0
Discoverable = true     # 默认开启可发现模式(实测可能没用)
[Policy]
AutoEnable = true       # 自动启动蓝牙设备

bluez-alsa

接下来,我们需要对bluez-alsa进行配置。
编辑/etc/default/bluealsa

OPTIONS="-p a2dp-source -p a2dp-sink -p hfp-hf -p hfp-ag -p hsp-hs -p hsp-ag"

这一步的作用是设置bluez-alsa的默认支持配置。
之后,我们编辑/etc/dbus-1/system.d/bluealsa.conf,在其中的<policy user="root">下增加两行:

<allow send_destination="org.bluealsa.sink" />
<allow send_destination="org.bluealsa.source" />

然后我们设置bluez-alsa自启动:

sudo systemctl enable bluealsa.service

为了能够让bluealsa-aplay自启动,我们还需要增加一个/usr/lib/systemd/system/bluealsa-aplay.service服务:

[Unit]
Description=Bluealsa Aplay daemon
Documentation=https://github.com/Arkq/bluez-alsa/
After=bluealsa.service
Requires=bluealsa.service

[Service]
Type=simple
ExecStart=/usr/bin/bluealsa-aplay
Restart=on-failure

[Install]
WantedBy=bluetooth.target

这个服务用于将我们蓝牙传输的音频,发送到ALSA设备:

sudo systemctl enable bluealsa-aplay

最后,重启树莓派。

连接蓝牙

树莓派重启后,先给自己当前用户增加bluez的用户组lp

sudo usermod -a -G lp ricky

通过bluetoothctl,进行蓝牙配置:

$ sudo bluetoothctl
[Bluetooth] discoverable on

然后手机搜索并连接树莓派蓝牙,期间会出现几个(yes/no)的询问,一致yes就行。
最后,设置信任设备:

[Bluetooth] trust xx:xx:xx:xx

这样,我们就可以将手机通过蓝牙连接到树莓派播放音乐了。

参考

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据