当前位置: 首页 > news >正文

OpenHarmony鸿蒙蓝牙BLE调试app

OpenHarmony蓝牙模块提供了ble的功能,本篇提供一个简单的app供测试时使用。代码使用API10,对应4.0Release版本固件。

1.开启BLE

开启BLE前,先在设置界面中打开蓝牙开关。

openBle()函数负责打开ble扫描,并打印扫描结果。主要代码如下:

import ble from "@ohos.bluetooth.ble"openBle():void {try {ble.on("BLEDeviceFind", (data:Array<ble.ScanResult>) => {// console.info('BLE scan device find result = '+ JSON.stringify(data));let i = 0data.forEach(element => {console.info('BLE scan device[' + i + '] deviceId = '+ element["deviceId"] +' name = ' + element["deviceName"]  +' rssi = ' + element["rssi"] +' data['+element["data"].byteLength+'] = ' +this.dataToString(element["data"]))if (element.rssi > minRssi && element.deviceName != '' ) {this.addData(element)}i++});});ble.startBLEScan(null,{interval: 500,dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE,});} catch (err) {console.error("ble errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);}}

2.关闭BLE

            ble.off('BLEDeviceFind')ble.stopBLEScan();

3.添加ble设备

扫描到ble设备后,添加到本地列表并显示

  addData(data:ble.ScanResult):void {let bFind = falsethis.availableDevices.forEach(element => {if (!bFind && element.deviceId == data.deviceId) {console.info('BLE scan update ' + data.deviceId + ' rssi:' + element.rssi +' ==> '+ data.rssi)element.rssi = data.rssibFind = true}})if (!bFind) {console.info('BLE scan add ' + data.deviceId + ' count:' + this.availableDevices.length)this.availableDevices.push(data)this.message='BLE count:' + this.availableDevices.length}}

4.ble数据转换

将ble的data为16进制字符串

  dataToString(data:ArrayBuffer) :String {let str = ''let v = new Uint8Array(data);v.forEach(element => {let s = ''s =  element.toString(16)if (s.length == 1) {s = '0'+s}str+=s+' '});return str}

最终的效果:

完整hap代码,请从链接下载

https://download.csdn.net/download/pjie131_/89279567

http://www.lryc.cn/news/344031.html

相关文章:

  • HackMyVM-VivifyTech
  • 将unity中相机位置保存为json 文件或者 发送给后端
  • vue2-表单组件封装
  • 智能家居4 -- 添加接收消息的初步处理
  • Python selenium
  • Python内置函数next()详解
  • 初识指针(1)<C语言>
  • uniapp使用vconsole调试 兼容App
  • 论文笔记模版
  • docker-本地私有仓库、harbor私有仓库部署与管理
  • 【Go 语言入门专栏】Go 语言的起源与发展
  • 发电机组远程管理,提升管控力,降低运维成本
  • java将文件压缩打包后进行下载
  • 【4/26-4/30】 Arxiv安全类文章速览
  • 活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁
  • Easy TCP Analysis提供了四大特性,兼顾了TCP数据包分析入门学习到实战问题排查不同阶段用户对工具的需求
  • 【2】STM32·FreeRTOS·任务创建和删除
  • 日志审计系统在提高网络安全方面具有哪些重要的作用
  • 二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本
  • 13_Scala面向对象编程_伴生对象
  • RS485空调系统到BACnet江森楼宇系统的高效整合攻略
  • Springboot集成Redis操作缓存-06
  • 【WPF】聊聊WPF中INotifyPropertyChanged [TOC]
  • SpringBoot Actuator未授权访问漏洞的解决方法
  • AI大模型探索之路-训练篇18:大语言模型预训练-微调技术之Prompt Tuning
  • Ollamallama
  • 苹果Mac用户下载VS Code(Universal、Intel Chip、Apple Silicon)哪个版本?
  • Linux(Ubuntu)安装CGAL(非root)
  • hadoop学习---基于Hive的教育平台数据仓库分析案例(三)
  • RAFT:引领 Llama 在 RAG 中发展