蓝牙配置与数据交换(Raspberry Pi 5)
本文档演示如何在 Raspberry Pi 5 上配置经典蓝牙(A2DP),并将音频推送到小米音箱。
一、前提条件
- 小米音箱已开启并处于配对模式。
二、安装基础组件
- 更新系统并安装蓝牙服务:
sudo apt update
sudo apt install -y bluez bluetooth
- 启用并启动蓝牙服务:
sudo systemctl enable --now bluetooth
sudo systemctl status bluetooth # 检查蓝牙服务状态
三、经典蓝牙(A2DP)音频输出
- 启动
bluetoothctl
:
bluetoothctl
- 在交互式命令行依次执行:
[bluetooth]# power on # 打开蓝牙适配器
[bluetooth]# agent on # 启用配对代理
[bluetooth]# default-agent # 将其设为默认代理
[bluetooth]# scan on # 扫描设备,直到看到小爱音箱的 MAC 地址
- 配对并信任设备:
pair <MAC> # 配对
trust <MAC> # 信任
connect <MAC> # 连接
- 设置默认音频输出:
pactl list sinks # 列出所有输出设备
pactl set-default-sink <Sink_Name> # 将蓝牙音箱设为默认
- 测试播放:
sudo apt install -y sox libsox-fmt-mp3
play -n synth 3 sine 440 # 播放3秒440Hz正弦波
四、安装并配置音频后端
本指南仅支持 BlueALSA。
- 安装 BlueALSA 及相关工具:
sudo apt update
sudo apt install -y bluealsa alsa-utils
- 启用并启动 BlueALSA 服务:
sudo systemctl enable --now bluealsa
- 使用 BlueALSA 播放示例:
aplay -D bluealsa:HCI=hci0,DEV=<MAC>,PROFILE=a2dp sample.wav
mpg123 -a bluealsa:HCI=hci0,DEV=<MAC>,PROFILE=a2dp sample.mp3
五、Python 脚本播放示例
- 安装 Python ALSA 支持:
sudo apt install -y python3-alsaaudio
- 运行示例脚本:
python3 main.py /home/pi/Music/song.wav bluealsa:HCI=hci0,DEV=<MAC>,PROFILE=a2dp
- 在自定义脚本中调用:
from bluealsa_player import play_wav_via_bluealsa
play_wav_via_bluealsa(
'/home/pi/Music/song.wav',
'bluealsa:HCI=hci0,DEV=<MAC>,PROFILE=a2dp'
)
六、常见故障排除
- 无声音:
- 检查连接状态:
bluetoothctl info <MAC>
。 - 确认 Sink 已设置为默认:
pactl info
。 - 权限错误:
- 将用户加入
audio
组并重启:
sudo usermod -aG audio $USER && reboot
- 延迟或掉帧:
- 尝试减小 ALSA
period size
,或切换到 PulseAudio/PipeWire。
七、配置技巧
通过在 ~/.asoundrc
中将 BlueALSA 设置为默认 PCM,可以在播放音频时省去指定 MAC 地址 和 协议 的步骤,命令变得更简洁。例如:
pcm.!default {
type plug
slave.pcm {
type bluealsa
device "<MAC>"
profile "a2dp"
interface "hci0"
}
}
ctl.!default {
type bluealsa
}
配置完成后,只需直接执行:
aplay sample.wav
mpg123 sample.mp3