ESPC3入门16低功耗蓝牙广播
2023-10-27 来源:本站原创 浏览次数:次一、蓝牙协议栈
本文聚集于蓝牙广播,对蓝牙的整体协议栈并不做太多介绍。
1.协议栈图示
在这里插入图片描述
这里重点介绍一下LinkLayer。LinkLayer是蓝牙协议栈的第二层,它负责处理蓝牙设备之间的连接和通信。LinkLayer包括两个子层:LL层和LM层,其中:-LL层负责处理链路管理和数据包传输-LM层负责处理链路控制和链路维护。
在LL层中,蓝牙广播数据被封装在广播数据包中,并通过广播信道发送到周围的蓝牙设备。
2.广播
在蓝牙低功耗应用中,广播是一个重要的技术,可以用于实现设备发现、连接维护、位置服务等应用场景。
3.GAP
GAP(GenericAccessProfile)是蓝牙协议栈中的一个重要协议,它定义了蓝牙设备的访问模式和行为。GAP协议为蓝牙设备提供了一个标准化的接口,使得不同的蓝牙设备可以互相识别和交互。其中,广播是GAP协议的一个功能,用于在蓝牙设备之间传输短数据。
在蓝牙低功耗(BLE)应用中,GAP协议和广播密切相关。GAP协议定义了广播的格式、参数和过程,使得不同设备可以互相识别和交互。在广播过程中,主机设备可以通过GAP接口发送广播包,从机设备可以通过GAP接口接收广播包,实现设备之间的互动。广播还可以用于设备发现、连接维护、位置服务等应用场景。
4.PHY
PHY代表物理层(PhysicalLayer),它是蓝牙技术中的一层协议,主要功能包括传输媒介的选取、传输信道的调制和解调、数据的编码和解码、差错检测和纠正等。
在蓝牙技术中,有多种不同的PHY,包括1Mbps的经典蓝牙PHY,2Mbps和CodedS8的LEPHY,用于不同的应用场景和需求。
5.CodedPHY
CodedPHY是BLE(蓝牙低功耗)协议定义的一种物理层技术。与传统的1Mbps和2MbpsPHY相比,CodedPHY的传输速率较慢,通常在kbps或kbps左右,但可以提供更远的传输距离和更好的抗干扰性能。因此,CodedPHY常用于物联网等需要远距离传输和低功耗的应用场景。
在ESP32系列芯片中,只有支持BLE5.0的芯片才能支持CodedPHY,IDF版本要4.1及以上。
6.ESP32内部结构示意图
在这里插入图片描述
二、蓝牙广播
1.BLE信道
低功耗蓝牙(BLE)使用2.4GHz频段,频段范围为MHz至MHz。BLE的频段范围与Wi-Fi和蓝牙2.0相同,但BLE使用的频道不同,所以它们不会发生冲突。
BLE使用40个频道,每个频道之间的带宽为2MHz。
各信道划分如下:
在这里插入图片描述
其中:37、38、39是广播信道,其它是数据信道。
2.广播数据包格式
一个广播数据包最长为37个字节,前6个字节为设备地址,后面是数据区,数据区最大31个字节,又分为若干个ADSturctu。数据区没用完的话,系统会在后面补0。
在这里插入图片描述
3.ADStructu格式
每个ADStuctu由长度、类型、内容三个部分组成,长度指的是类型+内容字节数。
4.ADStuctu类型定义
一些BLE广播类型定义值如下:
0x00:广播标志0x01:不完整的16位服务UUID列表0x02:完整的16位服务UUID列表0x03:不完整的32位服务UUID列表0x04:完整的32位服务UUID列表0x05:不完整的位服务UUID列表0x06:完整的位服务UUID列表0x07:本地名称0x08:TX功率级别0x09:蓝牙名称0x0A:简单配对的HashC0x0B:简单配对的随机数R0x0C:设备ID0x0D:服务数据0x0E:制造商特定数据0x0F:广播间隔
5.广播数据解析示例
使用一般的安卓端蓝牙调试工具就可以看到针对广播包的解析,下面是一个实例:
在这里插入图片描述
部分内容解析如下:-0x01:设备标识-0x09:完整蓝牙名称(UTF-8编码)-0x02:16BitUUID-0x0a:蓝牙信号发射功率(上面示例无此数据)-0xFF:厂商自定义数据
6.广播器和扫描器
BLE通过GAP协议来实现设备之间的互通,其中定义了两种基本的设备类型:-广播器(Broadcaster)-扫描器(Scanner)
广播器发送广播包,扫描器接收广播包。基于GAP,BLE还定义了三种设备角色:中央(Central)、外围(Peripheral)和观察者(Observer),分别用于实现不同的通信模式。
在GAP中,广播包包含设备的基本信息,如设备名称、设备类型、设备服务等,同时还包含了一些标志位,用于标识设备是否可以被扫描或连接。具体来说,广播包中的Flags字段用于标识设备是否支持连接:
如果Flags字段中包含LELimitedDiscoverableMode标志,则表示设备可以被扫描,但不可以被连接;如果Flags字段中包含LEGeneralDiscoverableMode标志,则表示设备可以被扫描和连接。
三、ESPIDF的广播demo
在ESP32IDF中BLE广播示例程序multi_adv_demo里,演示了同时广播多种不同类型的广播,其中:
1.1Mphyextendadv
使用1Mbps的PHY速率,可连接广播。
2.2Mphyextendadv
使用2MBps的PHY高速广播,可扫描。
3.1Mphylegacyadv,ADV_IND
1M高速广播,
4.codedphyextendadv
codedphy广播,可连接。
四、源码分析
原来的demo提供了四种类型广播,本文主要介绍其中的1MBpsPHY部分的代码。
1.参数设置
首先需要定义发送广播需要的几个参数:
定义6个字节的