微信小程序数据接收

1.微信小程序蓝牙模块中的

复制代码
wx.onBLECharacteristicValueChange 

回调函数有时候一个数据包会分多个数据包回调,有时候多个数据包会合并成一个数据包回调,如果接收到数据包就处理业务,分拆的和合并的数据都会因为解析失败,导致业务无法正常进行。

2.数据包设计格式为7b开头,随后两位代表整体长度(7b用于鉴定数据合法性,长度用于控制后续数据处理)。

3.数据包开头不为7b开头则视为非法数据丢弃。

4.数据包7b开头长度不足,则等后续数据进行拼接后再次处理。

5.数据包7b开头长度溢出(正好视为溢出0位),则把长度正常部分交给业务处理,随后把溢出部分再次进入第2步处理(递归)。

6.第5步采用了递归,但是每次受理数据都会截断,总有截断到空串的时候,所以不用担心递归会造成死循环。

复制代码
const bufferHead = '7b'; //缓冲区头部
const onBLECharacteristicValueChange = (cb) => {
    //首次监听清空
    let bufferString = "";
    const handleHex = (str, strHex) =>{
      console.log("BLE收到消息:"+strHex);
      //1.检验缓冲区数据是否合法,合法则保留不合法则丢弃
      if(bufferString.length > 0 && bufferString.slice(0,2) !== bufferHead){
        console.log("BLE缓冲区不合法丢弃:"+bufferString);
        bufferString = "";
      }
      //2.缓冲区拼接新数据(缓冲区有长度直接拼,无长度新数据合法才能拼(新数据为空或者7b开头为合法))
      if(bufferString.length > 0 || strHex === "" || strHex.slice(0,2) === bufferHead){
        console.log("BLE缓冲区合法拼接:"+bufferString+"和"+strHex);
        bufferString += strHex;
      }
      //3.取数据的合法长度
      let bufferLength = 4; //合法字节至少四位,因为第三位和第四位代表长度
      if(bufferString.length >= 4){
        bufferLength = parseInt(bufferString.slice(2,4), 16)*2;
      }
      //4.长度充足截取有效内容,剩余部分存入缓冲区
      if(bufferString.length >= bufferLength){
        const value = bufferString.slice(0,bufferLength);
        bufferString = bufferString.slice(bufferLength);
        console.warn("BLE缓冲区溢出分解为:"+value+"和"+bufferString);
        cb(str, value);
        //5.黏包情况继续处理剩余部分,若剩余部分有完整包则能继续处理业务
        if(bufferString.length >0){
          handleHex(str, "");
        }
      }else{
        console.log("BLE缓冲区长度缺失:"+(bufferLength-bufferString.length));
      }
    }
    wx.onBLECharacteristicValueChange((res) => {
        let x = new Uint8Array(res.value);
        let strHex = ""
        let str = ""
        for (let i = 0; i < x.length; i++) {
            strHex = strHex + x[i].toString(16).padStart(2, "0")
        }
        handleHex(str, strHex);
    })
}
相关推荐
2501_9151063244 分钟前
常见 iOS 抓包工具的使用方式与组合思路
android·ios·小程序·https·uni-app·iphone·webview
说私域2 小时前
基于AI智能名片链动2+1模式S2B2C商城小程序的企业运营能力提升策略研究
大数据·人工智能·小程序·开源·流量运营
宁夏雨科网2 小时前
家电公司想开发小程序有没有现成的
小程序·家电·商城小程序·家电小程序·家电商城
计算机毕设指导62 小时前
基于微信小程序的咖啡店点餐系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
计算机程序设计小李同学19 小时前
婚纱摄影集成管理系统小程序
java·vue.js·spring boot·后端·微信小程序·小程序
幽络源小助理1 天前
SpringBoot+小程序高校素拓分管理系统源码 – 幽络源免费分享
spring boot·后端·小程序
Mr -老鬼1 天前
移动端跨平台适配技术框架:从发展到展望
android·ios·小程序·uni-app
内存不泄露1 天前
棋牌预约小程序系统论文
小程序
计算机徐师兄1 天前
Java基于微信小程序的食堂线上预约点餐系统【附源码、文档说明】
java·微信小程序·食堂线上预约点餐系统小程序·食堂线上预约点餐微信小程序·java食堂线上预约点餐小程序·食堂线上预约点餐小程序·食堂线上预约点餐系统微信小程序
说私域2 天前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序