前端使用低功耗蓝牙开发的坑2(分包操作之分包发送)

2021-01-21

2795 0 0

最近用uniapp开发微信小程序的一个项目中用到了低功耗蓝牙,但是其中收包 ,发包的时候不能超过20字节,所以就需要我们来进行分包操作了

以下是对分包发送的一些处理,分包接收操作请看上篇文章

说明: 我项目中的数据结构中05是帧头, FE是帧尾

image.png

以下是分包发送的代码:

1// 14.写入功能. 2export function writeBLE(e) { 3 // console.log(e) 4 var deviceId = uni.getStorageSync("deviceId") 5 var serviceId = uni.getStorageSync("serviceId") 6 var characteristicId = uni.getStorageSync("characteristicId") 7 console.log(deviceId,serviceId, characteristicId) 8 // 向蓝牙设备发送一个0x00的16进制数据 9 return new Promise((resolve, reject) => { 10 for (var i = 0;i < e.length; i += 20) { 11 var endLength = 0 12 // console.log(i) 13 if (i + 20 < e.length) { 14 var senddata = e 15 let buffer = new ArrayBuffer(20) 16 17 let dataView = new DataView(buffer) 18 for (var j = i; j < i + 20; j++) { 19 dataView.setUint8(j - i, senddata[j]) 20 } 21 // let dataSend = [] 22 // for (var j = i; j < i + 20; j++) { 23 // dataView.setUint8(j - i, senddata[j]) 24 25 // dataSend.push(dataView.getUint8(j-i)) 26 // } 27 // console.log('多包发送的包数据:'+dataView.buffer) 28 uni.writeBLECharacteristicValue({ 29 // 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 30 deviceId: deviceId, 31 // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 32 serviceId: serviceId, 33 // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 34 characteristicId: characteristicId, 35 // 这里的value是ArrayBuffer类型 36 value: dataView.buffer, 37 // value: buffer, 38 success(res) { 39 40 resolve(res) 41 42 }, 43 fail(err) { 44 // console.log(err) 45 reject(err) 46 } 47 }) 48 // 等待 49 sleep(0.02) 50 } else { 51 var senddata = e 52 // console.log(senddata) 53 54 if (20 < e.length) { 55 56 endLength = senddata.length - i 57 // console.log(endLength, 'endLength') 58 59 } else{ 60 61 endLength = senddata.length 62 // console.log('endLength2', endLength) 63 64 } 65 66 let buffer = new ArrayBuffer(endLength) 67 68 // var dataSend = [] 69 // console.log(senddata.length) 70 let dataViewLast = new DataView(buffer) 71 for (var k = i; k < senddata.length; k++) { 72 // console.log(k) 73 // console.log(i) 74 // console.log(senddata[k]) 75 dataViewLast.setUint8(k-i, senddata[k]) 76 // console.log(dataViewLast.getUint8(k-i)) 77 // dataSend.push(dataViewLast.getUint8(k-i)) 78 79 } 80 81 82 console.log('最后一包或第一数据:' + dataViewLast.buffer) 83 uni.writeBLECharacteristicValue({ 84 // 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 85 deviceId: deviceId, 86 // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 87 serviceId: serviceId, 88 // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 89 characteristicId: characteristicId, 90 // 这里的value是ArrayBuffer类型 91 value: dataViewLast.buffer, 92 // value: buffer, 93 success(res) { 94 resolve(res) 95 }, 96 fail(err) { 97 // console.log(err) 98 reject(err) 99 } 100 }) 101 sleep(0.02) 102 } 103 } 104 }) 105} 106function sleep(delay) { 107 var start = (new Date()).getTime(); 108 while ((new Date()).getTime() - start < delay) { 109 continue; 110 } 111} 112

源码地址

https://github.com/menglin1997/BLEConn

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang