uniapp连接蓝牙称(接收,发送)

复制即用,看好注释修改

用微信开发者的->真机调试,进行调试

<view>{{ www }}</view> //数据展示<template><view>{{ www }}</view>
</template><script>export default {data() {return {bluetooth: false, //按钮状态connectedDeviceId: '', // 连接蓝牙设备idserviceId: '',  // 服务,也就是uuid 一个设备可能有多个uuid writeId: '',    //只用用一个 uuidcharacteristicId: '', // 设备特征id 发送指令会用到devicesList: [],www: '',convertWeight: '',  //接收的数据 处理过后 显示重量endow: false,    // 是否用蓝牙称给的数据}},onUnload() { // 离开断开蓝牙this.closeBLEConnection();uni.showLoading({title: '断开蓝牙',});setTimeout(function() {uni.hideLoading();}, 1000);},created(){this.Search(); //进来直接开始搜索//发送指令// this.sendMy();   这里是发送指令 自己找按钮调用},methods: {// 蓝牙模块 测试好后封装Search() { // 查看设备状态var that = this;// console.log("search:", that.searching);if (!that.searching) {//关闭现有的蓝牙连接uni.closeBluetoothAdapter({complete: function(res) {console.log("关闭蓝牙模块-----------------------------------------");console.log(res);//打开蓝牙适配uni.openBluetoothAdapter({success: function(res) {console.log("初始化蓝牙模块----------------------------------------");console.log(res);uni.getBluetoothAdapterState({success: function(res) {console.log("获取本机蓝牙适配器状态----------------------------------------");console.log(res);},});//开始搜索蓝牙设备uni.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,success: function(res) {// console.log(// 	"搜索设备-----------------------------------------"// );that.onBluetoothDeviceFound();that.searching = true;that.devicesList = [];},});},fail: function(res) {// console.log(res);setTimeout(() => {uni.showModal({title: "温馨提示",content: "蓝牙未打开,请打开后再连接",showCancel: false,confirmColor: "#008fd6",});that.isSearch = false;}, 1000);},});},});} else {uni.stopBluetoothDevicesDiscovery({success: function(res) {// console.log("停止搜索设备-----------------------------------------");// console.log(res);that.searching = false;},});}},//监听寻找到新设备的事件onBluetoothDeviceFound() { //搜索周围蓝牙列表var that = this;// console.log("打开设备监听");uni.onBluetoothDeviceFound(function(devices) {var reg = new RegExp(/[^\s]+/g);if (devices.devices) {if (devices.devices[0].name.match(reg)) {console.log(devices.devices[0]);that.devicesList.push(devices.devices[0]);}}});},//这里写一个按钮调一下   e 就是上面给方法返回来的数据,取一个获取就行,看打印日志,跟所需参数select(e) {console.log('点击连接', e);var that = this;that.ConnectByID({"deviceId": e.deviceId,"name": e.name}, 1);},ConnectByID(item, index) { //连接蓝牙var that = this;console.log("连接蓝牙:", item);that.connectedDeviceId = item.deviceId;uni.setStorageSync('pageName', item.name);uni.setStorageSync('connectedDeviceId', that.connectedDeviceId)uni.showLoading({title: '正在连接设备...',})uni.createBLEConnection({deviceId: item.deviceId,success(res) {uni.hideLoading()uni.showToast({title: '连接成功',duration: 2000,icon: "none"});// that.open()console.log("已连接设备----------------------------------------");uni.setStorageSync("deviceId", item.deviceId)uni.setStorageSync("name", item.name)that.getBLEDeviceServices(); //获取特征值},fail(res) {console.log(res)uni.hideLoading()uni.showModal({title: '提示',content: '连接失败',showCancel: false})}})// }},//获取蓝牙设备的服务uuid    //服务uuid可能有多个getBLEDeviceServices() {var that = this;setTimeout(() => {//获取数据可能会有延迟uni.getBLEDeviceServices({deviceId: that.connectedDeviceId,success: function(res) {console.log("获取蓝牙设备的服务uuid:" + JSON.stringify(res.services));console.log("服务uuid", res)that.services = res.services;that.serviceId = res.services[1].uuid;that.deviceId = that.connectedDeviceId;uni.setStorageSync("serviceId", that.serviceId);that.getBLEDeviceCharacteristics();},fail(res) {console.log('错误', res);},});}, 3000);},// 根据服务uuid获取蓝牙特征值开始监听写入和接收getBLEDeviceCharacteristics() {console.log("开始监听.....")let that = this;uni.getBLEDeviceCharacteristics({deviceId: that.connectedDeviceId,serviceId: that.serviceId,success: function(res) {console.log("获取蓝牙设备的特征" + JSON.stringify(res.characteristics));for (var i = 0; i < res.characteristics.length; i++) {if (res.characteristics[i].properties.notify === true) {that.characteristics = res.characteristics[i];that.characteristicId = res.characteristics[i].uuid;}if (res.characteristics[i].properties.write === true) {that.characteristics = res.characteristics[i];that.writeId = res.characteristics[i].uuid;}}uni.setStorageSync("characteristicId", that.characteristicId);uni.setStorageSync("writeId", that.writeId);that.notifyBLECharacteristicValueChange(); //7.0,开始侦听数据},});},notifyBLECharacteristicValueChange() {var that = this;// console.log(that.deviceId, that.serviceId, that.characteristicId)uni.notifyBLECharacteristicValueChange({state: true,deviceId: that.deviceId,serviceId: that.serviceId,characteristicId: that.characteristicId,success: function(res) {console.log("启用notify成功");that.onBLECharacteristicValueChange();},fail: function(res) {that.onBLECharacteristicValueChange();console.log("启用notify失败");},});that.onBLECharacteristicValueChange();},onBLECharacteristicValueChange() {console.log("开始接收")var that = this;uni.onBLECharacteristicValueChange((res) => {// 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以 ArrayBuffer 转 16进制 在转字符串that.www = that.hexCharCodeToStr(that.buf2hex(res.value));});},hexCharCodeToStr(hexCharCodeStr) {var trimedStr = hexCharCodeStr.trim();var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;var len = rawStr.length;if (len % 2 !== 0) {alert("存在非法字符!");return "";}var curCharCode;var resultStr = [];for (var i = 0; i < len; i = i + 2) {curCharCode = parseInt(rawStr.substr(i, 2), 16);resultStr.push(String.fromCharCode(curCharCode));}return resultStr.join("");},buf2hex(buffer) { // buffer is an ArrayBufferreturn Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');},//断开蓝牙closeBLEConnection() { // 这个是断开蓝牙uni.closeBLEConnection({deviceId: this.deviceId,success(res) {console.log('关闭成功', res)},fail(res) {console.log('关闭失败', res)}})},//关闭蓝牙模块    这个是手机的蓝牙// closeBluetoothAdapter({// 	success(res){// 		console.log('关闭成功',res)// 	},fail(res){// 		console.log('关闭失败',res)// 	}// })//buffer允许写入的uuid//buffer允许写入的uuidsendMy() {var that = this//this.string2buffer-->字符串转换成ArrayBufer(设备接收数据的格式ArrayBufer)var buff = that.string2buffer('1B0D0A'); // 你的指令uni.writeBLECharacteristicValue({// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取deviceId: that.deviceId,// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取serviceId: that.serviceId,// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取characteristicId: that.characteristicId,// 这里的value是ArrayBuffer类型value: buff,success: function(res) {//此时设备已接收到你写入的数据console.log("写入成功")},fail: function(err) {console.log(err)},complete: function() {console.log("调用结束");}})},string2buffer(str) {let val = ""if (!str) return;let length = str.length;let index = 0;let array = []while (index < length) {array.push(str.substring(index, index + 2));index = index + 2;}val = array.join(",");// 将16进制转化为ArrayBufferreturn new Uint8Array(val.match(/[\da-f]{2}/gi).map(function(h) {return parseInt(h, 16)})).buffer},}}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过网线连接的局域网电脑怎么实现上网功能

在机床里面的工控机有时候需要进行联网操作,但是又没有无线网或者外网网线,这时候可以通过笔记本的无线wifi功能实现上网功能. 通过网络适配器-找到wifi对应适配器-共享-1 打勾-2选中与工控机连接的网口-既可. 工控机端,将网口设置为自动获取IP

深度学习——第3章 Python程序设计语言(3.3 Python数据类型)

3.3 Python数据类型 目录 1. Python数值数据类型 2. Python库的导入和使用 3. Python序列数据类型 4. Python组合数据类型 计算机能处理各种类型的数据&#xff0c;包括数值、文本等&#xff0c;不同的数据属于不同的数据类型&#xff0c;有不同的存储方式&#xff0c;支持…

极狐gitlab ci job拉取代码之前执行命令

有时候我们希望可以在检索 Git 代码库和任何 submodules 之前执行一下命令操作&#xff0c;接下来为大家介绍下通过 hooks:pre_get_sources_script 可以满足该场景的使用。 文章目录 1. 开启 feature flag2. 使用方式方式1在 ci job 中定义 hooks.pre_get_sources_script 方式2…

从二叉搜索树到更大和树 : BST 中序遍历的经典运用

题目描述 这是 LeetCode 上的 「1038. 从二叉搜索树到更大和树」 &#xff0c;难度为 「中等」。 Tag : 「BST」、「中序遍历」 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; 二叉搜…

android通过广播打印RAM信息

通过广播打印ram相关log 参数说明&#xff1a; 广播&#xff1a;com.android.settings.action.RAM_INFO int型参数index&#xff1a;0 - 3h, 1 - 6h, 2 - 12h, 3 - 24h 代表过去时间app使用ram情况&#xff08;平均/最大占用&#xff09; Index: frameworks/base/services/cor…

Django 中的 HMAC 请求签名校验与 Vue.js 的完美协作

在 Web 应用的开发过程中,确保数据传输的安全性和完整性是一个不容忽视的问题。使用 HMAC(Hash-based Message Authentication Code)算法对请求内容进行签名校验,是一种常见且有效的安全策略。本文将详细介绍如何在 Django 后端实现 HMAC 签名校验,并展示如何在前端 Vue.j…

2023-简单点-树莓派中的硬件通讯

树莓派中的通讯方式 串口通讯什么是串口通讯&#xff1f;串口通讯的特点 tips并行通讯&#xff1f;基于网络的通讯?socket通讯 串口通讯 什么是串口通讯&#xff1f; 串行通信每次传输一个位元数据&#xff0c;并在连续进行单次过程的基础上进行通信。根据数据的传送方向&am…

leetcode_1094 拼车

1. 题意 有n段旅程&#xff0c;每段旅程由上车点、下车点、上车人数组成。 求给定的旅程是否能让所有旅程顺利完成。 拼车 2. 题解 首先肯定要将旅程按上车位置进行排序。 2.1 模拟小根堆 根据下车时间的早晚创建一个小根堆。 在每次进行新的旅程前判断是否有人下车了&am…

基于SSM+SpringBoot+Vue小区车位租赁系统

[技术实现] 小区车位租赁系统是使用SSMSpringBootVue前后端分离的管理系统。使用Spring框架可以在自动注入项目层级之间的调用对象&#xff0c;方便解耦&#xff0c;SpringMVC是体现了MVC设计思想的轻量级web框架&#xff0c;对web层进行解耦&#xff0c;使开发更简洁,MyBatis…

难以置信,一个小小的需求让我捣鼓出一个提效的网站来

难以置信&#xff0c;一个小小的需求让我捣鼓出一个提效的网站来 需求介绍 事情是这样的&#xff0c;有个群友在业务当中碰到一个小小的需求&#xff0c;需求是这样的: 页面当中存在多个输入框&#xff0c;输入框的 value 值是一个数值组成的字符串&#xff08;盲猜应该是身份…

关于开展人工智能专业人员“计算机视觉处理设计开发工程师”专项培训的通知

“人工智能技术与咨询”发布 工业与信息化部电子工业标准化研究院于2022年7月1日发布《人工智能从业技术人员要求》&#xff0c;现针对已发布标准于1月3日至7日在北京举办《自然语言与语音处理设计开发工程师》中级人才培养&#xff0c;下边是具体文件通知请大家查阅。行业人才…

CentOS7 关于 SELinux 的常用操作

SELinux&#xff08;Security-Enhanced Linux&#xff09;是一个安全增强的 Linux 内核模块&#xff0c;用于提供更强大的访问控制和强制访问控制&#xff08;MAC&#xff09;机制。它通过在内核层面对进程和文件进行标记&#xff0c;并强制执行访问策略&#xff0c;提供了额外…

对一个多维随机变量作为线性变换以后的协方差矩阵

假设是一个n维的随机变量&#xff0c;它的协方差矩阵 对做线性变换&#xff0c;其中是一个矩阵&#xff08;当然也可以是一个标量&#xff09;&#xff0c;的协方差矩阵 证明如下&#xff1a; 将代入&#xff0c;得

游戏配置表的导入使用

游戏配置表是游戏策划的标配&#xff0c;如下图&#xff1a; 那么程序怎么把把这张配置表导入使用&#xff1f; 1.首先&#xff0c;利用命令行把Excel格式的文件转化成Json格式&#xff1a; json-excel\json-excel json Tables\ Data\copy Data\CharacterDefine.txt ..\Cli…

构建满足流批数据质量监控用火山引擎DataLeap

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 面对今日头条、抖音等不同产品线的复杂数据质量场景&#xff0c;火山引擎 DataLeap 数据质量平台如何满足多样的需求&#xff1f;本文将介绍我们在弥合大数据场景下…

Apache Flink(六):Apache Flink快速入门 - Flink案例实现

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

uniapp自定义进度条组件

目标效果 原型设计为这样的样式&#xff0c;但是现有的进度条都无法满足需求&#xff0c;于是编写组件实现。 设计引用格式为 <zLineProgress :total"15" :val"7" title"你好吗" />定义组件 <template><view style"hei…

Es6新特性

一、 let 声明变量 不能重复声明有块级作用域&#xff08;不影响作用域链&#xff0c;函数里可以拿到函数外的变量&#xff09;不存在变量提升 经典案列&#xff1a;&#xff08;把for里面的var i 0; 改成 let i 0就好了&#xff0c;不然items[i]就会报错&#xff09; 二、…

Mars3d标绘的时候通过绑定单击事件,查询点击落点的图层类型

需求期望&#xff1a; 期望可以判断标绘点落下的位置是什么图层类型&#xff0c;例如是否是3dtitles模型&#xff0c;或者是gltf模型&#xff0c;或者是其他数据图层。 需求来源&#xff1a; 标绘点时&#xff0c;无法知道点落下的地方的图层类型 解决方案&#xff1a; ma…

C++ string类(1)—初始化、容量操作、迭代器

目录 前言 一、string类 二、初始化 1、无参或带参 2、用字符串变量初始化 3、用字符串初始化 4、指定数量字符 三、容量操作 1、size 2、push_back 3、append​编辑 4、运算符 5、reserve 6、resize 四、迭代器 1、正向迭代器 2、反向迭代器 3、const迭代器…