uniapp中readblecharacteristicvalue需要与onblecharacteristicvaluechange一起使用吗?

在uniapp中使用蓝牙时,readBLECharacteristicValue和onBLECharacteristicValueChange这两个API需要配合使用吗?还是说它们各自有独立的功能?如果我想读取蓝牙设备的特征值并实时监听变化,应该怎么正确使用这两个API?

2 回复

不需要。readBLECharacteristicValue是主动读取特征值,onBLECharacteristicValueChange是监听特征值变化,两者功能独立,可单独使用。


在 UniApp 中,readBLECharacteristicValueonBLECharacteristicValueChange 是两个独立的蓝牙 API,不需要强制一起使用,但通常结合使用以实现完整的蓝牙数据交互功能。以下是详细说明:

1. readBLECharacteristicValue

  • 作用:主动读取蓝牙设备特定特征值(characteristic)的数据。
  • 使用场景:当你需要手动触发读取操作时调用,例如点击按钮读取设备状态。
  • 代码示例
    uni.readBLECharacteristicValue({
      deviceId: '设备ID',
      serviceId: '服务UUID',
      characteristicId: '特征UUID',
      success: (res) => {
        console.log('读取成功');
      },
      fail: (err) => {
        console.error('读取失败', err);
      }
    });
    

2. onBLECharacteristicValueChange

  • 作用:监听蓝牙设备特征值变化的事件。当特征值被设备主动推送或修改时触发。
  • 使用场景:用于实时接收设备发送的数据(如传感器数据)。
  • 代码示例
    uni.onBLECharacteristicValueChange((res) => {
      console.log('特征值变化', res.value);
      // 处理接收到的数据(res.value 为 ArrayBuffer 类型)
      const data = new Uint8Array(res.value);
      console.log('解析数据:', data);
    });
    

使用关系:

  • 独立使用
    • 仅用 readBLECharacteristicValue:手动读取数据,但无法自动获取设备推送的更新。
    • 仅用 onBLECharacteristicValueChange:监听数据变化,但需确保设备支持主动通知(需启用特征值的 NOTIFY 属性)。
  • 结合使用
    • 先调用 readBLECharacteristicValue 获取初始数据,再通过 onBLECharacteristicValueChange 监听后续变化。
    • 典型流程:
      1. 连接设备并发现服务/特征。
      2. 启用特征值通知(使用 notifyBLECharacteristicValueChange)。
      3. 监听变化事件,并可选择性地主动读取数据。

注意事项:

  • 确保蓝牙连接已建立,且特征值支持读取或通知属性。
  • 数据格式为 ArrayBuffer,需转换为所需类型(如字符串、数值)。

总结:根据需求选择使用方式,若需实时数据更新,建议结合两者。

回到顶部