You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32如何与手机实现蓝牙配对及无人工干预自动连接?

ESP32 蓝牙配对+靠近检测实现方案

首先明确核心逻辑误区:传统蓝牙配对绑定无法解决非发现模式下的设备扫描问题。手机未打开蓝牙发现页面时,不会主动发送传统蓝牙广播包,哪怕之前完成过配对,ESP32也扫不到对应设备,必须改用BLE(蓝牙低功耗)方案实现需求。

方案整体逻辑

把ESP32配置为BLE外围设备,开启固定UUID的可连接广播;首次使用时手动完成一次配对绑定,双方存储链路密钥;后续手机系统后台会持续探测周边匹配UUID的BLE设备,不需要人工打开蓝牙发现页,ESP32扫描到已绑定设备的信号、RSSI达到预设阈值时即可判定为靠近,自动建立连接。

ESP-IDF 框架实现步骤

  • 初始化BLE协议栈后,优先配置安全管理(SM)模块:设置IO能力为ESP_BLE_IO_CAP_NO_INPUT_NO_OUTPUT(无输入输出模式),开启绑定认证、中间人保护,设置密钥长度16字节,配对时手机端仅需点击一次确认弹窗即可完成绑定,链路密钥会自动存储到NVS分区,后续靠近不需要重复配对。
  • 配置BLE主动扫描参数:扫描窗口占空比设置为50%以上,设置扫描过滤规则,仅响应已绑定设备MAC地址的广播包,过滤无关设备降低功耗。
  • 实现自动连接逻辑:在扫描结果回调中读取已绑定设备的RSSI值,当RSSI连续3次采样高于预设阈值(通常-60dBm对应1米内距离,可根据实际场景调整),自动发起GATT连接,连接建立后即可完成靠近识别。
  • 核心安全配置代码参考:
// BLE配对安全参数配置
esp_ble_auth_req_t auth_req = ESP_BLE_AUTH_REQ_BOND | ESP_BLE_AUTH_REQ_MITM;
esp_ble_io_cap_t iocap = ESP_BLE_IO_CAP_NO_INPUT_NO_OUTPUT;
uint8_t key_size = 16;
uint8_t init_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_DISTRIBUTE_ID_ADDR_KEY_MASK;
uint8_t rsp_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_DISTRIBUTE_ID_ADDR_KEY_MASK;
esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(uint8_t));
esp_ble_gap_set_security_param(ESP_BLE_SM_IOCAP_MODE, &iocap, sizeof(uint8_t));
esp_ble_gap_set_security_param(ESP_BLE_SM_MAX_KEY_SIZE, &key_size, sizeof(uint8_t));
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_INIT_KEY, &init_key, sizeof(uint8_t));
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_RSP_KEY, &rsp_key, sizeof(uint8_t));

Arduino 框架实现步骤

不需要切换到ESP-IDF,Arduino-ESP32内置的BLE库已经完整封装了配对绑定能力,之前找不到参考是因为关键词错误,不要搜索“蓝牙配对”,对应功能关键词为BLE bonded device。

  • 初始化BLE设备后,调用BLEDevice::setSecurityAuth(true, true, true)开启绑定认证、安全连接,设置IO能力为无输入输出模式。
  • 配置BLE广播包,写入自定义的服务UUID,首次配对成功后将手机MAC地址存储到Preferences非易失存储中。
  • 启动BLE扫描,在扫描回调中过滤已存储的绑定设备MAC,读取RSSI值做阈值判断,满足条件时自动发起连接即可。
  • 系统权限注意:安卓12及以上版本需要给对应BLE程序授予“始终允许位置权限”“后台扫描权限”才能实现无感知探测;iOS端不需要独立APP,系统自带的快捷指令自动化即可实现检测到对应UUID设备时自动触发连接。

避坑提示

  • 不要使用传统蓝牙(BR/EDR/SPP/HID)实现该需求:传统蓝牙模式下,手机仅在打开系统蓝牙设置的发现页面时才会响应扫描请求,完全无法满足无人工干预的靠近检测需求。
  • 配对绑定仅完成双方链路密钥的存储,不会触发系统级自动连接,自动连接逻辑需要在扫描回调中自行实现,不存在“配对后自动连”的默认行为。
  • RSSI受环境遮挡、多径效应影响较大,不要使用单次采样值做判断,建议增加3-5次采样的滑动滤波,减少误触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:09:20