uniapp 蓝牙通讯
uniapp 蓝牙通讯实现方法
初始化蓝牙模块
在onLoad生命周期中调用uni.openBluetoothAdapter初始化蓝牙适配器。需检查设备是否支持蓝牙功能,并处理授权问题。示例代码:
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙适配器初始化成功');
},
fail(err) {
console.error('初始化失败:', err);
}
});
搜索蓝牙设备
使用uni.startBluetoothDevicesDiscovery开始搜索附近设备。建议设置services参数过滤目标设备UUID:
uni.startBluetoothDevicesDiscovery({
services: ['FFE0'],
success(res) {
console.log('开始搜索设备');
}
});
通过uni.onBluetoothDeviceFound监听发现设备事件:
uni.onBluetoothDeviceFound(devices => {
console.log('发现设备:', devices.devices);
});
连接目标设备
获取设备ID后,使用uni.createBLEConnection建立连接:
uni.createBLEConnection({
deviceId: '设备ID',
success() {
console.log('连接成功');
}
});
获取服务与特征值
连接成功后调用uni.getBLEDeviceServices获取服务列表,再通过uni.getBLEDeviceCharacteristics获取特征值:

uni.getBLEDeviceServices({
deviceId: '设备ID',
success(res) {
res.services.forEach(serviceId => {
uni.getBLEDeviceCharacteristics({
deviceId: '设备ID',
serviceId,
success(charRes) {
console.log('特征值:', charRes.characteristics);
}
});
});
}
});
数据读写操作
对于可写特征值,使用uni.writeBLECharacteristicValue发送数据。注意数据需转为ArrayBuffer:
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
view.setUint8(0, 0x01);
uni.writeBLECharacteristicValue({
deviceId: '设备ID',
serviceId: '服务UUID',
characteristicId: '特征UUID',
value: buffer
});
监听设备返回数据使用uni.onBLECharacteristicValueChange:
uni.onBLECharacteristicValueChange(res => {
const value = new Uint8Array(res.value);
console.log('收到数据:', value);
});
断开连接
完成通讯后调用uni.closeBLEConnection断开连接:

uni.closeBLEConnection({
deviceId: '设备ID',
success() {
console.log('已断开连接');
}
});
注意事项
- Android与iOS平台在蓝牙API实现上有差异,需进行兼容性测试
- 部分设备需要配对后才能建立稳定连接
- 高频数据传输建议使用
MTU协商提高效率 - 实际开发中需添加超时处理和错误重试机制
常见问题处理
搜索不到设备
检查设备是否处于可发现模式,确认应用有定位权限(Android 6.0+需要)。
写入数据失败
确认特征值具有写入权限(properties.write为true),数据格式符合设备要求。
连接自动断开
可能是设备主动断开或信号干扰,建议实现重连机制,监听uni.onBLEConnectionStateChange事件。
数据传输不完整
大数据分包发送时,需自行实现数据协议头尾标识,接收方进行数据重组。






