Android-蓝牙ble(介绍篇)

本章关键:蓝牙发展史蓝牙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)是一种低功耗蓝牙技术,它在医疗、穿戴设备和安防领域具有广泛的应用。

  1. 医疗领域

    • 远程患者监控:BLE技术可以用于收集患者的健康数据,如心率、血压、血糖等,并实时发送给医疗人员。这对于需要持续监控健康状况的患者来说,可以大大提高生活质量,并减少医疗成本。
    • 医疗设备追踪:在医院环境中,BLE可以用于追踪和定位医疗设备,如轮椅、心电图机等,从而提高医疗资源的管理效率。
  2. 穿戴设备

    • 健康和健身追踪:BLE技术在健康和健身追踪设备中得到了广泛的应用,如智能手环、智能手表等设备可以通过BLE连接到用户的手机,实时监测和记录用户的运动数据和健康状况。
    • 智能穿戴:除了健康和健身追踪,BLE还被用于其他类型的智能穿戴设备,如智能眼镜、智能鞋等。这些设备可以通过BLE与用户的手机或其他设备进行通信,提供各种便捷的功能。
  3. 安防领域

    • 室内定位:在商场、博物馆等公共场所,BLE技术可以用于提供精确的室内定位服务,帮助用户找到他们想去的地方。
    • 物品追踪:BLE标签可以附着在钥匙、背包等易丢失的物品上,当物品丢失时,可以通过手机上的BLE追踪应用找回。
    • 智能家居:在智能家居系统中,BLE技术可以用于控制各种家用设备,如灯光、空调、电视等。
  4. 蓝牙mesh

    蓝牙BLE(Bluetooth Low Energy)在蓝牙Mesh网络中有着重要的应用。蓝牙Mesh是一种网络协议,目前是由蓝牙SIG联盟制定和维护的,它的设计允许大量的蓝牙设备进行互联,并可以在这些设备之间传输数据。这种网络架构特别适合于需要大规模设备互联的应用场景,如智能家居、工业自动化、城市照明等。以下是BLE在蓝牙Mesh中的一些具体应用:

    • 智能家居:在智能家居中,蓝牙Mesh网络可以连接各种家用设备,如灯光、空调、电视、门锁等。用户可以通过手机或其他控制设备,通过BLE技术控制这些设备的开关、亮度、温度等。此外,这些设备还可以互相通信,实现更复杂的自动化场景,如当你打开家门时,灯光自动开启。

    • 城市照明:在城市照明中,蓝牙Mesh网络可以用于连接大量的街灯,实现远程控制和监控。通过BLE技术,可以实现对街灯的开关、亮度等进行精细化管理,以节约能源和维护成本。

    • 工业自动化:在工业自动化中,蓝牙Mesh网络可以用于连接各种传感器和控制设备,实现实时数据收集和设备控制。这对于提高生产效率和安全性非常有帮助。

    • 资产追踪:在大型仓库或商场中,蓝牙Mesh网络可以用于追踪和定位各种物品。通过在物品上安装BLE标签,可以实时了解物品的位置和状态,以提高管理效率。

  5. beacon信标。蓝牙 BLE(Bluetooth Low Energy)在信标(Beacon)中的应用非常广泛。信标是一种小型无线发射器,它们使用 BLE 技术向附近的设备广播信号。这些信号可以被智能设备(如智能手机或平板电脑)接收并进行处理,实现各种功能。以下是 BLE 在信标中的一些具体应用:

    • 室内导航:在大型建筑物(如商场、机场或博物馆)内,可以部署 BLE 信标来提供室内导航服务。用户的设备可以接收来自多个信标的信号,通过计算信号强度来确定用户的精确位置。

    • 营销曝光:商家可以使用 BLE 信标在店铺或特定地点发送特定的广告或促销信息。当用户的设备接近信标时,他们可以收到这些信息,从而提高商家的销售。

    • 事件触发:在某些应用中,BLE 信标可以用于触发特定的事件。例如,在智能家居中,当用户的设备接近信标时,可以自动打开门锁或灯光。

    • 资产跟踪:在仓库或医院中,可以通过在重要物品上安装 BLE 信标来跟踪它们的位置。这可以帮助管理者更有效地管理资产,并减少丢失。

总的来说,BLE技术以其低功耗、高效率的特点,在医疗、穿戴设备和安防领域,其中在蓝牙BLE基础上衍生设计的蓝牙Mesh网络中的应用,使得大规模设备互联成为可能,为各种应用场景带来了极大的便利。蓝牙BLE在信标中的应用,为各种场景提供了精确的定位和无线通信能力,从而实现了许多创新的服务和应用。

基本流程

工作步骤:

graph LR 扫描 --> 扫描到蓝牙设备 --> 开始建立GATT连接 --> 进行通信 --> 通信结束 --> 断开连接

通过上述流程图可以看出,基本的使用流程就是发现设备、连接设备、开始通信。首先,为了让大家理解这个过程,我们必须先了解蓝牙ble协议的几个基本重要的知识点。

