uni-app ble低功耗蓝牙开发总结
uni-app ble低功耗蓝牙开发总结
-
在安卓系统中:订阅多个特征值,
notifyBLECharacteristicValueChange
必须在获取完所有的特征值以后串行 notify。notifyBLECharacteristicValueChange
成功以后 notify 第二个特征值,第二个特征值 notify 成功以后 notify 第三个特征值… -
在鸿蒙系统中:订阅多个特征值,
writeBLECharacteristicValue
成功以后无法在onBLECharacteristicValueChange
回调中获取到新的特征值变化。需要在writeBLECharacteristicValue
成功以后重新notifyBLECharacteristicValueChange
需要变化的特征值。 -
获取服务需要添加定时器延迟获取,具体时间看设备
-
在鸿蒙系统中读特征值 property no support 或者写特征值失败的情况。需要在失败的回调函数中重新读或写
针对您提到的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开发的基本流程,包括初始化、扫描、连接、获取服务和特征值以及读写操作。实际应用中,需要根据具体需求进行更多的错误处理和状态管理。