You need to enable JavaScript to run this app. 两台树莓派4通过bluetoothctl配对成功后蓝牙连接失败问题求助
优惠活动
大模型
产品
解决方案
定价
更多

两台树莓派4通过bluetoothctl配对成功后蓝牙连接失败问题求助

问题

我正在做一个项目,需要将一台树莓派设为BLE GATT服务器,另一台设为客户端。第一步我先尝试通过命令行测试常规蓝牙连接,但连接失败,暂时找不到故障原因。
两台设备均为树莓派4 Model B:第一台运行Raspbian Buster系统,内核版本为Linux raspberrypi 5.10.17-v7l+;第二台运行Ubuntu 20.04 Server系统,内核版本为Linux ubuntu 5.4.0-1036-raspi。
我使用bluetoothctl工具配置,先在从设备端执行agent on、discoverable on、pairable on开启可发现可配对状态,再在主设备端执行scan on扫描设备。主设备成功扫描到从设备的MAC地址后,我执行pair DC:A6:32:2C:D4:90发起配对。配对看似成功,但全程没有弹出密码输入提示:
从设备树莓派输出日志如下:

Changing discoverable on succeeded
[CHG] Controller DC:A6:32:2C:D4:90 Discoverable: yes
[NEW] Device DC:A6:32:FD:47:E0 ubuntu
[CHG] Device DC:A6:32:FD:47:E0 Modalias: usb:v1D6Bp0246d0535
[CHG] Device DC:A6:32:FD:47:E0 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:FD:47:E0 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:FD:47:E0 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:FD:47:E0 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:FD:47:E0 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:FD:47:E0 ServicesResolved: yes
[CHG] Device DC:A6:32:FD:47:E0 Paired: yes
[CHG] Device DC:A6:32:FD:47:E0 ServicesResolved: no
[CHG] Device DC:A6:32:FD:47:E0 Connected: no

主设备树莓派输出日志如下:

Attempting to pair with DC:A6:32:2C:D4:90
[CHG] Device DC:A6:32:2C:D4:90 Connected: yes
[CHG] Device DC:A6:32:2C:D4:90 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:2C:D4:90 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:2C:D4:90 UUIDs: 0000112d-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:2C:D4:90 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device DC:A6:32:2C:D4:90 ServicesResolved: yes
[CHG] Device DC:A6:32:2C:D4:90 Paired: yes
Pairing successful
[CHG] Device DC:A6:32:2C:D4:90 ServicesResolved: no
[CHG] Device DC:A6:32:2C:D4:90 Connected: no

从输出可以看到,另一台运行Ubuntu系统的树莓派设备名为ubuntu,MAC地址为DC:A6:32:FD:47:E0。配对过程中连接仅能维持几秒就会自动断开,我后续在主设备端执行connect DC:A6:32:2C:D4:90主动发起连接,同样出现相同的断连问题,报错信息如下:

[CHG] Device DC:A6:32:2C:D4:90 Connected: yes
[CHG] Device DC:A6:32:2C:D4:90 ServicesResolved: yes
Failed to connect: org.bluez.Error.NotAvailable
[CHG] Device DC:A6:32:2C:D4:90 ServicesResolved: no
[CHG] Device DC:A6:32:2C:D4:90 Connected: no

我尝试过使用sudo运行bluetoothctl、将对方设备添加为信任设备,都没有解决问题。
补充:我后来在两台设备上都执行了default-agent命令,这次配对时弹出了PIN码确认提示,但确认后连接依然失败。

解决方案

你遇到的是经典蓝牙和BLE混用的逻辑问题,当前测试的是经典蓝牙连接流程,但你的目标是BLE GATT通信,两者的连接逻辑完全独立,经典蓝牙连接断连不影响BLE功能使用,具体修复步骤如下:

  • 第一步:清理旧配对缓存
    两台设备分别执行bluetoothctl进入交互界面,执行remove <对方MAC地址>删除之前的配对记录,避免旧缓存干扰后续操作,执行完后输入quit退出。
  • 第二步:修改蓝牙配置优先使用BLE模式
    两台设备都编辑/etc/bluetooth/main.conf文件,修改以下参数:
    AutoEnable=true
    ControllerMode = le # 只启用BLE模式,屏蔽经典蓝牙逻辑干扰
    Privacy = off # 关闭BLE地址随机化,方便固定MAC扫描连接
    
    修改完成后执行sudo systemctl restart bluetooth重启蓝牙服务生效。
  • 第三步:直接走BLE GATT连接流程,跳过经典蓝牙配对步骤
    1. 在作为GATT服务器的设备上进入bluetoothctl,执行advertise on开启BLE广播
    2. 在客户端设备上进入bluetoothctl,执行scan le只扫描BLE设备,确认能扫到服务器的MAC地址后执行scan off停止扫描
    3. 客户端直接执行gatt.connect <服务器MAC地址>建立BLE GATT连接,不需要提前执行pair或普通connect命令
  • 关于报错org.bluez.Error.NotAvailable的说明:
    这个报错是经典蓝牙连接触发的,原因是你两端都没有注册任何经典蓝牙服务(比如音频、串口Profile),bluez检测到没有可用服务就主动断开了连接,完全不影响BLE GATT通信,不需要针对这个报错额外处理。

内容的提问来源于stack exchange,提问作者LowRez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 14:54:04