Raspberry Pi3 BLE连接配对错误111(连接被拒绝)及自动断开问题求助
解决树莓派BLE扫描器与信标连接后秒断&Connection Refused 111问题
我遇过不少树莓派BLE连接的这类问题,咱们一步步来排查和解决:
一、先确认两台设备的蓝牙基础状态
先把最基础的问题排除:
- 两台设备都执行
sudo systemctl status bluetooth,确保蓝牙服务是active (running)状态。如果不是,重启服务:sudo systemctl restart bluetooth - 进入
bluetoothctl输入show,检查Powered: yes是否存在,没有的话输入power on开启BLE功能。
二、重点检查信标(Zero W)的可连接配置
很多时候秒断是因为信标默认只做广播,不接受持续连接:
- 用
bluetoothctl把Zero W设置为可连接状态:
这几步会让Zero W允许被发现、配对,并且启用代理处理连接请求。bluetoothctl discoverable on pairable on agent on default-agent exit - 调整蓝牙栈的超时参数,避免空闲时自动断开:
编辑/etc/bluetooth/main.conf,添加或修改以下内容:
保存后重启蓝牙服务:# 禁用自动连接超时,保持长期连接 ConnectionTimeout = 0 AutoConnectTimeout = 0sudo systemctl restart bluetooth - 如果你用了自定义的信标脚本(比如Python实现的iBeacon),要确保脚本不是广播-only模式,必须包含处理连接请求的逻辑——很多默认信标代码只发广播,不会响应连接,自然会秒断。
三、优化扫描器(Pi3B)的连接设置
- 连接时尝试指定稳定参数:
- 先扫描获取信标MAC:
bluetoothctl scan on,找到后scan off - 执行
connect <信标MAC>,如果断开,进入GATT菜单查看服务:menu gatt,然后list-attributes。如果能列出属性,说明连接本身没问题,只是没有持续交互触发了超时。
- 先扫描获取信标MAC:
- 关闭蓝牙节能避免自动断连:
执行以下命令禁用经典蓝牙、开启BLE并关闭节能:sudo btmgmt power off sudo btmgmt power on sudo btmgmt bredr off sudo btmgmt le on
四、解决Connection Refused 111错误
这个错误一般是服务端没监听连接,或者权限/端口占用问题:
- 必须用
sudo bluetoothctl操作,普通用户权限不足会导致连接被拒绝。 - 检查Zero W上是否有其他BLE进程占用端口:重启Zero W或者用
sudo killall python(如果用了Python脚本),确保之前的BLE服务完全退出。 - 重置蓝牙适配器:两台设备都执行:
sudo hciconfig hci0 down sudo hciconfig hci0 up
五、测试持续连接的验证方法
可以在Zero W上跑一个简单的可连接BLE服务,验证连接稳定性:
from bleak import BleakServer import asyncio async def run_ble_server(): # 替换成你的Zero W蓝牙MAC server = BleakServer("AA:BB:CC:DD:EE:FF") await server.start() print("BLE服务已启动,等待连接...") # 保持服务运行,不会自动退出 await asyncio.Event().wait() asyncio.run(run_ble_server())
运行这个脚本后,在Pi3B上用bluetoothctl连接,连接后尝试读取属性,看看是否还会断开。
一般来说,做完前两步就能解决大部分秒断问题——核心是让信标从“广播-only”切换到“可连接”模式,再调整超时参数避免空闲断开。
内容的提问来源于stack exchange,提问作者user2388773
相关产品推荐
相关产品推荐

