uniapp 蓝牙sdk如何使用

在uniapp中如何使用蓝牙SDK进行设备连接和数据传输?具体步骤是什么?需要引入哪些API?常见问题有哪些需要注意?

2 回复
  1. 引入蓝牙模块:uni.openBluetoothAdapter
  2. 搜索设备:uni.startBluetoothDevicesDiscovery
  3. 连接设备:uni.createBLEConnection
  4. 获取服务:uni.getBLEDeviceServices
  5. 读写特征值:uni.read/writeBLECharacteristicValue
  6. 注意权限和兼容性,安卓需动态申请定位权限。

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,
  });
}

注意事项:

  1. 真机调试需使用原生App基座
  2. Android 6.0+ 需要定位权限
  3. 设备ID需通过搜索后获取
  4. 及时在页面卸载时关闭连接:
uni.closeBLEConnection({ deviceId: '设备ID' });

建议查阅 UniApp 官方文档获取最新 API 说明,不同平台可能存在细微差异。

回到顶部