uni-app 低功耗蓝牙问题
uni-app 低功耗蓝牙问题
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC版本号 | windows10 |
HBuilderX | 正式 |
HBuilderX版本号 | 4.43 |
手机系统 | Android |
手机版本号 | Android 14 |
手机厂商 | vivo |
手机机型 | vivox 70 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
操作步骤:
C2~RCD~{"101":{"c":"N","p":"A","v":"C1234567891"},"102":{"c":"N","p":"A","v":"C123"},"103":{"c":"Y","p":"A","v":"C"},"104":{"c":"N","p":"A","v":"C"},"105":{"c":"N","p":"A","v":"C"},"106":{"c":"N","p":"A","v":"C"},"107":{"c":"N","p":"A","v":"C"},"108":{"c":"N","p":"A","v":"Ch"},"p":"RS485-2","f":9600}
使用uni.writeBLECharacteristicValue传入上面的指令就会复现
预期结果:
正常会提示成功,蓝牙设备那一块能成功接收
实际结果:
正常会提示成功,蓝牙设备并没有受到数据
bug描述:
当输入传输给设备的指令长度过长时(超过300),uni.writeBLECharacteristicValue这个api会提示发送成功,但是实际上发送失败了,
1 回复
针对uni-app中的低功耗蓝牙问题,我们可以通过uni-app提供的蓝牙API来实现相关的功能。以下是一个简单的代码示例,展示了如何在uni-app中使用低功耗蓝牙API进行设备扫描、连接、服务和特征值的操作。
首先,确保在manifest.json
文件中已经配置了蓝牙权限:
"mp-weixin": { // 以微信小程序为例
"requiredPrivateInfos": ["getBluetoothAdapterState", "startBluetoothDevicesDiscovery", "createBLEConnection", "getBLEDeviceServices", "getBLEDeviceCharacteristics"]
}
然后,在页面的script
部分编写蓝牙操作的代码:
export default {
data() {
return {
devices: [], // 存储扫描到的设备
connectedDeviceId: null, // 已连接设备的ID
services: [], // 存储设备服务
characteristics: [] // 存储设备特征值
};
},
methods: {
// 初始化蓝牙适配器
initBluetoothAdapter() {
uni.getBluetoothAdapterState({
success: (res) => {
if (res.available) {
console.log('蓝牙适配器可用');
this.startScan();
} else {
console.error('蓝牙适配器不可用');
}
}
});
},
// 开始扫描设备
startScan() {
uni.startBluetoothDevicesDiscovery({
allowDuplicatesKey: false,
success: (res) => {
console.log('开始扫描');
uni.onBluetoothDeviceFound((device) => {
this.devices.push(device.devices[0]);
console.log('扫描到设备:', device.devices[0]);
});
},
complete: () => {
setTimeout(() => {
uni.stopBluetoothDevicesDiscovery({
success: (res) => {
console.log('停止扫描');
}
});
}, 10000); // 扫描10秒后停止
}
});
},
// 连接设备
connectDevice(deviceId) {
uni.createBLEConnection({
deviceId: deviceId,
success: (res) => {
this.connectedDeviceId = deviceId;
console.log('设备连接成功', res);
this.getServices();
},
fail: (err) => {
console.error('设备连接失败', err);
}
});
},
// 获取设备服务
getServices() {
if (!this.connectedDeviceId) return;
uni.getBLEDeviceServices({
deviceId: this.connectedDeviceId,
success: (res) => {
this.services = res.services;
console.log('获取服务成功', res);
// 可以进一步获取特征值等
}
});
},
// ... 其他方法,如获取特征值、读写特征值等
}
};
以上代码展示了如何在uni-app中初始化蓝牙适配器、开始扫描设备、连接设备以及获取设备服务的基本流程。根据具体需求,你可以进一步扩展代码,实现读写特征值、监听特征值变化等功能。请注意,实际应用中需要处理更多的错误情况和边界情况,以确保蓝牙操作的稳定性和可靠性。