核心概念

蓝牙 BLE(Bluetooth Low Energy)设备的主要组成可以分为以下几个核心部分:

  1. 控制器(Controller):这是 BLE 设备的物理部分,负责无线电频率的通信。它包括一个射频前端,一个物理层(PHY),和一个链路层(Link Layer)。

  2. 主机(Host) :这部分是 BLE 协议栈的软件部分,包括 L2CAP(逻辑链路控制和适配协议),安全管理,属性协议(ATT),和通用属性档案(GATT,是蓝牙ble的通信规范标准)。

  3. 应用程序(Application):这是运行在 BLE 设备上的软件,它使用主机提供的服务来实现特定的功能。

  4. 配置文件(Profiles):这些是预定义的设备角色,描述了设备如何使用 BLE 服务来实现特定的应用。

  5. 服务和特性(Services and Characteristics):这些是 BLE 设备提供的特定功能,例如心率监测或温度传感。服务包含一个或多个特性,每个特性都有一个值和多个描述符。

  6. 广播和连接(Advertising and Connections):BLE设备可以广播其存在和提供的服务,以便其他设备可以发现并连接它。

以上就是蓝牙 BLE 的主要组成部分,每个部分都对 BLE 设备的功能和性能有重要的影响。

现在我们来查看一下设备和APP之间基本的通信时序图:

sequenceDiagram participant Client participant Device participant 周围(环境) Note right Of Client:扫描阶段 Device-->>周围(环境): 向外发送广播包 Client-->>周围(环境): 开启蓝牙扫描 周围(环境)-->>Client: 捕获蓝牙ble广播包 Note right Of Client:广播解析 Client->>Client:解析蓝牙的广播包
(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:断开链接
  1. 设备上电,开始向外发送ble广播包(这个过程就是为了让手机能够发现到设备)
  2. 控制端(通常我们使用app,也就是手机)打开蓝牙进行蓝牙扫描
  3. 通过捕获蓝牙设备的广播包来发现设备
  4. 当app发现设备的时候,需要过滤对应的设备是否是我们需要的目标设备。我们会通过解析广播里面带的mac地址以及广播的services来判断是否是我们需要的设备。
  5. app向目标设备发起蓝牙Gatt连接。(Gatt:GATT(Generic Attribute Profile)是蓝牙低功耗(Bluetooth Low Energy,BLE)设备用于发送和接收数据的主要方式。它是一种在BLE连接中交换数据的通用规范,也是一种C-S设计架构的)。
  6. 设备响应GATT连接
  7. 手机发起MTU协商。MTU(Maximum Transmission Unit):最大传输单元,指一次数据传输的最大payload,通常用Byte来做单位(蓝牙协议里面的MTU有几个比较典型的mtu值,分别为23 Bytes、247 Bytes、517 Bytes,虽然这个值是由蓝牙协议栈协商出来的,但是我在工作当中,通常这个值具体是多少很大程度上是取决于设备端)。
  8. 设备响应MTU协商结果。
  9. 手机发现Services(通常蓝牙的Services由UUID组成的一系列集合),查看Services里面是否有符合我们要求的服务。(不同类型的服务对应的UUID也是不同的,例如:健康类服务、天气服务等,但是有些公司其实不太区分,只是拿UUID判断是否是属于自己公司的产品,这个后面我们会展开细说。)
  10. 发现符合是服务之后,手机请求打开设备服务的通道,也就是notify Service
  11. 在上述过程都顺利完成之后,手机就算是和设备建立了简单的蓝牙连接了,后续就可以进行通信了。
  12. 当蓝牙使用完毕需要断开的时候,手机可以主动断开和设备的蓝牙连接

总结

蓝牙ble基本使用过程主要分为:扫描发现蓝牙设备解析蓝牙广播包建立GATT连接mtu协商打开服务进行通信断开连接

想必看到这里,大家对蓝牙ble就有了一个基本的了解,下一篇,我们将重点介绍蓝牙ble的扫描过程。

相关推荐
openinstall全渠道统计3 小时前
免填邀请码工具:赋能六大核心场景,重构App增长新模型
android·ios·harmonyos
双鱼大猫3 小时前
一句话说透Android里面的ServiceManager的注册服务
android
双鱼大猫4 小时前
一句话说透Android里面的查找服务
android
双鱼大猫4 小时前
一句话说透Android里面的SystemServer进程的作用
android
双鱼大猫4 小时前
一句话说透Android里面的View的绘制流程和实现原理
android
双鱼大猫4 小时前
一句话说透Android里面的Window的内部机制
android
双鱼大猫5 小时前
一句话说透Android里面的为什么要设计Window?
android
双鱼大猫5 小时前
一句话说透Android里面的主线程创建时机,frameworks层面分析
android
苏金标5 小时前
android 快速定位当前页面
android
雾里看山9 小时前
【MySQL】内置函数
android·数据库·mysql