没志青年
发布于 2025-07-19 / 21 阅读
0

ESP32 BLE 蓝牙通信

概述 - ESP32-S3 - — ESP-IDF 编程指南 v5.5 文档

ESP-BLE-MESH - ESP32-S3 - — ESP-IDF 编程指南 v5.5 文档

  • 经典蓝牙(Classic BT):传统蓝牙,功能全面,用于持续传输大数据,比如蓝牙耳机、蓝牙音箱、车载免提。

  • 低功耗蓝牙 (BLE):低功耗蓝牙,推荐嵌入式设备使用,用于间歇性地发送小数据,比如智能手环、智能门锁。

ESP32 中的蓝牙主机协议栈:

  • Bluedroid:经典蓝牙、低功耗蓝牙

  • NimBLE:低功耗蓝牙

示例程序:

  • Beacon:只广播,不连接。

  • Connection:作为客户端(Central),去扫描并连接别人。

  • GATT Server:作为服务端(Peripheral),让别人来连接和读写。

  • Security:NimBLE 安全认证功能

Gap Server

定义了 设备如何被发现、如何建立连接

Gatt Server

定义了 连接后,设备之间如何传输数据

在 NimBLE 里,GAP 是前台的“门口保安”,GATT 是里面的“服务员”。

esp32的经典蓝牙既可以作为服务器又可以作为客户端。

esp32的nimble也可以,但是通常作为服务设备。Peripheral 角色作为服务器,被别的设备连接;Central角色作为客户端,主动连接别的设备。

示例程序调试步骤:介绍 - ESP32-S3 - — ESP-IDF 编程指南 v5.5 文档

手机测试软件下载:Releases · NordicSemiconductor/Android-nRF-Connect

服务/特征 UUID:

  • Bluetooth SIG 定义的标准 Service / Characteristic 的 uuid:16 位

  • 开发者自定义服务的 uuid:128 位

特征的操作标志:

  • BLE_GATT_CHR_F_READ:读,有确认机制

  • BLE_GATT_CHR_F_WRITE:写,有确认机制

  • BLE_GATT_CHR_F_WRITE_NO_RSP:写,无确认机制

BLE_GATT_CHR_F_NOTIFY

BLE_GATT_CHR_F_INDICATE

说明

服务端主动推送数据到客户端,客户端无需确认

发布/订阅模型,客户端订阅,服务端主动推送数据,有确认机制

可靠性

不可靠(可能丢包)

可靠(有确认机制保证送达)

延迟

使用场景

推送高频率的传感器数据

重要事件/状态更新

编译前必须开启蓝牙服务:

Component config → Bluetooth → Bluedroid/NimBLE

否则会找不到相关头文件而报错。

组网

Mesh 组网示例: