收藏
回答

wx.writeBLECharacteristicValue写入数据成功 ,但设备没反应?

wx.writeBLECharacteristicValue连接蓝牙打印写入数据成功 但是设备没反应,

点击设备可以接收到wx.onBLECharacteristicValueChange设备返回值?

代码 https://developers.weixin.qq.com/s/jlMOOhm87NBs

writeBLECharacteristicValue() {
    // 向蓝牙设备发送一个0x00的16进制数据
    var senddata = strToHexCharCode('ATK001#');
    let buffer = new ArrayBuffer(senddata.length)
    let dataView = new DataView(buffer)
    //dataView.setUint8(0, Math.random() * 255 | 0)
    for (var i = 0; i < senddata.length; i++) {
      dataView.setUint8(i, senddata.charAt(i).charCodeAt())
    }
   /// let aa=this.strToArrayBuffer()
    console.log('获取二进制数据',buffer)
    //向低功耗蓝牙设备特征值中写入二进制数据。
    wx.writeBLECharacteristicValue({
      deviceIdthis._deviceId,
      serviceIdthis._serviceId,
      characteristicIdthis._characteristicId,
      value: buffer,
      success (res) {
        console.log('成功写数据writeBLECharacteristicValue success', res)
        //如果 uni.writeBLECharacteristicValue 走 success ,证明你已经把数据向外成功发送了,但不代表设备一定就收到了。通常设备收到你发送过去的信息,会返回一条消息给你,而这个回调消息会在 uni.onBLECharacteristicValueChange 触发
      },
       fail(res) {
        console.error('失败写数据getBLEDeviceCharacteristics', res)
      }
    })
  },


最后一次编辑于  2022-08-05
回答关注问题邀请回答
收藏

6 个回答

  • 王妙端
    王妙端
    2022-08-09

    解决了 字符串 转 ArrayBufer 问题影响

    改成如下就可以了

    //将字符串转换成ArrayBufer
     function string2buffer(str{
      if (!str) return;
      var val = "";
      for (var i = 0; i < str.length; i++) {
          val += str.charCodeAt(i).toString(16);
      }
      str = val;
      val = "";
      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进制转化为ArrayBuffer
      return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h{
          return parseInt(h, 16)
      })).buffer
    }
    


    2022-08-09
    有用 4
    回复 2
    • 林夕
      林夕
      2023-12-01
      我的还是不行
      2023-12-01
      回复
    • Queen
      Queen
      2023-12-07
      楼主,你用的打印机是谁家的呀
      2023-12-07
      回复
  • 🌹
    🌹
    11-27

    可以查一下硬件日志,看一下传输给硬件的内容是什么,还有一种可能是因为微信小程序字节限制的问题(默认最大字节是20)传输内容超过20字节,被拦截,小程序报传输成功,实际硬件没有收到

    11-27
    有用 1
    回复
  • 阿猫阿狗
    阿猫阿狗
    11-07

    对于指令发出但是设备没响应的,换一个特征发指令试试,把能查到的都挨个试一下

    11-07
    有用
    回复
  • shishichen
    shishichen
    2023-04-20

    为什么你能发送数据啊?你获取第一个服务就return 第一个服务又全是read

    2023-04-20
    有用
    回复
  • stepForward
    stepForward
    2022-09-19

    兄弟,我也是一样,success走了,但是设备没有给到任何的反应

    在onBLECharacteristicValueChange里没有任何的返回
    
    2022-09-19
    有用
    回复 3
    • stepForward
      stepForward
      2022-09-19
      而且是部分苹果手机会有这个问题,偶现
      2022-09-19
      回复
    • shishichen
      shishichen
      2023-04-21
      解决了吗大哥
      2023-04-21
      回复
    • 🌹
      🌹
      11-26
      解决了吗
      11-26
      回复
  • 耿霄
    耿霄
    2022-08-09

    搞个代码片段吧

    2022-08-09
    有用
    回复 5
    • 王妙端
      王妙端
      2022-08-09
      https://developers.weixin.qq.com/s/jlMOOhm87NBs
      2022-08-09
      回复
    • Bean
      Bean
      2022-08-18回复王妙端
      向蓝牙设备发送一个0x00的16进制数据
          var senddata = strToHexCharCode('ATK001#');  发送一个 0x00 的16进制数据, 为什么发送的是 ATK001 啊
      2022-08-18
      回复
    • 王妙端
      王妙端
      2022-08-29回复Bean
      strToHexCharCode 这个是转 16进制数据
      2022-08-29
      回复
    • treasure
      treasure
      2023-07-22回复王妙端
      用你的代码连我们公司的打印机也是不行。。。
      2023-07-22
      1
      回复
    • Queen
      Queen
      2023-12-07回复treasure
      我的打印机也不行,请问你现在解决了吗
      2023-12-07
      回复
登录 后发表内容