文章目录
1、蓝牙广播数据格式
蓝牙广播包的最大长度是37个字节,其中设备地址占用了6个字节,只有31个字节是可用的。这31个可用的字节又按照一定的格式来组织,被分割为n个AD Structure。如下图所示:
(注:BLE5.0广播包最大可用长度是254个字节)
每个AD Structure包含又包含三部分,分别是:
Length(1字节)、AD Type(1字节)、AD Data(n字节)
其中 Length = AD Type (1字节) + AD Data (n字节)
AD Type 由蓝牙组织联盟指定并发布,可以在蓝牙官方网站上下载相关文档,常用的 AD Type 及其含义如下:
常用的有:格式定义字段0x01(Flags), UUID字段,设备名称字段0x09,厂商自定义字段0xFF 等
这些字段中,除了 格式定义字段0x01 是必须存在,且需要放在广播内容中,其他字段都是可选的,并且位置并不重要,放在 广播内容 或 扫描回复内容 中都可以,效果基本相同。
格式定义字段 0x01
格式定义字段(Flags)是一个字节的配置字段,是唯一一个必须包含的字段,用于指示设备是否可以被搜到、是否支持传统蓝牙,是否支持可被连接等。
UUID字段
UUID是一种唯一代号,一般每个service会对应一个UUID,一个设备可以有多个UUID。比如 服务uuid,特征值uuid(service uuid、characteristic uuid)
一个完整的UUID是128bit (16字节),也可以以32bit (4字节) 或16bit(2字节) 缩写的方式表示。
通过此字段,可以选择将全部或部分UUID广播出来。
名称字段
名称字段(Local Name) 决定了设备在手机中搜索出来的名字
特别注意:
ADType 0x01 表示的是设备标识,其含义如下:
BLE(低功耗蓝牙),不支持BR/EDR(经典蓝牙),一般都将设备设为处于普通发现模式,所以只设置 bit1和 bit2,即0x06(b00000110)。
所以BLE广播开头就是 AD Structure = “0x2 0x1 0x6”
2、扫描响应数据
扫描响应是, 当蓝牙主机收到从机的广播数据后,如果想要进一步了解该从机设备的信息,可以向从机设备发送 扫描请求,从机收到扫描请求后,向对应的主机 回复 扫描响应。