UniApp 蓝牙功能基于微信小程序蓝牙 API 封装,使用前需在 manifest.json 中开启蓝牙权限。以下是核心步骤和示例代码:
1. 初始化蓝牙
// 检查蓝牙适配器状态
uni.openBluetoothAdapter({
success: (res) => {
console.log('蓝牙初始化成功');
this.startDiscovery();
},
fail: (err) => {
console.error('初始化失败:', err);
}
});
2. 搜索设备
startDiscovery() {
uni.startBluetoothDevicesDiscovery({
services: ['需要过滤的UUID'], // 可选
success: (res) => {
uni.onBluetoothDeviceFound(this.onDeviceFound);
}
});
}
onDeviceFound(devices) {
console.log('发现设备:', devices.devices);
// 设备列表可渲染到页面
}
3. 连接设备
uni.createBLEConnection({
deviceId: '目标设备ID',
success: (res) => {
console.log('连接成功');
this.getServices();
}
});
4. 获取服务与特征值
getServices() {
uni.getBLEDeviceServices({
deviceId: '设备ID',
success: (res) => {
res.services.forEach(service => {
this.getCharacteristics(service.uuid);
});
}
});
}
getCharacteristics(serviceId) {
uni.getBLEDeviceCharacteristics({
deviceId: '设备ID',
serviceId: serviceId,
success: (res) => {
res.characteristics.forEach(char => {
if (char.properties.read) {
this.readData(serviceId, char.uuid);
}
if (char.properties.notify) {
this.notify(serviceId, char.uuid);
}
});
}
});
}
5. 数据交互
// 启用通知
notify(serviceId, characteristicId) {
uni.notifyBLECharacteristicValueChange({
deviceId: '设备ID',
serviceId,
characteristicId,
state: true,
success: (res) => {
uni.onBLECharacteristicValueChange(this.onDataReceived);
}
});
}
// 监听数据
onDataReceived(res) {
const data = Array.from(new Uint8Array(res.value))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
console.log('收到数据:', data);
}
// 发送数据
writeData(serviceId, characteristicId, data) {
const buffer = new ArrayBuffer(data.length);
const dataView = new Uint8Array(buffer);
for (let i = 0; i < data.length; i++) {
dataView[i] = data.charCodeAt(i);
}
uni.writeBLECharacteristicValue({
deviceId: '设备ID',
serviceId,
characteristicId,
value: buffer,
});
}
注意事项:
- 真机调试需使用原生App基座
- Android 6.0+ 需要定位权限
- 设备ID需通过搜索后获取
- 及时在页面卸载时关闭连接:
uni.closeBLEConnection({ deviceId: '设备ID' });
建议查阅 UniApp 官方文档获取最新 API 说明,不同平台可能存在细微差异。