本章关键:蓝牙发展史 、蓝牙ble 、蓝牙ble工作流程
前言
从2021年到现在,从事android iot边缘开发工程师3年了。刚进公司的时候,主要接触的模块就是蓝牙ble,也是通过入手ble相关的知识点,慢慢的深入理解了何谓iot、何谓边缘计算、何谓通讯协议。这里非常感谢我的同事hackill 老板,在我进公司的时候带我了解公司的生态,给我科普iot相关的知识,尤其是蓝牙。 很多开发同学在开发的时候,会接触蓝牙的相关开发工作,但是一开始可能有点不知道怎么入手。写这篇文章,一来是对自己这几年工作的总结,二来也希望能帮到有蓝牙开发需要的同事。
蓝牙的概念梳理
首先,我们日常生活中,提到的蓝牙包括蓝牙手表、蓝牙耳机、蓝牙音箱等等。这里的蓝牙是一个统称,只要是应用了蓝牙协议通信的设备,我们都称之为蓝牙。蓝牙是一种通信协议,是一种无线通信技术标准,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波无线电波,经由2.4至2.485 GHz的ISM频段来进行通信。跟我们通常使用的wifi、lan、zigbee的通道是一样的。蓝牙目前遍布了我们生活的方方面面。
蓝牙的发展史
蓝牙发展经历了很多年,从蓝牙1.0到现在最新的蓝牙5.0,从蓝牙的传输速率、传输距离、功耗、安全性等等都有了极大的提高和完善。 从第一代到第五代蓝牙技术的特性和变化见下图:
蓝牙版本 | 发布年份 | 特性与改进 |
---|---|---|
1.0 | 1994 | 初始版本,存在互不兼容问题,传输速率约748~810kbps,单工传输,易受干扰 |
1.1 | 1997 | 改进硬件地址匿名性,提高隐私保护 |
1.2 | 2004 | 向下兼容1.1,引入自适应频率跳跃(AFH),提高传输速度至约90KB/S,L2CAP层增加流量控制和错误纠正机制 |
2.0+EDR | 2004 | 引入非跳跃窄频通道,提高广播能力,支持多速度水平,增加Sniff省电功能和简单安全配对(SSP) |
3.0+HS | 2009 | 采用交替射频技术,提高数据传输速率至24Mbps,增强电源控制,降低空闲功耗 |
4.0 | 2010 | 引入低功耗蓝牙BLE,支持高速、传统和低功耗三种模式,提升传输距离至100米以上,优化延迟和数据传输效率,增强安全性 |
4.1 | 2013 | 软件更新,支持多设备连接,增加智能连接功能,提高灵活性和掌控度 |
4.2 | 2014 | 进一步优化性能,增强安全性和隐私保护 |
5.0 | 2016 | 传输距离是4.2LE的4倍,速度提升至2倍,最高可达24Mbps,支持室内定位导航,无需配对接收信标数据,物联网优化。引入了一些新的特性,包括扩展的广播包容量。在早期的蓝牙版本中,广播包的大小被限制在31字节。但是在蓝牙5.0中,这个限制被扩大到了255字节,从而允许设备在一个单一的广播包中发送更多的数据 |
蓝牙的分类
蓝牙按照功耗主要可以分为以下2种类型:
- 经典蓝牙(Classic Bluetooth)。这是最早的蓝牙版本,支持蓝牙协议4.0以下。它主要用于手机、音响、汽车等设备之间的音频或数据传输。经典蓝牙的特点是较高的传输速度和较大的传输距离,但功耗相对较大。
- 低功耗蓝牙(Bluetooth Low Energy, BLE)。低功耗蓝牙支持蓝牙协议4.0或更高版本,不向后兼容经典蓝牙。它专注于低功耗和低延迟,适用于实时性要求高但功耗要求低的场景,如鼠标键盘、智能家居和智能穿戴设备。
此外,根据对协议的支持情况,还可以分为双模式蓝牙,它同时支持经典蓝牙和低功耗蓝牙,这种比较特殊。每种类型的蓝牙技术都有其特定的应用场景和优势,随着技术的发展,蓝牙将继续演进以适应更多元化的应用需求。
其中,蓝牙4.0引入了低耗电蓝牙BLE(Bluetooth Low Energy),后文简称Ble ,蓝牙5.0在Ble上支持了蓝牙的扩展广播包,我们本次的介绍的重点就是围绕蓝牙ble展开的。
蓝牙ble的基本概念
传统的经典蓝牙(Classic Bluetooth)通常发送大量的数据,比如一般用于数据量比较大的传输,语音、音乐等较高数据量的传输。
然而蓝牙ble是一种低功耗的设备,它经常会搭配电池使用,例如:防丢器、手环、手表等设备。 蓝牙ble是一种C/S架构的,其中C是Client,也就是控制端,通常是android手机、中控屏等。S是Serve,也就是提供服务的,通常就是蓝牙等终端子设备。其中,C-S是1:n的关系 ,即一个Client可以连接多个蓝牙设备。这个其实好理解的,举个例子,跳绳的时候,我使用手机同时连接我的手环、智能绳子和蓝牙耳机。
适用场景
蓝牙ble的特点:低功耗、低延时,传输数据量较少。因此蓝牙ble被大量使用在医疗领域、穿戴配件、安防领域等。 BLE(Bluetooth Low Energy)是一种低功耗蓝牙技术,它在医疗、穿戴设备和安防领域具有广泛的应用。
-
医疗领域:
- 远程患者监控:BLE技术可以用于收集患者的健康数据,如心率、血压、血糖等,并实时发送给医疗人员。这对于需要持续监控健康状况的患者来说,可以大大提高生活质量,并减少医疗成本。
- 医疗设备追踪:在医院环境中,BLE可以用于追踪和定位医疗设备,如轮椅、心电图机等,从而提高医疗资源的管理效率。
-
穿戴设备:
- 健康和健身追踪:BLE技术在健康和健身追踪设备中得到了广泛的应用,如智能手环、智能手表等设备可以通过BLE连接到用户的手机,实时监测和记录用户的运动数据和健康状况。
- 智能穿戴:除了健康和健身追踪,BLE还被用于其他类型的智能穿戴设备,如智能眼镜、智能鞋等。这些设备可以通过BLE与用户的手机或其他设备进行通信,提供各种便捷的功能。
-
安防领域:
- 室内定位:在商场、博物馆等公共场所,BLE技术可以用于提供精确的室内定位服务,帮助用户找到他们想去的地方。
- 物品追踪:BLE标签可以附着在钥匙、背包等易丢失的物品上,当物品丢失时,可以通过手机上的BLE追踪应用找回。
- 智能家居:在智能家居系统中,BLE技术可以用于控制各种家用设备,如灯光、空调、电视等。
-
蓝牙mesh
蓝牙BLE(Bluetooth Low Energy)在蓝牙Mesh网络中有着重要的应用。蓝牙Mesh是一种网络协议,目前是由蓝牙SIG联盟制定和维护的,它的设计允许大量的蓝牙设备进行互联,并可以在这些设备之间传输数据。这种网络架构特别适合于需要大规模设备互联的应用场景,如智能家居、工业自动化、城市照明等。以下是BLE在蓝牙Mesh中的一些具体应用:
-
智能家居:在智能家居中,蓝牙Mesh网络可以连接各种家用设备,如灯光、空调、电视、门锁等。用户可以通过手机或其他控制设备,通过BLE技术控制这些设备的开关、亮度、温度等。此外,这些设备还可以互相通信,实现更复杂的自动化场景,如当你打开家门时,灯光自动开启。
-
城市照明:在城市照明中,蓝牙Mesh网络可以用于连接大量的街灯,实现远程控制和监控。通过BLE技术,可以实现对街灯的开关、亮度等进行精细化管理,以节约能源和维护成本。
-
工业自动化:在工业自动化中,蓝牙Mesh网络可以用于连接各种传感器和控制设备,实现实时数据收集和设备控制。这对于提高生产效率和安全性非常有帮助。
-
资产追踪:在大型仓库或商场中,蓝牙Mesh网络可以用于追踪和定位各种物品。通过在物品上安装BLE标签,可以实时了解物品的位置和状态,以提高管理效率。
-
-
beacon信标。蓝牙 BLE(Bluetooth Low Energy)在信标(Beacon)中的应用非常广泛。信标是一种小型无线发射器,它们使用 BLE 技术向附近的设备广播信号。这些信号可以被智能设备(如智能手机或平板电脑)接收并进行处理,实现各种功能。以下是 BLE 在信标中的一些具体应用:
-
室内导航:在大型建筑物(如商场、机场或博物馆)内,可以部署 BLE 信标来提供室内导航服务。用户的设备可以接收来自多个信标的信号,通过计算信号强度来确定用户的精确位置。
-
营销曝光:商家可以使用 BLE 信标在店铺或特定地点发送特定的广告或促销信息。当用户的设备接近信标时,他们可以收到这些信息,从而提高商家的销售。
-
事件触发:在某些应用中,BLE 信标可以用于触发特定的事件。例如,在智能家居中,当用户的设备接近信标时,可以自动打开门锁或灯光。
-
资产跟踪:在仓库或医院中,可以通过在重要物品上安装 BLE 信标来跟踪它们的位置。这可以帮助管理者更有效地管理资产,并减少丢失。
-
总的来说,BLE技术以其低功耗、高效率的特点,在医疗、穿戴设备和安防领域,其中在蓝牙BLE基础上衍生设计的蓝牙Mesh网络中的应用,使得大规模设备互联成为可能,为各种应用场景带来了极大的便利。蓝牙BLE在信标中的应用,为各种场景提供了精确的定位和无线通信能力,从而实现了许多创新的服务和应用。
基本流程
工作步骤:
通过上述流程图可以看出,基本的使用流程就是发现设备、连接设备、开始通信。首先,为了让大家理解这个过程,我们必须先了解蓝牙ble协议的几个基本重要的知识点。
核心概念
蓝牙 BLE(Bluetooth Low Energy)设备的主要组成可以分为以下几个核心部分:
-
控制器(Controller):这是 BLE 设备的物理部分,负责无线电频率的通信。它包括一个射频前端,一个物理层(PHY),和一个链路层(Link Layer)。
-
主机(Host) :这部分是 BLE 协议栈的软件部分,包括 L2CAP(逻辑链路控制和适配协议),安全管理,属性协议(ATT),和通用属性档案(GATT,是蓝牙ble的通信规范标准)。
-
应用程序(Application):这是运行在 BLE 设备上的软件,它使用主机提供的服务来实现特定的功能。
-
配置文件(Profiles):这些是预定义的设备角色,描述了设备如何使用 BLE 服务来实现特定的应用。
-
服务和特性(Services and Characteristics):这些是 BLE 设备提供的特定功能,例如心率监测或温度传感。服务包含一个或多个特性,每个特性都有一个值和多个描述符。
-
广播和连接(Advertising and Connections):BLE设备可以广播其存在和提供的服务,以便其他设备可以发现并连接它。
以上就是蓝牙 BLE 的主要组成部分,每个部分都对 BLE 设备的功能和性能有重要的影响。
现在我们来查看一下设备和APP之间基本的通信时序图:
(mac地址、service) Note right Of Client:连接阶段 Client->>Device:发起Gatt连接 Device->>Client:响应Gatt连接 Client->>Device:Mtu协商 Device->>Client:返回Mtu协商结果 Client->>Device:发现服务 Device->>Client:返回服务列表 Client->>Device:唤醒服务 Device->>Client:服务唤醒结果 Note right Of Client:通信阶段 Client->>Device:发送数据 Device->>Client:返回数据 Note right Of Client:断开连接 Client->>Device:断开连接 Device->>Client:断开链接
- 设备上电,开始向外发送ble广播包(这个过程就是为了让手机能够发现到设备)
- 控制端(通常我们使用app,也就是手机)打开蓝牙进行蓝牙扫描
- 通过捕获蓝牙设备的广播包来发现设备。
- 当app发现设备的时候,需要过滤对应的设备是否是我们需要的目标设备。我们会通过解析广播里面带的mac地址以及广播的services来判断是否是我们需要的设备。
- app向目标设备发起蓝牙Gatt连接。(Gatt:GATT(Generic Attribute Profile)是蓝牙低功耗(Bluetooth Low Energy,BLE)设备用于发送和接收数据的主要方式。它是一种在BLE连接中交换数据的通用规范,也是一种C-S设计架构的)。
- 设备响应GATT连接
- 手机发起MTU协商。MTU(Maximum Transmission Unit):最大传输单元,指一次数据传输的最大payload,通常用Byte来做单位(蓝牙协议里面的MTU有几个比较典型的mtu值,分别为23 Bytes、247 Bytes、517 Bytes,虽然这个值是由蓝牙协议栈协商出来的,但是我在工作当中,通常这个值具体是多少很大程度上是取决于设备端)。
- 设备响应MTU协商结果。
- 手机发现Services(通常蓝牙的Services由UUID组成的一系列集合),查看Services里面是否有符合我们要求的服务。(不同类型的服务对应的UUID也是不同的,例如:健康类服务、天气服务等,但是有些公司其实不太区分,只是拿UUID判断是否是属于自己公司的产品,这个后面我们会展开细说。)
- 发现符合是服务之后,手机请求打开设备服务的通道,也就是notify Service。
- 在上述过程都顺利完成之后,手机就算是和设备建立了简单的蓝牙连接了,后续就可以进行通信了。
- 当蓝牙使用完毕需要断开的时候,手机可以主动断开和设备的蓝牙连接
总结
蓝牙ble基本使用过程主要分为:扫描发现蓝牙设备 、解析蓝牙广播包 、建立GATT连接 、mtu协商 、打开服务 、进行通信 、断开连接。
想必看到这里,大家对蓝牙ble就有了一个基本的了解,下一篇,我们将重点介绍蓝牙ble的扫描过程。