一、简介
BLE是指低功耗蓝牙(Bluetooth Low Energy),也被称为蓝牙4.0。它是蓝牙技术的一种变体,旨在消耗更少的电量,具有便携性,并且可以在无线传输距离较短的范围内实现低速数据传输。BLE技术已经广泛应用于智能家居、健康监测、物联网等场景中。
二、优点
- 低功耗:BLE的主要特点之一是低功耗通信。它采用了一系列的技术和优化,使得设备能够以较低的能量消耗进行通信,从而延长电池寿命。这使得BLE非常适用于那些需要长时间运行且依赖电池供电的设备。
- 快速连接和断开:BLE提供了快速建立连接和断开连接的机制,使设备能够在需要时快速建立通信连接,然后立即断开连接以降低损耗。
- 短距离通信:BLE的传输距离通常较短,适用于近距离通信场景。这有助于减少干扰和功耗,并提供更好的隐私和安全性。
- 简化的协议栈:BLE采用了简化的协议栈,包括L2CAP(逻辑链路控制与适配协议)、ATT(属性协议)和GATT(通用属性配置文件)。这简化了BLE设备的开发和部署,减少了开发成本和复杂性。
- 广播和扫描:BLE支持广播和扫描机制。设备可以通过广播发送数据,其他设备可以通过扫描来发现附近的BLE设备。这种机制使得设备可以在没有建立连接的情况下进行通信和数据交换。
- 多种应用场景:BLE被广泛应用于各种领域,包括物联网(IoT)、健康监测、智能家居、运动跟踪、位置服务等。它为这些应用提供了低功耗、快速连接和简单的数据交换。
三、相关概念
1.广播(Advertising)
BLE广播(Advertising)是一种用于设备之间的发现和连接的机制。通过广播,BLE设备可以以一种无连接的方式向周围的设备发送信息,以便其他设备能够发现它们并建立连接。
BLE广播的主要特点和原则如下:
- 无连接广播:BLE广播是一种无连接的通信方式,不需要建立实际的BLE连接。设备可以以广播包(Advertising
Packet)的形式发送信息,而无需事先知道周围设备的存在。 - 广播包(Advertising
Packet):广播包是一种特殊的数据包,用于在无连接的情况下传输数据。它包含了设备的标识符、服务信息、特征值等数据,以便其他设备能够识别和发现它。 - 广播频率和间隔:BLE设备以一定的广播频率和间隔发送广播包。广播频率决定了广播包发送的速度,而广播间隔则决定了广播包之间的时间间隔。
- 广播模式:BLE广播支持不同的广播模式,包括可连接模式(Connectable)、非可连接模式(Non-connectable)和可被扫描模式(Scannable)。可连接模式允许其他设备通过建立连接与广播设备进行通信,非可连接模式只用于广播信息,不接受连接请求,可被扫描模式允许其他设备扫描到广播设备。
- 广播数据的内容:广播数据可以包含多种信息,例如设备的名称、服务UUID、厂商自定义数据等。这些信息帮助其他设备识别和区分不同的BLE设备。
- 低功耗设计:BLE广播采用了一系列的优化措施,以减少功耗并延长设备的电池寿命。例如,设备可以选择适当的广播频率和间隔,以平衡广播的效果和功耗消耗。
通过BLE广播,设备可以宣布自身的存在、提供基本的信息和服务,以便其他设备发现和与之进行进一步的通信。广播是BLE通信的第一步,在建立连接之前,它允许设备之间进行初步的交互和识别。
在Android中,可以使用BluetoothLeScanner类来扫描和识别BLE设备。通过BluetoothGatt类进行BLE设备连接。
2.Service(服务)
服务(Service)是一种逻辑单元,用于提供BLE设备的功能和操作。每个BLE设备可以包含一个或多个服务,而每个服务又可以包含一个或多个特征值(Characteristic)。
BLE服务由以下属性组成:
- UUID(通用唯一识别码):每个服务都有一个UUID来唯一标识。UUID可以是标准的16位或128位UUID,也可以是自定义的UUID。标准UUID通常用于常见的BLE功能,如心率监测、温度传感器等。自定义UUID用于特定的应用程序和设备。
- 特征值(Characteristics):服务包含一个或多个特征值。特征值是BLE设备上存储数据的基本单元,用于提供具体的功能和操作。特征值的UUID和属性描述了它们的行为和功能。
- 描述符(Descriptors):服务和特征值可以包含一个或多个描述符。描述符提供关于服务和特征值的元数据信息,如名称、单位、权限等。
BLE服务在设备的GATT(通用属性配置文件)中进行定义和管理。GATT是BLE通信的一种协议框架,用于描述设备的服务、特征值和描述符。它提供了一种标准的方式来组织和交换BLE设备的数据。
在Android中,使用BluetoothGattService类来表示和操作BLE服务。通过BluetoothGattService对象,可以获取服务的UUID、包含的特征值列表以及与特征值相关联的描述符。
以下是一些常用的服务操作方法:
- getUuid():获取服务的UUID。
- getCharacteristics():获取与服务相关联的特征值列表。
- getIncludedServices():获取包含在该服务中的其他服务列表。
- ge