收藏
回答

wx.notifyBLECharacteristicValueChange 无法订阅特征值

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.notifyBLECharacteristicValueChange 微信iOS客户端 Version 8.0.38 2.33.0

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html

当我使用微信小程序中的连接接口连上一个双模芯片的手表之后,使用wx.notifyBLECharacteristicValueChange无法订阅特征值,必须要配对之后才能订阅,希望贵方能够尽快的解决这个问题,这将对我们很重要。双模芯片——既有传统蓝牙,又有低功耗蓝牙

回答关注问题邀请回答
收藏

3 个回答

  • Demons
    Demons
    2023-07-20

    微信小程序的蓝牙接口都是透传系统蓝牙接口的,中间不会进行拦截或修改数据,可以先使用第三方蓝牙app如nRF Connect来排除是否为手表芯片本身不支持未配对时订阅特征值

    2023-07-20
    有用
    回复 1
    • 大海
      大海
      2023-07-21
      我使用第三方蓝牙App nRF Connect连接了双模芯片的手表,在没有配对的情况下,可以订阅特征值,并且获取到了实时的步数
      2023-07-21
      回复
  • DylanQ
    DylanQ
    2023-07-26

    "使用wx.notifyBLECharacteristicValueChange无法订阅特征值"

    这里有报错吗?是报了什么错?

    2023-07-26
    有用
    回复
  • 微盟
    微盟
    2023-07-18

    微信小程序蓝牙API在实际应用中确实存在一些限制和特殊情况。由于你提供的信息有限,我会尝试给出一些可能的解决方案,但具体的解决方式可能需要根据你的设备和代码来确定。

    首先,你需要确保你已经正确地连接到蓝牙设备并发现了正确的服务和特征。对于低功耗蓝牙,每个服务和特征都有一个唯一的UUID。你需要先通过 wx.getBLEDeviceServiceswx.getBLEDeviceCharacteristics 获取到正确的服务和特征的UUID。

    然后,你需要确保你正在尝试订阅的特征支持notify或者indicate。在你调用 wx.notifyBLECharacteristicValueChange 之前,你可以先调用 wx.getBLEDeviceCharacteristics 来获取到特征的属性,然后检查 properties 对象中的 notify 或者 indicate 是否为true。

    此外,一些蓝牙设备需要在订阅特征值之前先进行配对或者认证。这可能涉及到蓝牙设备的具体实现和协议。你可能需要查阅蓝牙设备的技术文档,或者联系蓝牙设备的制造商,来获取更多的信息和帮助。


    2023-07-18
    有用
    回复 1
    • 大海
      大海
      2023-07-19
      我已经通过wx.getBLEDeviceServices获取到了服务,然后通过wx.getBLEDeviceCharacteristics获取到了特征值,并且通过notify和indicate进行了判断,在只有一个低消耗芯片的蓝牙手表中,是可以实现的,但是在双模芯片上,不进行配对就实现不了。
      /**
       * 获取手表服务
       */
      function getBLEDeviceServices() {
       wx.getBLEDeviceServices({
        deviceId: Device.deviceId,
        success(res) {
         const serviceList = res.services;
         for (let i = 0; i < serviceList.length; i++) {
          const serviceId = serviceList[i].uuid
          const serviceAttr = serviceId.substr(4, 4)
          Service[serviceAttr] = serviceId
          getBLEDeviceCharacteristics(serviceId, serviceAttr, i == serviceList.length - 1)
         }
        }
       })
      }


      /**
       * 获取手表特征值
       */
      function getBLEDeviceCharacteristics(serviceId, isCompleted) {
       wx.getBLEDeviceCharacteristics({
        deviceId: Device.deviceId,
        serviceId: serviceId,
        success(result) {
         result.characteristics.forEach((item, index) => {
          const characteristicAttr = item.uuid.substr(4, 4)
          Characteristic[serviceAttr][characteristicAttr] = item
          if (item.properties.notify || item.properties.indicate) {
           notifyList.push({ serviceId, characteristicId: item.uuid })
          }
         })
         if (isCompleted) {
          registerNotify()
          console.log('Service', Service)
          console.log('Characteristic', Characteristic)
         }
        }
       })
      }


      /**
       * 注册notifyBLECharacteristicValueChange
       */
      function registerNotify() {
       notifyList.forEach((item, index) => {
        wx.notifyBLECharacteristicValueChange({
         state: true,
         deviceId: Device.deviceId,
         serviceId: item.serviceId,
         characteristicId: item.characteristicId,
         success() {
          console.log('notify', res)
         },
         fail(res) {
          console.log('notify', res)
         }
        })
       })
      }
      2023-07-19
      回复
登录 后发表内容