论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
移动端开发
›
鸿蒙
›
鸿蒙5.0&next开发【低功耗蓝牙开发】系统开发网络开发实 ...
鸿蒙5.0&next开发【低功耗蓝牙开发】系统开发网络开发实战 ...
瑞星
论坛元老
|
2025-4-18 16:55:07
|
显示全部楼层
|
阅读模式
楼主
主题
1675
|
帖子
1675
|
积分
5025
概述
蓝牙(Bluetooth)是一种无线通信技术,被广泛应用于各种电子装备之间的短距离数据传输和连接。而低功耗蓝牙(Bluetooth Low Energy,简称 BLE)是一种可以或许在低功耗情况下进行通信的蓝牙技术。与传统蓝牙相比,BLE的功耗更低,适用于需要长时间运行的低功耗装备,如智能手表、康健监测装备、智能家居等。
本文适用于低功耗蓝牙通信相关的
开发
,主要先容了基于BLE进行蓝牙扫描管理、蓝牙连接状态管理、蓝牙装备特征值同步三个场景,并分别从服务端和客户端描述其相关实现。
实现原理
实现低功耗蓝牙通信的能力主要步骤如下:
首先服务端需要创建实例,乐成创建后,需要添加对应服务,才气开启BLE广播,向客户端通报相关信息。当服务端开启BLE广播后,还需要订阅BLE连接状态,即对连接状态进行监听。当连接状态变化时,如断开连接,则此时需要关闭BLE广播。在服务端接收到客户端发起的连接请求和发起的特征值订阅请求后,才气向客户端通报特征值信息。
而客户端同样需要创建实例,并获取相关服务,才气通过蓝牙扫描到服务端,并发起连接请求和特征值订阅请求。客户端也需要监听连接状态,当断开连接时,关闭对应的监听能力。
关键技术
实现低功耗蓝牙通信能力需要使用[@ohos.bluetooth.ble (蓝牙ble模块)]中提供的API能力,服务端使用的API主要包罗[创建服务器实例]、[发送BLE广播]、[特征值变化关照]等;客户端使用的API主要包罗[蓝牙连接]、[订阅蓝牙低功耗装备的特征值变化]、[订阅蓝牙低功耗装备的连接状态变化事件]等。
开发
流程
在需要使用低功耗蓝牙进行通信的场景中:
服务端
调用[createGattServer()]接口创建GattServer实例,即创建服务端。
调用[addService()]接口在服务端添加服务。
调用[startAdvertising()]接口开始发送BLE广播,向连接的客户端装备提供数据。
调用[on(‘connectionStateChange’)]方法在服务端订阅BLE连接状态变化事件。
调用[notifyCharacteristicChanged()]接口,在服务端特征值发生变化时,自动关照已连接的客户端装备。
客户端
调用[createGattClientDevice()]接口创建GattClientDevice实例,即创建客户端。
调用[connect()]接口发起连接远端蓝牙低功耗装备。
调用[setCharacteristicChangeNotification()]接口向服务端发送设置关照此特征值请求。
调用[on(‘BLECharacteristicChange’)]接口订阅蓝牙低功耗装备的特征值变化事件。需要先调用[setCharacteristicChangeNotification]接口或[setCharacteristicChangeIndication]接口才气接收服务端的关照。
调用[on(‘BLEConnectionStateChange’)]接口订阅蓝牙低功耗装备的连接状态变化事件。
蓝牙扫描管理
场景描述
BLE扫描主要分为被动扫描和自动扫描两种模式。被动扫描是指装备监听周围的广播信息,不自动发起连接请求;而自动扫描则会在接收到广播的同时,向广播装备发送扫描请求,以获取更详尽的装备信息。
蓝牙扫描管理是在自动扫描中,对扫描出的结果进行管理。自动扫描时,不但可以设置扫描参数,还能处理扫描结果。如扫描时设置扫描时间间隔、扫描连续时间等;扫描出结果后,可对装备列表更新,并过滤相关装备信息。
实现原理
蓝牙扫描步骤如下:
首先服务端需要检查蓝牙状态,如未开启蓝牙,则需要向用户申请开启蓝牙;如已开启,则开启广播。然后客户端也需要检查蓝牙状态,如未开启蓝牙,则需要向用户申请开启蓝牙;如已开启,则设置扫描参数,并启动蓝牙扫描。根据扫描结果来处理相关装备信息并展示,然后自动发起蓝牙连接请求,连接远端装备。
关键技术
服务端:
调用[access.getState()]接口,查询装备的蓝牙状态。根据返回结果[BluetoothState]的值来判断蓝牙是否开启。
调用[startAdvertising()]接口,开启广播。只有服务端先开启广播,客户端才气搜索到装备。
当完成广播时,调用[stopAdvertising()]接口,停止广播。
客户端:
与服务端步骤1相同。
调用[startBLEScan]接口,可通过[options]参数传入设置的扫描参数,进行扫描。
调用[on(‘BLEDeviceFind’)]方法订阅BLE装备发现上报事件,并处理扫描到的结果。
调用[connect()]接口,连接远端蓝牙低功耗装备。
当断开连接时,调用[stopBLEScan()]接口,停止蓝牙扫描。
实现流程
服务端
导入ble、access模块。
import { ble } from '@kit.ConnectivityKit';
import { access } from '@kit.ConnectivityKit';
复制代码
开启广播前,需要先查询蓝牙是否可用,根据返回结果[BluetoothState]的值来判断蓝牙是否开启,当取值是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()]接口开启蓝牙。
access.enableBluetooth();
复制代码
调用[createGattServer()]创建一个Gatt服务的实例,并调用[addservice()]接口,添加服务。服务添加乐成后,调用[startAdvertising()]接口开始广播。
startAdvertiser(): boolean {
if (!this.isBluetoothEnabled()) {
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
瑞星
论坛元老
这个人很懒什么都没写!
楼主热帖
复习一下Linux常用命令,孰能生巧~ ...
OpenSSL RSA相关基本接口和编程示例 ...
2022护网面试题总结
一次服务器被入侵的处理过程分享 ...
使用 Power Shell 修改 Hyper-V 虚拟机 ...
适用于顺序磁盘访问的1分钟法则 ...
Android studio 连接SQLite数据库 +创 ...
内网安全-横向移动(1)
Iceberg在袋鼠云的探索及实践 ...
Oracle实现金额小写转大写函数 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
物联网
数据仓库与分析
SQL-Server
备份
云原生
公有云
快速回复
返回顶部
返回列表