十、STM32入门之低功耗蓝牙(基于ESP32C3芯片)
目录
- 一、低功耗蓝牙(BLE)概念知识
- 1、什么是 BLE?
- 2、经典蓝牙架构:分层理解(从下到上)
- 3、BLE蓝牙协议栈
- 4、BLE的细节基础知识
- 5、BLE 典型应用场景
- 二、ESP32C8蓝牙模块
- 1、芯片
- 1、 蓝牙相关的AT 命令集
- 三、代码案例
一、低功耗蓝牙(BLE)概念知识
1、什么是 BLE?
- 定位:蓝牙技术的低功耗版本(2010 年随蓝牙 4.0 推出),主打 超低功耗、低成本、短距离通信,适合小设备(如传感器、穿戴设备)。
- 对比传统蓝牙(经典蓝牙):
2、经典蓝牙架构:分层理解(从下到上)
这张图展示了蓝牙协议栈的层级结构,以下是各层级解析:
- 硬件层:由蓝牙芯片、射频模块构成,是蓝牙功能实现的物理基础,如同计算机的硬件平台,为上层协议提供运行载体。
- 控制器层:
- PHY(物理层):定义蓝牙信号的频率(2.4GHz)、调制方式等,如同通信的“语言基础”,负责信号的实际发送与接收。
- LL(链路层):管理蓝牙设备间的无线链路,处理数据分组、错误检测等,类似道路上的“交通规则”,保障链路通信有序。
- HCI(主机控制接口):作为硬件(控制器)与软件(主机层)的桥梁,负责两者间命令、数据和事件的传输,如同“翻译官”,让双方能理解彼此指令。
- 主机层:
- L2CAP(逻辑链路控制与适配协议):对数据进行分段、重组及多路复用,如同“包裹分拣中心”,确保不同类型数据高效传输。
- ATT(属性协议):定义数据在蓝牙设备间的呈现方式,如“物品标签”,标识数据属性。
- GATT(通用属性配置文件):基于ATT,用于设备间数据通信,像“数据交换协议”,规定如何获取和修改设备数据。
- GAP(通用访问配置文件):负责设备发现、连接、配对等,如同“社交礼仪”,规范设备间如何“打招呼”与“建立联系”。
- 协议层(Profiles):
- HFP(免提配置文件):用于蓝牙耳机与手机通话,实现语音传输与控制。
- A2DP(高级音频分发配置文件):支持高质量音频无线传输,如蓝牙音箱播放音乐。
- AVRCP(音频/视频远程控制配置文件):允许设备远程控制多媒体,如用蓝牙耳机控制音乐播放/暂停。
- PBAP(电话簿访问配置文件)、MAP(信息访问配置文件):分别用于访问电话簿、短信等信息,实现设备间数据共享。
- 应用层:直接面向用户的功能,如音乐播放、电话接听,是蓝牙技术的最终应用体现,如同用户使用的具体“服务”。
3、BLE蓝牙协议栈
注意:BLE的蓝牙协议栈是没有协议层(HFP,A2DP,AVRCP等)的,这些协议属于 经典蓝牙(BR/EDR,蓝牙基本速率 / 增强数据速率) 的协议层,主要用于音频流传输(如音乐、通话)和传统设备交互,而 BLE(蓝牙低功耗,BLE/BT LE)的协议层完全独立于经典蓝牙,设计目标是低功耗、小数据量的设备连接(如传感器、穿戴设备)
它的协议栈可以简要概括如下
一句话总结(快速记忆)
GATT 是 BLE 的数据 “陈列和交易规则”,依赖 ATT(运输卡车)、L2CAP(高速公路)、HCI(仓库管理员)实现底层传输,通过 GAP(前台接待)建立连接,用 SMP(保安)保证安全,最后由各种 “标准服务”(如心率服务)统一数据格式。
UUID 是每个数据项的 “全球唯一身份证”,确保不同设备能正确识别对方的服务和特性。
4、BLE的细节基础知识
- 信道:工作在 2.4GHz 频段(和 Wi-Fi 同频段,但通过跳频避免干扰)。3 个 广播信道(固定频率:2402MHz、2426MHz、2480MHz,如下图所示),用于设备发现;37 个 数据信道(用于连接后通信)。
- 服务、特性、UUID:我们通过一个案例来解释。
- BLE 设备 为 一家 “蓝牙小商店”:
首先,每一个 BLE 设备(比如蓝牙手表、耳机、传感器)都可以看作是一家 “小商店”,而你手机里的蓝牙功能就是 “顾客”。
商店里有什么?有 “服务柜台”(Service)、每个柜台里有 “商品”(Characteristic),每个柜台和商品都有独一无二的 “身份证号”(UUID)。 - 服务(Service)= 商店里的 “服务柜台”:服务是 一组相关功能的集合,就像商店里的 “饮料柜台”“零食柜台”,专门卖一类东西,
1)比如:
蓝牙手表可能有一个 “健康数据柜台”(心率、步数服务);
蓝牙灯泡可能有一个 “灯光控制柜台”(调节亮度、颜色的服务)。
2)特点:
每个 “柜台”(服务)必须有一个 唯一的 ID(即 UUID,后面会讲);
一个设备可以有多个服务(比如手表同时有健康数据、电池电量两个服务柜台)。 - 特性(Characteristic)= 柜台里的 “具体商品”:特性是服务里的 具体数据项,就像 “饮料柜台” 里的 “可乐”“果汁”,每个商品有自己的 “属性”(比如价格、容量)。
1)比如:
在 “健康数据柜台”(服务)里,有一个 “心率数据” 商品(特性),你可以 “查看”(读取)它的当前数值;
在 “灯光控制柜台” 里,有一个 “亮度” 商品(特性),你可以 “设置”(写入)它的值(比如从 50% 调到 80%)。
2)“商品属性”(特性的权限):
每个特性有 可读、可写、可通知 等权限,就像商品是否允许你 “查看价格”“修改数量”“缺货时提醒”:
可读:允许顾客(手机)查看商品值(比如读取心率数值);
可写:允许顾客修改商品值(比如写入亮度参数);
通知(Notify):当商品值变化时,主动告诉顾客(比如心率突然升高时,手表主动给手机发通知)。 - UUID = 柜台和商品的 “全球唯一身份证号”:就像每个人有唯一的身份证号,每个服务和特性也有 全球唯一的 ID(UUID),确保不同品牌的 “蓝牙商店”(设备)能被正确识别。
1)比如:
所有蓝牙设备的 “电池电量服务” 都有一个 通用 UUID(0x180F),手机只要看到这个 ID,就知道这是电池服务;
“心率数据特性” 的通用 UUID 是 0x2A37,手机看到这个 ID,就知道这是心率数据。
2)UUID 的格式:
128 位 UUID:长得像 00000000-0000-1000-8000-00805F9B34FB,是全球唯一的 “终极身份证”,由蓝牙协会分配(比如标准服务和特性用这种);16 位 UUID:简化版 ID(比如 0x180F),只能在 蓝牙协会注册过的公司 / 组织范围内使用,避免冲突(自定义服务常用这种,但需要基于一个 128 位的 “主 UUID” 来生成)。 - 举个真实例子:手机连蓝牙手表
手机(顾客)走进手表商店(BLE 设备),想获取心率数据;
找服务柜台:手机先搜索 “健康数据柜台”(服务),通过它的 UUID(比如 0x180D,这是蓝牙协会定义的 “健康数据服务”)找到对应的柜台;
找具体商品:在这个柜台里,找到 “心率数据” 商品(特性),通过它的 UUID(0x2A37)确认这是心率数据;
操作商品:
如果需要实时心率,手机会 “订阅” 这个特性的 “通知” 权限,这样手表每次测到新心率,就会主动 “告诉” 手机(无需手机反复询问,省电!);
如果需要历史数据,手机可以 “读取” 这个特性的数值。
- BLE 设备 为 一家 “蓝牙小商店”:
5、BLE 典型应用场景
- 穿戴设备(智能手表、手环)
手机(中心)连接手表(外围),同步步数、心率,接收通知。
关键:通过 GATT 服务交换数据(如 “健康服务”“设备信息服务”)。 - 物联网传感器(温湿度、血压计)
传感器(外围)定期广播数据,手机 / 网关(中心)接收解析。
优势:纽扣电池续航数年,无需频繁充电。 - Beacon 定位
Beacon 设备(广播者)持续发送广播包(含位置 UUID),手机(观察者)通过信号强度计算距离,实现室内导航。 - 蓝牙 Mesh(蓝牙 5.0 + 功能)
多设备组网(如智能灯泡、插座),通过中继传输信号,覆盖更大范围(类比 “接力赛”,设备间转发数据)。
二、ESP32C8蓝牙模块
1、芯片
stm32芯片通过向ESP32的U1串口发送蓝牙相关的AT指令,实现蓝牙通信。
1、 蓝牙相关的AT 命令集
• AT+BLEINIT:Bluetooth LE 初始化
• AT+BLEADDR:设置 Bluetooth LE 设备地址
• AT+BLENAME:查询/设置 Bluetooth LE 设备名称
• AT+BLESCANPARAM:查询/设置 Bluetooth LE 扫描参数
• AT+BLESCAN:使能 Bluetooth LE 扫描
• AT+BLESCANRSPDATA:设置 Bluetooth LE 扫描响应
• AT+BLEADVPARAM:查询/设置 Bluetooth LE 广播参数
• AT+BLEADVDATA:设置 Bluetooth LE 广播数据
• AT+BLEADVDATAEX:自动设置 Bluetooth LE 广播数据
• AT+BLEADVSTART:开始 Bluetooth LE 广播
• AT+BLEADVSTOP:停止 Bluetooth LE 广播
• AT+BLECONN:建立 Bluetooth LE 连接
• AT+BLECONNPARAM:查询/更新 Bluetooth LE 连接参数
• AT+BLEDISCONN:断开 Bluetooth LE 连接
• AT+BLEDATALEN:设置 Bluetooth LE 数据包长度
• AT+BLECFGMTU:设置 Bluetooth LE MTU 长度
• AT+BLEGATTSSRVCRE:GATTS 创建服务
• AT+BLEGATTSSRVSTART:GATTS 开启服务
• AT+BLEGATTSSRVSTOP:GATTS 停止服务
• AT+BLEGATTSSRV:GATTS 发现服务
• AT+BLEGATTSCHAR:GATTS 发现服务特征
• AT+BLEGATTSNTFY:服务器 notify 服务特征值给客户端
• AT+BLEGATTSIND:服务器 indicate 服务特征值给客户端
• AT+BLEGATTSSETATTR:GATTS 设置服务特征值
• AT+BLEGATTCPRIMSRV:GATTC 发现基本服务
• AT+BLEGATTCINCLSRV:GATTC 发现包含的服务
• AT+BLEGATTCCHAR:GATTC 发现服务特征
• AT+BLEGATTCRD:GATTC 读取服务特征值
• AT+BLEGATTCWR:GATTC 写服务特征值
• AT+BLESPPCFG:查询/设置 Bluetooth LE SPP 参数
• AT+BLESPP:进入 Bluetooth LE SPP 模式
• AT+SAVETRANSLINK:设置 Bluetooth LE 开机透传模式 信息
• AT+BLESECPARAM:查询/设置 Bluetooth LE 加密参数
• AT+BLEENC:发起 Bluetooth LE 加密请求
• AT+BLEENCRSP:回复对端设备发起的配对请求
• AT+BLEKEYREPLY:给对方设备回复密钥
• AT+BLECONFREPLY:给对方设备回复确认结果(传统连接阶段)
• AT+BLEENCDEV:查询绑定的 Bluetooth LE 加密设备列表
• AT+BLEENCCLEAR:清除 Bluetooth LE 加密设备列表
• AT+BLESETKEY:设置 Bluetooth LE 静态配对密钥
• AT+BLEHIDINIT:Bluetooth LE HID 协议初始化
• AT+BLEHIDKB:发送 Bluetooth LE HID 键盘信息
• AT+BLEHIDMUS:发送 Bluetooth LE HID 鼠标信息
• AT+BLEHIDCONSUMER:发送 Bluetooth LE HID consumer 信息
• AT+BLUFI:开启或关闭 BluFi
• AT+BLUFINAME:查询/设置 BluFi 设备名称
• AT+BLUFISEND: 发送 BluFi 用户自定义数据
• AT+BLEPERIODICDATA:设置 Bluetooth LE 周期性广播数据
• AT+BLEPERIODICSTART:开启 Bluetooth LE 周期性广播
• AT+BLEPERIODICSTOP:停止 Bluetooth LE 周期性广播
• AT+BLESYNCSTART:开启周期性广播同步
• AT+BLESYNCSTOP:停止周期性广播同步
• AT+BLEREADPHY:查询当前连接使用的 PHY
• AT+BLESETPHY:设置当前连接使用的 PHY