最近用uniapp开发微信小程序的一个项目中用到了低功耗蓝牙,但是其中收包 ,发包的时候不能超过20字节,所以就需要我们来进行分包操作了
以下是对分包发送的一些处理,分包接收操作请看上篇文章
说明: 我项目中的数据结构中05是帧头, FE是帧尾

以下是分包发送的代码:
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