介绍
此文档概述了 ESP-IDF 中低功耗蓝牙协议栈的架构,并提供了一些相关文档和应用示例的快速链接。
ESP32-C2 支持蓝牙 5.0 (LE),并且已经获得蓝牙 LE 5.3 认证。
ESP-IDF 中的低功耗蓝牙协议栈是一个分层架构,可在 ESP32-C2 系列芯片上实现低功耗蓝牙功能,详见下。
参考下表可知特定芯片是否支持低功耗蓝牙模块。
芯片系列 |
控制器 |
ESP-Bluedroid |
ESP-NimBLE |
ESP-BLE-MESH |
BluFi |
---|---|---|---|---|---|
ESP32 |
Y |
Y |
Y |
Y |
Y |
ESP32-S2 |
– |
– |
– |
– |
– |
ESP32-S3 |
Y |
Y |
Y |
Y |
Y |
ESP32-C2 |
Y |
Y |
Y |
– |
Y |
ESP32-C3 |
Y |
Y |
Y |
Y |
Y |
ESP32-C6 |
Y |
Y |
Y |
Y |
Y |
ESP32-H2 |
Y |
Y |
Y |
Y |
– |
以下各节简要介绍了每个层,并提供了相关文档和应用示例的快速链接。
ESP 蓝牙控制器
底层为 ESP 蓝牙控制器,包含 PHY、基带、链路控制器、链路管理器、设备管理器和 HCI 等各种模块。该层管理硬件接口和链路,以库的形式提供功能,并通过 API 访问,且直接与硬件和低级别蓝牙协议交互。
ESP 蓝牙主机
有 ESP-Bluedroid 和 ESP-NimBLE 两个主机,其主要区别如下:
虽然两者都支持低功耗蓝牙,但 ESP-NimBLE 需要的堆和 flash 空间更少。
ESP-Bluedroid
ESP-Bluedroid 是原生 Android 蓝牙协议栈 Bluedroid 的修改版,由两层组成:蓝牙上层 (BTU) 和蓝牙传输控制器层 (BTC)。BTU 层负责处理 L2CAP、GATT/ATT、SMP、GAP 等底层蓝牙协议以及其他配置文件,提供以 "bta" 为前缀的接口。BTC 层主要负责向应用层提供以 "esp" 为前缀的支持接口,并处理基于 GATT 的配置文件以及其他任务。所有的 API 都位于 ESP_API 层,开发者应使用以 "esp" 为前缀的低功耗蓝牙 API。
ESP32-C2 的 ESP-Bluedroid 仅支持低功耗蓝牙,不支持经典蓝牙。
API 参考
ESP-NimBLE
ESP-NimBLE 是建立在 Apache Mynewt 开发的 NimBLE 主机协议栈之上的主机协议栈,已经为 ESP32-C2 系列芯片和 FreeRTOS 进行了移植。通过维持现有 NimBLE API,并添加一个单独的 ESP-NimBLE API 进行初始化,使端口层保持简洁,也便于开发者操作。
ESP-NimBLE 仅支持低功耗蓝牙,不支持经典蓝牙。
蓝牙规范
主机协议层之上是 Espressif 的蓝牙规范和一些常见的蓝牙规范。根据具体配置,这些规范可以在 ESP-Bluedroid 或 ESP-NimBLE 上运行。
BluFi
ESP32-C2 的 BluFi 是通过蓝牙信道进行的 Wi-Fi 网络配置功能。BluFi 提供了将 Wi-Fi 配置和凭据传递给 ESP32-C2 的安全协议,从而使 ESP32-C2 连接到 AP 或搭建软 AP。
应用
最上层是应用层。利用上述 API 和蓝牙规范,可以在 ESP-Bluedroid 和 ESP-NimBLE 协议栈之上创建特定用例的低功耗蓝牙应用程序。