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

微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?

问题:连接蓝牙后,调用小程序writeBLECharacteristicValue,返回传输数据成功,查询硬件响应发现没有存储进去?

解决:一直以为是这个write方法的问题,找了很多相关贴,后续进行硬件日志查询,发现传输的数据确实传成功了,但是只传输了二分之一。

原因:微信小程序对于传输Value有默认字节限制,默认是20,传输内容超过了20,所以只传过去了前20个字节。超过字节限制,不会报错,也会报传输成功。

行动:查询小程序字节限制(wx.getBLEMTU),对传输内容做分包处理再传输
 

function stringToAsciiCodesAndSplit(str: string, mtuSize = 20): Uint8Array[] {
  // 将字符串转换为 ASCII 码的 ArrayBuffer
  const asciiCodes: number[] = []
  for (let i = 0; i < str.length; i++) {
    asciiCodes.push(str.charCodeAt(i))
  }
  
  const uint8Array = new Uint8Array(asciiCodes)
  console.log('uint8Array.buffer', uint8Array.buffer)

  // 定义一个 packets 数组,它将存储多个 Uint8Array 类型的元素
  const packets: Uint8Array[] = []
  
  // 根据 MTU字节 大小拆分数据
  for (let i = 0; i < uint8Array.length; i += mtuSize) {
    packets.push(uint8Array.slice(i, i + mtuSize))
  }

  return packets
}
const command = `atxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyy`
//mtu为字节限制
    const buffer = stringToAsciiCodesAndSplit(command, mtu)
    buffer.forEach((packet, index) => {
      // 将每个包转换为 ArrayBuffer
      const addBuffer = packet.buffer
      Taro.writeBLECharacteristicValue({
        deviceId: deviceId,
        serviceId: serviceId,
        characteristicId: characteristicId,
        value: addBuffer,
        success: function (res) {
          console.log(`第 ${index + 1} 个WIFI添加包发送成功:`, res)
        },
        fail: function (err) {
          console.log(`第 ${index + 1} 个WIFI添加包发送失败:`, err)
        }
      })
    })


http://www.kler.cn/a/412957.html

相关文章:

  • c++-用c++解决简单数学问题
  • Python学习第十三天--面向对象,类和对象
  • java——SpringBoot中常用注解及其底层原理
  • 《免费的学习网站推荐3》
  • 深度学习干货总结(持续更新)
  • HTML5和CSS3新增特性
  • EXISTS 和 IN 的使用方法、特性及查询效率比较
  • 开发中使用UML的流程_05 PIM-1:分析系统流程
  • QChart数据可视化
  • Vue 3 Teleport 教程
  • Epipolar-Free 3D Gaussian Splatting for Generalizable Novel View Synthesis 论文解读
  • 【接口封装】——7、连接并使用 MySQL 数据库
  • 统计词频
  • 深入解析:用Scala验证身份证号码的合法性
  • C++ 中的函数对象
  • API安全
  • Ubuntu EFI分区扩容
  • C# 索引器 详解(含对照例子)
  • “harmony”整合不同平台的单细胞数据之旅
  • RabbitMQ 集群
  • Qt中QSpinBox valueChanged 信号触发两次
  • EtherCAT Coe对象创建与通信
  • 爬取的数据如何有效进行数据分析?
  • 49-基于单片机的湿度和光照监测
  • yum源配置(本地和网络源)
  • Flink 之 Window 机制详解(下):应用示例与窗口函数