微信小程序 wx.onBLECharacteristicValueChange() 使用方法详解 - 蓝牙设备特征值变化监听
wx.onBLECharacteristicValueChange((res) 是一个监听蓝牙设备特征值变化的方法。当蓝牙设备的特征值发生变化时,会触发该方法,并返回特征值的变化情况。
下面是一个编写详细程序说明的示例:
- 首先,需要在小程序的配置文件 app.json 中添加以下权限:
'permissions': {
'bluetooth': true,
'location': true
}
这样才能使用蓝牙相关的 API。
- 在小程序的页面中,编写蓝牙连接和监听特征值变化的代码。以下是一个简单的示例代码:
// 在页面的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 以及其他参数需要根据实际情况进行修改。另外,为了能够在后台持续监听蓝牙设备特征值变化,需要保持小程序在前台运行。
原文地址: https://www.cveoy.top/t/topic/fUyM 著作权归作者所有。请勿转载和采集!