1. 项目背景与核心功能
最近在调试ESP32的蓝牙功能时,发现官方AT固件对BLE服务支持不够完善。特别是在需要动态修改蓝牙设备名称和实时获取连接状态的场景下,标准AT指令集存在明显短板。经过一周的摸索和调试,终于实现了完整的UART透传BLE服务,并在此基础上扩展了关键功能。
这个方案的核心价值在于:
- 允许通过串口AT指令动态修改BLE广播名称
- 实时反馈蓝牙连接状态变化
- 保持原有UART透传功能完整
- 所有功能集成在单个main.c实现,便于移植
实际测试中,这套方案在智能家居中控、穿戴设备调试等场景表现稳定。下面分享具体实现过程和关键代码。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件与开发环境准备
2.1 硬件配置要求
- ESP32-WROOM-32D开发板(其他型号需验证蓝牙版本)
- USB转TTL串口模块(推荐CP2102)
- 手机/平板等蓝牙测试设备
2.2 开发环境搭建
- 安装ESP-IDF v4.4(必须包含BLE组件)
- 配置VS Code插件:
- ESP-IDF Extension Pack
- C/C++ IntelliSense
- 新建工程时选择"bluetooth/ble_uart_at"示例
注意:不要使用PlatformIO的现成库,某些BLE服务API存在兼容性问题
3. BLE服务架构设计
3.1 服务层结构
c复制typedef struct {
uint16_t uart_svc_handle; // 服务句柄
esp_gatt_if_t gatts_if; // GATT接口
uint16_t conn_id; // 连接ID
uint16_t tx_handle; // 特征值句柄
bool is_connected; // 连接状态标志
char device_name[32]; // 可配置的设备名
} ble_uart_env_t;
3.2 关键回调函数
c复制static void gatts_event_handler(esp_gatts_cb_even
