前言
笔者最近接触了蓝牙的项目,在本文中笔者将会记录下蓝牙的基础知识。
蓝牙概念及简介
首先我们看下蓝牙和低功耗蓝牙的概念。
蓝牙(Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4~2.485GHz的ISM波段的UHF无线电波)。 引自360百科 蓝牙
蓝牙低功耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart[1])也称蓝牙低能耗、低功耗蓝牙,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标[2]、安防、家庭娱乐等领域的新兴应用。[3]相较经典蓝牙,低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。
蓝牙目前最新版本是5.2版本,由蓝牙技术联盟在2020年1月发布。蓝牙有1.x、2.x、3.x、4.x、5.x等多个版本。低功耗蓝牙模式是在蓝牙4.0版本的时候推出的。从1.0版本到5.2版本的经典蓝牙,最大传输速度在723.1Kbit/s到48Mbit/s之间,传输距离在10米到300米。低功耗蓝牙主要的应用场景是省电。从4.0版本到5.2版本的低功耗蓝牙的传输速度的上限为2Mbit/s,传输距离大于100米。
在我们日常生活中,最常用到蓝牙的可能是蓝牙耳机了。除此之外可能还用蓝牙技术给手机传送文件,可能还使用过蓝牙音箱、蓝牙门锁等。
蓝牙架构简介
蓝牙使用架构
对于iOS开发者来说,使用蓝牙相关功能时需要使用引入 CoreBluetooth framework。Core Blue framework 提供了 iOS和 mac 应用和设备交互的类,
这些类配备了蓝牙低功耗技术。比如说我们的 App 可以发现低功耗设备并且和低功耗设备交互,比如心率检测和温度监测仪。macOS10.9及iOS6之后的设备可以和外围低功耗外围设备进行交互。蓝牙低功耗外设可以给mac和iOS设备提供数据。
蓝牙低功耗无线技术基于蓝牙4.0规格,蓝牙4.0定义了一些列的协议用于低功耗设备间交互。Core Bluetooth framework 是蓝牙低功耗协议栈的抽象。它隐藏了低层级的规格细节。这方便我们可以更容易开发和蓝牙低功耗设备交互的App。
中心设备和外围设备
中心设备和外围设备是Core Bluetooth 的关键角色。
peripherals 外围设备简称外设、central 中心设备
A peripheral typically has data that is needed by other devices.
外设通常是提供数据的设备
外设通常有提供给其他设备的数据。
A central typically uses the information served up by peripherals to accomplish some particular task.
中心设备通常是使用外设提供的信息以完成特定任务。比如配有蓝牙低功耗技术的说一个温度计可能提供室内温度给App,然后App便能够友好地显示出来室内温度。
这里中心设备像是一个客户端,用来向服务端请求数据。
外围设备就像是一个服务端,用来向客户端响应数据。
GATT
GATT协议提供了大量用于客户端的命令以发现有关服务器的信息。这包括:
- 发现所有主要服务的UUID
- 使用指定UUID查找一个服务
ATT
服务、特征和描述符被统称为属性(attributes),并以UUID标识。实现者可能会为所用的专有格式挑选一个随机或伪随机UUID,但蓝牙技术联盟已预留一系列UUID(范围xxxxxxxx-0000-1000-8000-00805F9B34FB)[39])供标准属性使用。为提高效率,协议中的标识符以16位或32位值表示,而非完整UUID所需的128位。
L2CAP
逻辑链路控制与适配协议(L2CAP)常用来建立两个使用不同高级协议的设备之间的多路逻辑连接传输。提供无线数据包的分割和重新组装。
蓝牙开发流程
简单来说我们日常开发中的流程如下:
- 创建蓝牙中心管理者;
- 扫描发现外围设备;
- 连接设备;
- 发现服务,发现特征值;
- 给指定外设添加监听
- 给已连接设备发送数据
- 外设给中心设备通知数据时,监听过指定外设特征值的方法回调。
外设可以向空气中广播数据,中心设备扫描附近的外设;
当中心设备通过外设广播的数据,找到了特定的外设后;
中心设备就会请求连接外设;然后开始探索外设的数据;
外设负责用合适地方式给中心设备以响应。
上图中外设就在广播数据,中心设备就用于分析外设广播的数据,以确定是否是自己想要连接的设备。如果是的话,就可以展示到自己可连接的列表中。
上图中的心率检测仪是一个外设,心率外设有心率服务,心率服务有相应的特征。我们的蓝牙中心管理者可以通过相应API去发现指定服务的外设,可以查询指定服务、指定特征的外设,以获取到指定的外设实例,并且对相应外设做监听或其他服务。