uni-app ble低功耗蓝牙开发总结

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

uni-app ble低功耗蓝牙开发总结

  1. 在安卓系统中:订阅多个特征值,notifyBLECharacteristicValueChange 必须在获取完所有的特征值以后串行 notify。notifyBLECharacteristicValueChange 成功以后 notify 第二个特征值,第二个特征值 notify 成功以后 notify 第三个特征值…

  2. 在鸿蒙系统中:订阅多个特征值,writeBLECharacteristicValue 成功以后无法在 onBLECharacteristicValueChange 回调中获取到新的特征值变化。需要在 writeBLECharacteristicValue 成功以后重新 notifyBLECharacteristicValueChange 需要变化的特征值。

  3. 获取服务需要添加定时器延迟获取,具体时间看设备

  4. 在鸿蒙系统中读特征值 property no support 或者写特征值失败的情况。需要在失败的回调函数中重新读或写

图片 图片 图片


1 回复

针对您提到的uni-app进行BLE(低功耗蓝牙)开发的总结,以下是一个简要的代码案例展示,旨在体现如何在uni-app中实现BLE的基本功能,包括初始化、扫描设备、连接设备以及读写特征值等。请注意,实际应用中需要根据具体硬件和协议进行调整。

1. 初始化蓝牙适配器

在使用BLE功能前,需要先初始化蓝牙适配器。

uni.openBluetoothAdapter({
    success: function(res) {
        console.log('蓝牙适配器初始化成功', res);
        // 初始化成功后,可以进行扫描
    },
    fail: function(err) {
        console.error('蓝牙适配器初始化失败', err);
    }
});

2. 扫描BLE设备

使用startBluetoothDevicesDiscovery方法开始扫描附近的BLE设备。

uni.startBluetoothDevicesDiscovery({
    allowDuplicatesKey: false,
    success: function(res) {
        console.log('开始扫描设备', res);
        // 监听设备发现事件
        uni.onBluetoothDeviceFound(function(device) {
            console.log('发现设备', device);
            // 可以在这里保存发现的设备信息
        });
    },
    fail: function(err) {
        console.error('扫描设备失败', err);
    }
});

3. 连接BLE设备

通过createBLEConnection方法连接到指定的BLE设备。

uni.createBLEConnection({
    deviceId: '目标设备ID', // 替换为实际设备ID
    success: function(res) {
        console.log('设备连接成功', res);
        // 连接成功后,可以获取服务
    },
    fail: function(err) {
        console.error('设备连接失败', err);
    }
});

4. 获取服务和特征值

连接成功后,通过getBLEDeviceServices获取设备服务,再通过getBLEDeviceCharacteristics获取特征值。

uni.getBLEDeviceServices({
    deviceId: '目标设备ID',
    success: function(res) {
        let services = res.services;
        services.forEach(service => {
            uni.getBLEDeviceCharacteristics({
                deviceId: '目标设备ID',
                serviceId: service.uuid,
                success: function(characteristicRes) {
                    let characteristics = characteristicRes.characteristics;
                    // 可以在这里保存特征值信息,用于后续读写
                }
            });
        });
    }
});

5. 读写特征值

通过writeBLECharacteristicValue写入特征值,通过readBLECharacteristicValue读取特征值。

// 写入特征值
uni.writeBLECharacteristicValue({
    deviceId: '目标设备ID',
    serviceId: '目标服务ID',
    characteristicId: '目标特征值ID',
    value: ArrayBuffer或ArrayBufferView, // 要写入的数据
    success: function(res) {
        console.log('写入特征值成功', res);
    }
});

// 读取特征值
uni.readBLECharacteristicValue({
    deviceId: '目标设备ID',
    serviceId: '目标服务ID',
    characteristicId: '目标特征值ID',
    success: function(res) {
        console.log('读取特征值成功', res.value);
    }
});

以上代码展示了uni-app中BLE开发的基本流程,包括初始化、扫描、连接、获取服务和特征值以及读写操作。实际应用中,需要根据具体需求进行更多的错误处理和状态管理。

回到顶部