当前位置: 首页 > ops >正文

十、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)确认这是心率数据;
      操作商品:
      如果需要实时心率,手机会 “订阅” 这个特性的 “通知” 权限,这样手表每次测到新心率,就会主动 “告诉” 手机(无需手机反复询问,省电!);
      如果需要历史数据,手机可以 “读取” 这个特性的数值。

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

三、代码案例

http://www.xdnf.cn/news/5346.html

相关文章:

  • 【数据结构入门训练DAY-31】组合的输出
  • Nacos 起源
  • Docker 部署 - Crawl4AI 文档 (v0.5.x)
  • AI陪练 VS 真人教学
  • 19、DeepSeek LLM论文笔记
  • docker compose ps 命令
  • 三、Hive DDL数据库操作
  • 大模型中的temperature参数是什么
  • 实战项目2(03)
  • C++ 模板方法模式详解
  • [Java][Leetcode simple]26. 删除有序数组中的重复项
  • 关于物联网的基础知识(一)
  • C++ 核心基础:数字、数组、字符串、指针与引用详解
  • 物理机械:什么是泡利不相容原理?
  • 第6讲、全面拆解Encoder、Decoder内部模块
  • 【愚公系列】《Manus极简入门》031-商业模式创新师:“模式筛选者”
  • 栈Stack(附源码)
  • overleaf较高级的细节指令
  • ARM GIC(七)亲和路由:GICD_IROUTER寄存器具体如何与MPIDR配合使用?
  • WEBSTORM前端 —— 第2章:CSS —— 第8节:网页制作2(小兔鲜儿)
  • 【前端】【HTML】【总复习】一万六千字详解HTML 知识体系
  • 3. 仓颉 CEF 库封装
  • Playwright 简介
  • Go语言实现豆瓣电影Top250爬虫
  • MNIST 手写数字分类
  • (9)被宏 QT_DEPRECATED_VERSION_X_6_0(“提示内容“) 修饰的函数,在 Qt6 中使用时,会被编译器提示该函数已过时
  • 【信息系统项目管理师】第3章:信息系统治理 - 29个经典题目及详解
  • Python_day22
  • 03.three官方示例+编辑器+AI快速学习webgl_animation_multiple
  • Python Day 22 学习