uni-app 蓝牙锁 writeBLECharacteristicValue 函数中 value 的值怎么设置

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app 蓝牙锁 writeBLECharacteristicValue 函数中 value 的值怎么设置

示列报文
F1 1F FF EE 03 10 00 04 01 24 01 00 D6 F2 2F

1 回复

uni-app 中使用蓝牙 API 与蓝牙设备进行交互时,writeBLECharacteristicValue 函数用于向蓝牙设备的某个特征值(Characteristic)写入数据。这个函数的关键在于正确设置 value 参数,该参数应该是一个 ArrayBuffer 或者一个包含数据的 DataViewTypedArray 对象。

以下是一个使用 writeBLECharacteristicValue 函数的示例代码,演示了如何设置 value 参数的值:

// 假设已经通过 uni-app 的蓝牙 API 获取到了蓝牙设备和服务的相关信息
// 例如:deviceId, serviceId, characteristicId

// 要写入的数据,这里以写入一个16位的无符号整数为例
let data = new Uint16Array([12345]); // 12345 是要写入的数据

// 将 TypedArray 转换为 ArrayBuffer
let value = data.buffer;

// 调用 writeBLECharacteristicValue 函数
uni.writeBLECharacteristicValue({
    // 设备ID
    deviceId: 'your-device-id',
    // 服务ID
    serviceId: 'your-service-id',
    // 特征值ID
    characteristicId: 'your-characteristic-id',
    // 要写入的数据,必须是 ArrayBuffer 类型
    value: value,
    success(res) {
        console.log('写入成功', res);
    },
    fail(err) {
        console.error('写入失败', err);
    }
});

// 如果需要写入更复杂的数据结构,可以使用 DataView 来构建
let complexData = new DataView(new ArrayBuffer(4)); // 创建一个4字节的 ArrayBuffer
complexData.setUint8(0, 0x01); // 设置第一个字节为0x01
complexData.setUint16(1, 5678, true); // 从第二个字节开始,以小端模式设置一个16位无符号整数5678

// 使用 DataView 写入数据
uni.writeBLECharacteristicValue({
    deviceId: 'your-device-id',
    serviceId: 'your-service-id',
    characteristicId: 'your-characteristic-id',
    value: complexData.buffer,
    success(res) {
        console.log('复杂数据写入成功', res);
    },
    fail(err) {
        console.error('复杂数据写入失败', err);
    }
});

在上面的示例中,我们首先创建了一个 Uint16Array,它表示一个包含16位无符号整数的数组,并将其转换为 ArrayBuffer。然后,我们调用 writeBLECharacteristicValue 函数,将 ArrayBuffer 作为 value 参数传递。

对于更复杂的数据结构,我们使用了 DataView 来构建 ArrayBuffer,并设置了不同的字节。这样可以精确地控制要写入的数据格式。

注意,your-device-idyour-service-idyour-characteristic-id 需要替换为实际设备的ID、服务ID和特征值ID。

回到顶部