鸿蒙5.0&next开发【低功耗蓝牙开发】系统开发网络开发实战
概述蓝牙(Bluetooth)是一种无线通信技术,被广泛应用于各种电子装备之间的短距离数据传输和连接。而低功耗蓝牙(Bluetooth Low Energy,简称 BLE)是一种可以或许在低功耗情况下进行通信的蓝牙技术。与传统蓝牙相比,BLE的功耗更低,适用于需要长时间运行的低功耗装备,如智能手表、康健监测装备、智能家居等。
本文适用于低功耗蓝牙通信相关的开发,主要先容了基于BLE进行蓝牙扫描管理、蓝牙连接状态管理、蓝牙装备特征值同步三个场景,并分别从服务端和客户端描述其相关实现。
实现原理
实现低功耗蓝牙通信的能力主要步骤如下:
首先服务端需要创建实例,乐成创建后,需要添加对应服务,才气开启BLE广播,向客户端通报相关信息。当服务端开启BLE广播后,还需要订阅BLE连接状态,即对连接状态进行监听。当连接状态变化时,如断开连接,则此时需要关闭BLE广播。在服务端接收到客户端发起的连接请求和发起的特征值订阅请求后,才气向客户端通报特征值信息。
而客户端同样需要创建实例,并获取相关服务,才气通过蓝牙扫描到服务端,并发起连接请求和特征值订阅请求。客户端也需要监听连接状态,当断开连接时,关闭对应的监听能力。
https://i-blog.csdnimg.cn/direct/c99d13e34c8f4e73b1ec4dce107c0dd4.png
关键技术
实现低功耗蓝牙通信能力需要使用[@ohos.bluetooth.ble (蓝牙ble模块)]中提供的API能力,服务端使用的API主要包罗[创建服务器实例]、[发送BLE广播]、[特征值变化关照]等;客户端使用的API主要包罗[蓝牙连接]、[订阅蓝牙低功耗装备的特征值变化]、[订阅蓝牙低功耗装备的连接状态变化事件]等。
开发流程
在需要使用低功耗蓝牙进行通信的场景中:
服务端
[*]调用接口创建GattServer实例,即创建服务端。
[*]调用接口在服务端添加服务。
[*]调用接口开始发送BLE广播,向连接的客户端装备提供数据。
[*]调用方法在服务端订阅BLE连接状态变化事件。
[*]调用接口,在服务端特征值发生变化时,自动关照已连接的客户端装备。
客户端
[*]调用接口创建GattClientDevice实例,即创建客户端。
[*]调用接口发起连接远端蓝牙低功耗装备。
[*]调用接口向服务端发送设置关照此特征值请求。
[*]调用接口订阅蓝牙低功耗装备的特征值变化事件。需要先调用接口或接口才气接收服务端的关照。
[*]调用接口订阅蓝牙低功耗装备的连接状态变化事件。
蓝牙扫描管理
场景描述
BLE扫描主要分为被动扫描和自动扫描两种模式。被动扫描是指装备监听周围的广播信息,不自动发起连接请求;而自动扫描则会在接收到广播的同时,向广播装备发送扫描请求,以获取更详尽的装备信息。
蓝牙扫描管理是在自动扫描中,对扫描出的结果进行管理。自动扫描时,不但可以设置扫描参数,还能处理扫描结果。如扫描时设置扫描时间间隔、扫描连续时间等;扫描出结果后,可对装备列表更新,并过滤相关装备信息。
实现原理
蓝牙扫描步骤如下:
首先服务端需要检查蓝牙状态,如未开启蓝牙,则需要向用户申请开启蓝牙;如已开启,则开启广播。然后客户端也需要检查蓝牙状态,如未开启蓝牙,则需要向用户申请开启蓝牙;如已开启,则设置扫描参数,并启动蓝牙扫描。根据扫描结果来处理相关装备信息并展示,然后自动发起蓝牙连接请求,连接远端装备。
https://i-blog.csdnimg.cn/direct/8e9d1a4f550145ac9dc8ba1c75e58e3d.png
关键技术
服务端:
[*]调用接口,查询装备的蓝牙状态。根据返回结果的值来判断蓝牙是否开启。
[*]调用接口,开启广播。只有服务端先开启广播,客户端才气搜索到装备。
[*]当完成广播时,调用接口,停止广播。
客户端:
[*]与服务端步骤1相同。
[*]调用接口,可通过参数传入设置的扫描参数,进行扫描。
[*]调用方法订阅BLE装备发现上报事件,并处理扫描到的结果。
[*]调用接口,连接远端蓝牙低功耗装备。
[*]当断开连接时,调用接口,停止蓝牙扫描。
实现流程
服务端
[*]导入ble、access模块。
import { ble } from '@kit.ConnectivityKit';
import { access } from '@kit.ConnectivityKit';
[*]开启广播前,需要先查询蓝牙是否可用,根据返回结果的值来判断蓝牙是否开启,当取值是STATE_ON 或STATE_TURNING_ON返回true,表示蓝牙已开启。
isBluetoothEnabled(): boolean {
const state: access.BluetoothState = access.getState();
if (state === access.BluetoothState.STATE_ON || state === access.BluetoothState.STATE_TURNING_ON) {
return true;
}
return false;
}
[*] 假如蓝牙未开启,服务端装备需要调用接口开启蓝牙。
access.enableBluetooth();
[*] 调用创建一个Gatt服务的实例,并调用接口,添加服务。服务添加乐成后,调用接口开始广播。
startAdvertiser(): boolean {
if (!this.isBluetoothEnabled()) {
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]