ESP32中Nimble和Bluedroid介绍
Nimble和Bluedroid是两大主流蓝牙协议栈。Nimble是Apache开源项目,专为BLE设计,资源占用极低(10KB RAM/50KB Flash),适合可穿戴设备和物联网节点等低功耗场景。Bluedroid由Google开发,支持BLE和经典蓝牙,作为Android默认协议栈功能更全面但资源消耗更高(50-100KB RAM),适合智能家居和音频设备等复杂应用。在ESP32上,Nim
两款都是主流的蓝牙协议栈,Nimble是由 Apache 基金会主导开发的开源蓝牙协议栈,主要支持BLE,专注于轻量级、低资源占用,Nimble 的 BLE 核心功能仅需约 10KB RAM(运行时)和 50KB Flash(代码),适合低功耗、资源受限的嵌入式设备,如 BLE 传感器(温湿度、运动传感器)、可穿戴设备(手环、手表)、物联网节点等,优先追求节能和轻量化。
Bluedroid主要由Google开发,同时支持BLE和经典蓝牙,作为 Android 系统的默认蓝牙协议栈,功能更全面,但资源消耗更高。仅 BLE 功能就需要约 50-100KB RAM,适合需要完整蓝牙功能的设备,如同时支持 BLE 和经典蓝牙的智能家居设备(蓝牙音箱、中控屏)、需要音频传输的设备(蓝牙耳机、车载系统),或依赖高阶 Profiles 的场景。
在ESP32中使用Nimble初始化流程如下:
1. 初始化NVS Flash:nvs_flash_init()
2. 初始化Nimble主机层和控制器:nimble_port_init()
3. 初始化GAP服务:ble_svc_gap_init()
4. 初始化GATT服务:ble_svc_gatt_init()
5. 添加GATT服务:ble_gatts_add_svcs()
6. 主机协议配置并保存:ble_store_config_init()
7. 启动Nimble协议主循环:nimble_port_run(),它会处理协议栈的事件队列,调度各种蓝牙操作,只有当主循环开始后,协议栈才会真正驱动射频硬件开始发送广播包。
在ESP32中使用Bluedroid初始化流程如下:
1. 初始化NVS Flash:nvs_flash_init()
2. 初始化蓝牙控制器:esp_bt_controller_init()
3. 使能蓝牙控制器模式:esp_bt_controller_enable(ESP_BT_MODE_BLE)
4. 初始化蓝牙协议栈:esp_bluedroid_init()
5. 使能蓝牙协议栈:esp_bluedroid_enable(),到此协议栈已经启动,不过没有开始广播。
6. 注册GAP服务事件回调函数:esp_ble_gap_register_callback(),不触发事件
7. 注册GATT服务事件回调函数:esp_ble_gatts_register_callback(),不触发事件
8. 注册应用程序:使用esp_ble_gatts_app_register(),注册完成后,会触发第一个事件,并引起连锁反应,开始执行如下操作:
8.1 配置GAP服务:配置广播数据和广播参数,然后开始广播;
8.2 配置GATT服务:配置GATT属性表,开启GATT服务
更多推荐



所有评论(0)