uni-app 小程序 低功耗蓝牙写数据 主机间隔150ms通知的数据 小程序没能收到

uni-app 小程序 低功耗蓝牙写数据 主机间隔150ms通知的数据 小程序没能收到

3 回复

具体的 api 有问题,使用原生写一个 demo 验证是微信小程序的问题还是 uniapp 导致的。如果小程序有问题考虑是否可以规避,或者向微信社区反馈

更多关于uni-app 小程序 低功耗蓝牙写数据 主机间隔150ms通知的数据 小程序没能收到的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uniapp的蓝牙是不是单线程的

在处理 uni-app 小程序低功耗蓝牙写数据以及接收主机间隔 150ms 通知的数据时,确保数据正确接收通常涉及几个关键步骤,包括蓝牙连接管理、数据写入、特征值(Characteristic)的订阅以及数据的处理。以下是一个简化的代码示例,展示了如何在 uni-app 中实现这些功能。

1. 初始化蓝牙适配器

首先,确保蓝牙适配器已经初始化并启用:

uni.openBluetoothAdapter({
  success: function(res) {
    console.log('Bluetooth adapter opened', res);
    // 继续扫描设备
    startBluetoothDevicesDiscovery();
  },
  fail: function(err) {
    console.error('Failed to open Bluetooth adapter', err);
  }
});

2. 扫描并连接设备

扫描并连接到目标蓝牙设备:

function startBluetoothDevicesDiscovery() {
  uni.startBluetoothDevicesDiscovery({
    allowDuplicatesKey: false,
    success: function(res) {
      // 假设已找到目标设备并连接
      connectToDevice('目标设备MAC地址');
    }
  });
}

function connectToDevice(deviceId) {
  uni.createBLEConnection({
    deviceId: deviceId,
    success: function(res) {
      // 连接成功后,开始获取服务
      getBLEDeviceServices(deviceId);
    }
  });
}

3. 获取服务并启用通知

获取服务,找到目标特征值,并启用通知:

function getBLEDeviceServices(deviceId) {
  uni.getBLEDeviceServices({
    deviceId: deviceId,
    success: function(res) {
      const serviceId = res.services[0].uuid; // 假设我们需要的服务是第一个
      getBLEDeviceCharacteristics(deviceId, serviceId);
    }
  });
}

function getBLEDeviceCharacteristics(deviceId, serviceId) {
  uni.getBLEDeviceCharacteristics({
    deviceId: deviceId,
    serviceId: serviceId,
    success: function(res) {
      const characteristicId = res.characteristics[0].uuid; // 假设我们需要的特征值是第一个
      enableBLECharacteristicNotification(deviceId, serviceId, characteristicId);
    }
  });
}

function enableBLECharacteristicNotification(deviceId, serviceId, characteristicId) {
  uni.notifyBLECharacteristicValueChange({
    state: true,
    deviceId: deviceId,
    serviceId: serviceId,
    characteristicId: characteristicId,
    success: function(res) {
      console.log('Notification enabled', res);
      // 监听数据变化
      uni.onBLECharacteristicValueChange(function(res) {
        console.log('Received data', res.value);
      });
    }
  });
}

注意

  • 以上代码省略了错误处理和连接管理的细节,如重连逻辑、超时处理等。
  • 确保设备支持并正确配置了通知机制。
  • uni.onBLECharacteristicValueChange 事件监听器将在整个小程序生命周期内有效,因此需要在小程序销毁时适当移除监听。
  • 如果仍无法收到数据,请检查蓝牙设备的固件设置,确保它以正确的间隔发送数据,并且数据格式与小程序预期匹配。
回到顶部