wx.onBLECharacteristicValueChange((res) 是一个监听蓝牙设备特征值变化的方法。当蓝牙设备的特征值发生变化时,会触发该方法,并返回特征值的变化情况。

下面是一个编写详细程序说明的示例:

  1. 首先,需要在小程序的配置文件 app.json 中添加以下权限:
'permissions': {
  'bluetooth': true,
  'location': true
}

这样才能使用蓝牙相关的 API。

  1. 在小程序的页面中,编写蓝牙连接和监听特征值变化的代码。以下是一个简单的示例代码:
// 在页面的js文件中引入蓝牙相关的API
const app = getApp();

Page({
  data: {
    deviceId: '', // 蓝牙设备的ID
    serviceId: '', // 蓝牙设备的服务ID
    characteristicId: '', // 蓝牙设备的特征值ID
    connected: false // 蓝牙设备是否已连接
  },
  onLoad: function() {
    // 初始化蓝牙适配器
    wx.openBluetoothAdapter({
      success: (res) => {
        console.log('初始化蓝牙适配器成功');
        // 监听蓝牙适配器状态变化
        wx.onBluetoothAdapterStateChange((res) => {
          console.log('蓝牙适配器状态变化', res);
          if (!res.available) {
            console.log('蓝牙适配器不可用');
          }
        });
      },
      fail: (err) => {
        console.error('初始化蓝牙适配器失败', err);
      }
    });
  },
  // 扫描蓝牙设备
  startScan: function() {
    wx.startBluetoothDevicesDiscovery({
      success: (res) => {
        console.log('开始扫描蓝牙设备', res);
        // 监听发现新设备
        wx.onBluetoothDeviceFound((res) => {
          console.log('发现新设备', res);
          var devices = res.devices;
          for (var i = 0; i < devices.length; i++) {
            var device = devices[i];
            if (device.name === '蓝牙设备名称') {
              console.log('找到指定设备', device);
              // 停止扫描
              wx.stopBluetoothDevicesDiscovery({
                success: (res) => {
                  console.log('停止扫描蓝牙设备', res);
                  // 连接蓝牙设备
                  wx.createBLEConnection({
                    deviceId: device.deviceId,
                    success: (res) => {
                      console.log('连接蓝牙设备成功', res);
                      this.setData({
                        deviceId: device.deviceId,
                        connected: true
                      });
                      // 获取蓝牙设备的所有服务
                      wx.getBLEDeviceServices({
                        deviceId: device.deviceId,
                        success: (res) => {
                          console.log('获取蓝牙设备的所有服务', res);
                          var services = res.services;
                          for (var i = 0; i < services.length; i++) {
                            var service = services[i];
                            if (service.uuid === '蓝牙设备服务UUID') {
                              console.log('找到指定服务', service);
                              // 获取蓝牙设备的特征值
                              wx.getBLEDeviceCharacteristics({
                                deviceId: device.deviceId,
                                serviceId: service.uuid,
                                success: (res) => {
                                  console.log('获取蓝牙设备的特征值', res);
                                  var characteristics = res.characteristics;
                                  for (var i = 0; i < characteristics.length; i++) {
                                    var characteristic = characteristics[i];
                                    if (characteristic.uuid === '蓝牙设备特征值UUID') {
                                      console.log('找到指定特征值', characteristic);
                                      this.setData({
                                        serviceId: service.uuid,
                                        characteristicId: characteristic.uuid
                                      });
                                      // 监听特征值变化
                                      wx.onBLECharacteristicValueChange((res) => {
                                        console.log('特征值变化', res);
                                        var value = res.value;
                                        // 处理特征值的数据
                                      });
                                      // 启用特征值变化通知
                                      wx.notifyBLECharacteristicValueChange({
                                        deviceId: device.deviceId,
                                        serviceId: service.uuid,
                                        characteristicId: characteristic.uuid,
                                        state: true,
                                        success: (res) => {
                                          console.log('启用特征值变化通知成功', res);
                                        },
                                        fail: (err) => {
                                          console.error('启用特征值变化通知失败', err);
                                        }
                                      });
                                      break;
                                    }
                                  }
                                },
                                fail: (err) => {
                                  console.error('获取蓝牙设备的特征值失败', err);
                                }
                              });
                              break;
                            }
                          }
                        },
                        fail: (err) => {
                          console.error('获取蓝牙设备的所有服务失败', err);
                        }
                      });
                    },
                    fail: (err) => {
                      console.error('连接蓝牙设备失败', err);
                    }
                  });
                },
                fail: (err) => {
                  console.error('停止扫描蓝牙设备失败', err);
                }
              });
              break;
            }
          }
        });
      },
      fail: (err) => {
        console.error('开始扫描蓝牙设备失败', err);
      }
    });
  },
  // 断开蓝牙连接
  disconnect: function() {
    wx.closeBLEConnection({
      deviceId: this.data.deviceId,
      success: (res) => {
        console.log('断开蓝牙连接成功', res);
        this.setData({
          deviceId: '',
          serviceId: '',
          characteristicId: '',
          connected: false
        });
      },
      fail: (err) => {
        console.error('断开蓝牙连接失败', err);
      }
    });
  }
});

以上示例代码演示了如何使用 wx.onBLECharacteristicValueChange 方法来监听蓝牙设备特征值的变化,并在发现指定设备后进行连接、获取服务和特征值,并启用特征值变化通知。

需要注意的是,示例代码中的蓝牙设备、服务和特征值的 UUID 以及其他参数需要根据实际情况进行修改。另外,为了能够在后台持续监听蓝牙设备特征值变化,需要保持小程序在前台运行。

微信小程序 wx.onBLECharacteristicValueChange() 使用方法详解 - 蓝牙设备特征值变化监听

原文地址: https://www.cveoy.top/t/topic/fUyM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录