蓝牙功能测试

1. 手机连接蓝牙播放音频

1.1 给配置文件增加自定义 pcm 设备

确认 /etc/asound.conf 中有配置,没有的话追加配置:

cat >> /etc/asound.conf <<'EOF'
pcm.btplay {
    type plug
    slave {
        pcm "hw:0,0"
        rate 44100
        channels 1
        format S16_LE
    }
}
EOF

1.2 驱动、固件和设备使能

modprobe ATBM6x65_wifi_sdio
sleep 1
hciattach -s 1000000 ttyAS3 atbm 2000000
hciconfig hci0 up
hciconfig hci0

1.3 连接蓝牙

# 启动蓝牙守护进程
bluetoothd -n -d --noplugin=sap &
# 启动 bluez-alsa(A2DP sink 模式)
bluealsa -p a2dp-sink &
# 连接手机(交互式)
bluetoothctl
# 进入后依次输入:
[bluetooth]# ...
power on
discoverable on
pairable on
default-agent

在手机进行蓝牙连接操作,连接 BlueZ 5.54

在终端输入两次 yes


连接成功后退出 bluetoothctl 控制台

exit

1.4 蓝牙播放音频

# 打开声卡 0
amixer -c 0 set LINEOUTL on
amixer -c 0 set SPK on

# 启动 btplay 播放(MAC 替换为实际连接的手机,bluetoothctl日志有)
bluealsa-aplay -D btplay CC:42:10:1A:88:8E

# 或者自动选择设备
bluealsa-aplay -D btplay

在手机播放音频,开发板 3.5mm 接口有音频输出,测试完成

2. 蓝牙耳机连接播放音乐(主设备模式)

先准备一个 wav 格式音频文件,或者使用 /root/test.wav

2.1 驱动、固件和设备使能

modprobe ATBM6x65_wifi_sdio
sleep 1
hciattach -s 1000000 ttyAS3 atbm 2000000
hciconfig hci0 up
hciconfig hci0

2.2 扫描蓝牙耳机

# 启动蓝牙守护进程
bluetoothd -n --noplugin=sap &
# 启动 bluez-alsa(A2DP source 模式)
bluealsa -p a2dp-source &
# 连接耳机(交互式)
bluetoothctl
# 进入控制台依次输入:
[bluetooth]# ...
power on
discoverable on
pairable on
default-agent
scan on


看到需要连接的设备后执行 scan off 命令停止扫描

scan off
# 执行如下命令,配对并连接至目标设备
# mac 地址请根据实际情况修改
pair 7C:C9:5E:CA:A3:4D
connect 7C:C9:5E:CA:A3:4D


连接成功后退出控制台

exit

播放音频

aplay -D bluealsa:DEV=7C:C9:5E:CA:A3:4D ./test.wav

此时蓝牙耳机能听到声音,即测试成功。

3. 蓝牙传输文件

3.1 驱动、固件和设备使能

modprobe ATBM6x65_wifi_sdio
sleep 1
hciattach -s 1000000 ttyAS3 atbm 2000000
hciconfig hci0 up
hciconfig hci0

3.2 连接蓝牙

# 启动蓝牙守护进程
bluetoothd -n -d --noplugin=sap &
# 启动 bluez-alsa(A2DP sink 模式)
bluealsa -p a2dp-sink &
# 创建接收文件夹
mkdir /root/bt_recv && chmod 777 /root/bt_recv
# 启动 obexd
export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --fork --print-address) && /usr/libexec/bluetooth/obexd -n -d -r /root/bt_recv -a &
# 连接手机(交互式)
bluetoothctl
# 进入后依次输入:
[bluetooth]# ...
power on
discoverable on
pairable on
default-agent

蓝牙连接操作同上,连接完成退出控制台

exit

3.3 蓝牙接收文件

在手机用蓝牙发送文件,等待传输完成

3.3 蓝牙发送文件

进入 obexctl 控制台,输入指令发送文件,MAC 地址以实际连接为准

obexctl
[obex]# connect CC:42:10:1A:88:8E
[obex]# send /root/test.wav


接收文件传入,等待传输完成

4. 低功耗蓝牙

/etc/bluetooth/main.conf 中修改 ControllerMode = le 并去掉前面的注释符号 #

4.1 驱动、固件和设备使能

modprobe ATBM6x65_wifi_sdio
sleep 1
hciattach -s 1000000 ttyAS3 atbm 2000000
hciconfig hci0 up

4.2 启动蓝牙

# 启动蓝牙守护进程
bluetoothd -n -d --noplugin=sap &
# 启动 bluez-alsa(A2DP sink 模式)
bluealsa -p a2dp-sink &
bluetoothctl
# 进入后依次输入:
[bluetooth]# ...
power on
default-agent

4.3 注册 GATT 功能

# 进入 GATT 菜单,注册自定义服务
menu gatt

# 1. 注册 Service(会提示是否为主服务)
register-service 0000ffe0-0000-1000-8000-00805f9b34fb
# 出现提示 "Primary (yes/no):" 时输入:
yes

# 2. 注册 Characteristic(会提示输入初始值)
register-characteristic 0000ffe1-0000-1000-8000-00805f9b34fb read,write,notify
# 出现提示 "Enter value:" 时输入初始值(十六进制),如:
00

# 3. 将上面创建的服务注册到 BlueZ 守护进程
register-application

出现 Application registered

# 返回主菜单
back

# 开启 LE 广播,让手机能扫描到
advertise on

# 查看本机蓝牙地址
show

4.4 手机端操作

手机安装 nRF Connect for Mobile 或其他蓝牙调试工具,扫描连接开发板的蓝牙

连接成功后可以看到刚才注册的服务

点击向下箭头可以读取一次,切换到实时日志界面

返回点击向上箭头开始发送数据


发送成功

作者:陈柏林  创建时间:2026-09-15 16:24
最后编辑:陈柏林  更新时间:2026-10-12 11:13