ESP32无法运行经典蓝牙SPP acceptor示例问题求助
ESP32经典蓝牙SPP Acceptor配对后自动断开,无法触发ESP_SPP_SRV_OPEN_EVT
问题现象
运行ESP-IDF官方经典蓝牙SPP Acceptor示例,使用示例默认sdkconfig配置,出现以下异常:
- 手机搜索到ESP32设备并发起连接,手机弹出配对码窗口,终端输出日志:
W (162921) BT_HCI: hcif conn complete: hdl 0x80, st 0x0 W (162940) BT_HCI: hcif link supv_to changed: hdl 0x80, supv_to 8000 - 手机完成配对认证后,终端立即收到断开日志:
W (245220) BT_HCI: hci cmd send: disconnect: hdl 0x80, rsn:0x13 W (245296) BT_HCI: hcif disc complete: hdl 0x80, rsn 0x16 - 始终无法触发
ESP_SPP_SRV_OPEN_EVT回调,测试ESP32 WROOM-32(无法完成配对)和ESP32 PICO MINI 02(配对后自动断开)均出现问题,切换PCM/HCI配置无改善。
排查与解决方向
1. 调整蓝牙安全配对配置
- 确认sdkconfig中
CONFIG_BT_SSP_ENABLE(安全简单配对)已开启,部分手机仅支持SSP模式,关闭该选项会导致配对后异常断开。 - 修改
CONFIG_BT_AUTH_MODE配置,尝试切换为BT_AUTH_MODE_SC(带加密的安全连接)或BT_AUTH_MODE_LEGACY(传统配对),不同手机对配对模式的兼容性存在差异。
2. 解析断开原因码定位问题
日志中的断开原因码对应蓝牙标准定义:
rsn:0x13:远程设备因资源不足终止连接rsn:0x16:连接被本地主机终止
通过开启详细日志进一步排查:- 在sdkconfig中开启
CONFIG_BT_DEBUG_LOG和CONFIG_BT_HCI_DEBUG_LOG,获取配对过程中更完整的交互细节,明确是ESP32主动断开还是手机端触发。
3. 优化蓝牙连接参数
- 修改示例中的蓝牙监督超时参数,在
bt_spp_acceptor.c中调整连接超时相关配置,增大监督超时(supv_to)值,避免因超时导致连接断开。 - 确认
CONFIG_BT_BLE_ENABLE已关闭,经典蓝牙示例无需启用BLE模式,误开启可能干扰经典蓝牙连接流程。
4. 硬件兼容性排查
- 对于ESP32 PICO MINI 02模块,检查PCB天线是否被金属遮挡,信号强度不足可能导致配对后连接不稳定。
- 测试不同品牌的安卓/iOS设备,排除手机蓝牙协议栈与ESP32的兼容性问题。
5. 更新ESP-IDF版本
部分旧版本ESP-IDF存在经典蓝牙配对的已知bug,建议升级到最新稳定版(如v4.4.x或v5.1.x系列),重新编译烧录示例程序。
内容的提问来源于stack exchange,提问作者Agustin Cruz
相关产品推荐
相关产品推荐

