ESP32蓝牙BLE连接手机全攻略
摘要: 手机连接ESP32-BLE需完成硬件准备、代码烧录(包含GATT服务和安全认证)及手机端操作。步骤如下:1) 烧录ESP32代码(含心率服务0x180D和密码123456),2) 手机通过nRF Connect等APP扫描并连接设备,3) 输入密码完成配对,4) 通过0x2A37特征接收数据(启用Notify)或0x2A39特征发送指令。常见问题包括设备未广播(检查日志)、配对失败(核对密
要在手机上与ESP32通过蓝牙(BLE)连接,需结合硬件准备、代码配置和手机端操作三个环节。以下是详细步骤(基于你提供的ESP32 BLE代码):
一、准备工作
-
ESP32硬件与代码
- 确保ESP32开发板正常工作(供电、串口连接正常)。
- 将你提供的
Dri_BLE.c代码烧录到ESP32中(需配合ESP-IDF环境编译,确保蓝牙初始化函数Dri_BT_Init()被正确调用,例如在app_main()中启动)。 - 代码中已配置BLE广播、GATT服务(心率服务0x180D)和安全认证(静态密码123456),烧录后ESP32会自动启动蓝牙广播。
-
手机端工具
手机需安装支持BLE调试的APP(推荐以下工具,支持查看服务、发送/接收数据):- 安卓:nRF Connect(Nordic官方工具,功能全面)、BLE调试助手。
- iOS:LightBlue Explorer、nRF Connect for Mobile。
二、手机连接ESP32的详细步骤
1. 确保ESP32正常广播
代码中ESP32启动后会自动初始化蓝牙并开始广播(通过esp_ble_gap_start_advertising()),广播名称由esp_ble_gap_set_device_name(EXAMPLE_DEVICE_NAME)设置(需在代码中确认EXAMPLE_DEVICE_NAME的定义,例如可能是"ESP32-HRS")。
- 若ESP32未广播,检查代码中
Dri_BT_Init()是否被调用,或通过串口日志(如ESP_LOGI输出)确认蓝牙初始化是否成功(搜索日志中"advertising start success"的提示)。
2. 手机搜索并发现ESP32设备
- 打开手机蓝牙(系统设置中开启)。
- 打开BLE调试APP(以nRF Connect为例):
- 点击APP首页的“SCAN”按钮,开始扫描周围的BLE设备。
- 在扫描列表中找到ESP32的设备名称(如
"ESP32-HRS"),其广播数据中会包含心率服务UUID(0x180D),可辅助确认。
3. 建立连接
- 点击列表中的ESP32设备名称,APP会尝试与ESP32建立连接。
- 连接过程中,ESP32的串口日志会输出
"ESP_GATTS_CONNECT_EVT",表示连接成功。
4. 处理配对与安全认证(关键步骤)
你的代码中配置了严格的安全认证(ESP_LE_AUTH_REQ_SC_MITM_BOND),需要配对并输入密码:
- 连接后,手机会弹出配对请求(不同手机提示可能不同,如“需要配对以继续连接”)。
- 按照提示输入静态密码(代码中设置为
123456,见esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, ...))。 - 配对成功后,ESP32串口日志会输出
"auth mode = ESP_LE_AUTH_REQ_SC_MITM_BOND"和"pair status = success",表示加密连接建立完成。
5. 与GATT服务交互(发送/接收数据)
连接成功后,APP会显示ESP32提供的GATT服务列表,找到“Heart Rate Service”(UUID:0x180D),展开后可看到3个特征(对应代码中的heart_rate_gatt_db):
-
接收ESP32数据(通知):
找到“Heart Rate Measurement”特征(UUID:0x2A37),点击进入后启用“Notify”(通过客户端配置描述符CCC开启)。ESP32可通过该特征主动向手机发送数据(需在代码中调用esp_ble_gatts_send_notify()实现,例如模拟心率值)。 -
向ESP32发送数据:
找到“Heart Rate Control Point”特征(UUID:0x2A39),该特征支持“Write”操作(代码中ESP_GATTS_WRITE_EVT事件会触发App_Communication_RecvDataCb回调)。- 在APP中点击“WRITE”或“WRITE WITHOUT RESPONSE”,输入要发送的数据(如字符串或十六进制),点击发送。
- ESP32会通过
App_Communication_RecvDataCb接收数据,你可在该回调中添加自定义处理逻辑(如打印、解析指令)。
三、常见问题与解决
-
搜索不到ESP32设备
- 检查ESP32是否正常广播(日志中是否有
"advertising start success")。 - 确保手机蓝牙已开启,且与ESP32距离较近(BLE有效距离通常在10米内)。
- 若设备名称正确但未显示,尝试重启ESP32或手机蓝牙。
- 检查ESP32是否正常广播(日志中是否有
-
配对失败/密码错误
- 确认代码中静态密码是否为
123456(若被修改,需使用对应密码)。 - 若提示“认证失败”,检查代码中安全参数配置(如
auth_req是否设置过高,可暂时改为ESP_LE_AUTH_BOND降低安全级别测试)。
- 确认代码中静态密码是否为
-
无法发送/接收数据
- 确认特征UUID是否正确(发送数据需用0x2A39,接收通知需用0x2A37)。
- 检查ESP32是否正确处理
ESP_GATTS_WRITE_EVT事件(代码中已通过App_Communication_RecvDataCb传递数据,需确保该函数被正确实现)。
通过以上步骤,手机即可与ESP32建立稳定的BLE连接,并实现双向数据交互。调试时建议结合ESP32的串口日志(输出各类事件和数据)和手机APP的日志(查看发送/接收的原始数据),快速定位问题。
更多推荐



所有评论(0)