BLE 完全笔记 —— ESP32 + ESP-IDF 实现

BLE 完全笔记 —— ESP32 + ESP-IDF 实现
⚠️ 必读:两种协议栈的选择ESP-IDF 支持两种 BLE 主机协议栈,这是开始之前必须搞清楚的: Bluedroid(ESP-IDF 默认协议栈): ✓ 同时支持经典蓝牙(Classic BT)和 BLE ✓ 历史悠久,例程最多,文档最全 ✗ 代码体积大,API 设计偏底层(手动管理 GATT 属性表) 适合:需要同时用经典蓝牙(如蓝牙音箱)的场景 NimBLE(Apache 开源,ESP-IDF 内置支持): ✓ 专注 BLE,代码体积小、内存占用低 ✓ API 更现代化(更接近其他 BLE 协议栈的写法,如 Zephyr) ✗ 不支持经典蓝牙 适合:纯 BLE 应用、资源受限场景(推荐新项目优先用这个) 本笔记以 NimBLE 为主(新项目推荐),并讲清楚和 Bluedroid 的关键差异 两者都需要在 menuconfig 中选择: idf.py menuconfig → Component config → Bluetooth → Bluetooth Host → 选择 NimBLE 或 Bluedroid - Dual mode ESP-IDF 版本:本笔记基于 v5.x / v6.0(核心 BLE API 一致)一、BLE 是什么?和经典蓝牙的区别BLE(Bluetooth Low Energy,低功耗蓝牙)是蓝牙 4.0 引入的全新协议, 和经典蓝牙(Bluetooth Classic)协议层完全不同,只是共用 2.4GHz 频段。 经典蓝牙: 持续连接,功耗高,适合音频传输(蓝牙耳机、音箱) 传输速率较高(1~3 Mbps) BLE: 间歇