简介
蓝牙(Bluetooth)是一种短距离无线通信技术,用于在电子设备之间建立可靠、低功耗的数据连接,无需使用电缆或物理接触。在如今的蓝牙种类中主要分为两个部分,第一个为以Bluetooth Basic Rate/Enhanced Data Rate (BR/EDR) 为基础的经典蓝牙, 以及BLE(低功耗蓝牙,更适合用于物联网设备中的数据交换。) 那么本文我想结合近期学习到的来和大家分享一些蓝牙相关的知识。
根据蓝牙联盟官网中的介绍, 其中经典蓝牙的应用场景最多为点对点通讯,通常体现在文件传输和音频传输等。而对低功耗蓝牙而言它不仅包括了上述的两者还包括了定位服务和设备网络。
可以从上文中看到,在设备的通讯方式中,其低功耗蓝牙不仅仅包括点对点通讯、广播还支持MESH连接。 对于设备的定位,分为Presence (存在感知或存在检测, 判断设备是否靠近,来执行对应的操作),Distance(主要用来判断设备两者的距离)。Presence只能判断设备是否存在,并不能判断设备的距离多远。 Direction (可以用来判断蓝牙设备的方位)。
无论是低功耗蓝牙还是经典蓝牙,其都是使用的2.4GHZ,不同的是,经典蓝牙一共有79个通道,每个通道间隔1MHZ。 其中并不分广播通道和数据通道等。而对于低功耗蓝牙,一共有40个通道, 其中每个通道间隔2MHZ,包括三个广播通道,用于发送广播数提供discover功能。
下图为蓝牙联盟中主要对经典蓝牙和低功耗蓝牙的对比
蓝牙广播
蓝牙广播(Bluetooth Advertising)是指:蓝牙设备定期以无线方式广播数据包,不需要建立连接,其他设备可以被动接收这些数据。广播机制的工作原理为:广播设备(Advertiser)周期性发送广播包;监听设备(Scanner)扫描广播频道并接收这些包;可选:广播设备允许扫描响应(Scan Response),甚至后续连接;
BLE 广播包(Advertising Packet)可以携带多种信息(如下所示):
设备名称(Name) | 广播设备的可读名 |
UUID | 广播的服务标识符(例如某种传感器) |
MAC 地址 | 设备唯一标识符 |
厂商数据(Manufacturer data) | 自定义二进制数据,例如传感器值 |
Beacon 格式数据 | iBeacon、Eddystone 等标准格式 |
在蓝牙4.2的版本中, 一个蓝牙广播的最大的长度为31 bytes 对于一个广播包而言其基本的组成格式如下所示。
【数据的长度】【数据的类型】【携带的数据】
比如说以下的蓝牙广播数据
02 01 06 03 03 AA FE 0F 16 AA FE 10 00 03 67 6F 6F 2E 67 6C 2F 66 6F 6F
可以主要分为如下几个部分
02 01 06
03 03 AA FE
0F 16 AA FE 10 00 03 67 6F 6F 2E 67 6C 2F 66 6F 6F
02 01 06 代表,这个数据包长度为2Byte, 之后 01, 则是代表当前数据包的类型为Flags 广播的数据为06
03 03 AA FE 代表,长度为3bytes, 03代表数据包的类型为Complete List of 16-bit UUIDs。 AAFF则为携带的数据
0F 16 AA FE 10 00 03 67 6F 6F 2E 67 6C 2F 66 6F 6F 代表数据长度为15,AD Type = Service Data, 后面的则是携带的数据。
下图是我使用ST BLE TOOLBOX抓到的蓝牙广播包。
这个工具非常方便,可以对蓝牙的广播数据进行解析, 然后对应的标识码也同样给标注了出来。是开发调试的不二利器。那么在下个章节我们讲使用ESP32-S3来构建一个GATT服务,通过手机APP对对应的服务进行Read ,write, 和 Notify