上一篇网文我们使用 Android 手机上的蓝牙调试助手与 TB-02-kit 模块进行了数据通讯,很多人可能对其中很多概念不是很了解,今天我们就来梳理一下整个数据通讯过程和其中涉及到的一些概念,有理解不到位的地方欢迎留言处指出。
蓝牙发展史
蓝牙发展史
蓝牙和 BLE 区别
蓝牙是一种短距离的 2.4 GHz 无线通讯技术,可实现设备之间的数据交换。
一般将蓝牙 3.0 之前的 BR/EDR 蓝牙称为传统蓝牙(经典蓝牙 BT:BlueTooth),而将蓝牙 4.0 规范下的 LE 蓝牙称为低功耗蓝牙。
低功耗蓝牙是在传统蓝牙的基础上发展而来的。
BLE 技术采用非常快速的连接方式,因此可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短的时间内关闭链路——这样设计的目的就是为了低功耗。
BLE 优点:搜索速度快、连接速度快、超低功耗保持连接和传输数据,缺点是,传输速率略低。
BLE 蓝牙模块主要应用领域
1、移动扩展设备
2、汽车电子设备
3、健康医疗用品:心跳带、血压计等
4、定位应用:室内定位、井下定位等
BLE 数据通讯
一个 Gatt 包含多个服务(Service);一个服务包含多个特征(Characteristic);一个特征包含多个描述符;
反过来可以说,一个描述符对应一个特征;一个特征对应一个服务;一个服务对应一个 Gatt。
Service、Characteristic、Descriptor,这三部分都由 UUID 作为唯一标示符。
如上图所示,在我们之前使用的BLE 调试宝
软件中,我们可以看到,图中所示的前三个服务就是 BLE 必需的三个基本服务:
#define GAP_SERVICE_UUID 0x1800 // Generic Access Profile
#define GATT_SERVICE_UUID 0x1801 // Generic Attribute Profile
#define DEVINFO_SERV_UUID 0x180A // Device Information
一般来说,剩下的一个服务就是与 BLE 模块进行数据通讯的 Service ,而 Service 中的 Characteristic 是手机与 BLE 终端交换数据的关键。
所以我们上文数据通讯的操作都是在与Unknown Characteristic
进行的数据通讯。
为什么会定义这么多名词呢?
蓝牙连接成功之后,数据的传输是对特征值(Characteristic)这个参数进行读,写,通知等操作;
为了方便管理,我们可能有不止一个特征值,我们可以根据需要创建多个特征值,比如一个特征值用于记录环境湿度的值,一个特征值用于记录设备的温度值,等等。
我们也可以对这些特征值进行归类,每一类就相当于一个服务(Service),一个设备可以有多个服务,每个服务可以包含多个特征值。
为了说明方便,每个特征值都有他的属性,所以我们还会见到其他一些名词,例如:权限(permission),值(value),描述(descriptor)等。
To do
下一篇网文,我们就使用 Qt 开发一个 Android 系统下的 BLE 调试软件,实现与蓝牙模块的数据收发,实际上就是实现与下面 UUID 的Unknown Service
中 Unknown Characteristic
进行数据的读写操作。
static const QLatin1String serviceUuid("{00010203-0405-0607-0809-0a0b0c0d1910}");