微信小程序低功耗蓝牙实例

529 阅读2分钟

微信小程序的低功耗蓝牙(BLE)功能为开发者提供了强大的工具,以实现与蓝牙设备的无缝交互。经过一段时间的深入研究和实践,我将项目中的BLE功能代码进行了精心剥离,去除了特定业务逻辑,以便广大开发者能够轻松地复制和应用到自己的项目中。本文将详细介绍如何利用微信小程序的API来实现BLE操作,包括基本步骤和示例代码,旨在为有相同开发需求的同仁提供参考和便利。

  1. 启用蓝牙适配器: 在小程序中使用蓝牙功能前,需要先调用 wx.openBluetoothAdapter 方法启用蓝牙适配器。
wx.openBluetoothAdapter({
  success: (res) => {
    console.log('蓝牙已开启', res);
  },
  fail: (err) => {
    console.error('开启蓝牙失败', err);
  }
});
  1. 获取蓝牙设备列表: 使用 wx.getBluetoothDevices 获取当前蓝牙设备的列表。
wx.getBluetoothDevices({
  success: (res) => {
    console.log('蓝牙设备列表', res.devices);
  },
  fail: (err) => {
    console.error('获取蓝牙设备失败', err);
  }
});
  1. 搜索蓝牙设备: 使用 wx.startBluetoothDevicesDiscovery 开始搜索附近的蓝牙设备。
wx.startBluetoothDevicesDiscovery({
  success: (res) => {
    console.log('开始搜索蓝牙设备', res);
  },
  fail: (err) => {
    console.error('搜索蓝牙设备失败', err);
  }
});
  1. 获取搜索到的蓝牙设备: 在搜索过程中,可以使用 wx.onBluetoothDeviceFound 监听搜索到的新设备。
wx.onBluetoothDeviceFound((res) => {
  console.log('发现新蓝牙设备', res.devices);
});
  1. 创建蓝牙连接: 使用 wx.createBLEConnection 与蓝牙设备建立连接。
const deviceId = '你的蓝牙设备ID';
wx.createBLEConnection({
  deviceId,
  success: (res) => {
    console.log('连接蓝牙设备成功', res);
  },
  fail: (err) => {
    console.error('连接蓝牙设备失败', err);
  }
});
  1. 服务发现: 连接成功后,使用 wx.getBLEDeviceServices 获取蓝牙设备的所有服务(Service)。
wx.getBLEDeviceServices({
  deviceId,
  success: (res) => {
    console.log('蓝牙设备服务列表', res.services);
  },
  fail: (err) => {
    console.error('获取蓝牙设备服务失败', err);
  }
});
  1. 获取特征值(Characteristic) : 使用 wx.getBLEDeviceCharacteristics 获取指定服务下的所有特征值。
const serviceId = '服务ID';
wx.getBLEDeviceCharacteristics({
  deviceId,
  serviceId,
  success: (res) => {
    console.log('蓝牙设备特征值列表', res.characteristics);
  },
  fail: (err) => {
    console.error('获取蓝牙设备特征值失败', err);
  }
});
  1. 读取特征值: 使用 wx.readBLECharacteristicValue 读取特征值的二进制数据值。
const characteristicId = '特征值ID';
wx.readBLECharacteristicValue({
  deviceId,
  serviceId,
  characteristicId,
  success: (res) => {
    console.log('特征值数据', res.value);
  },
  fail: (err) => {
    console.error('读取特征值失败', err);
  }
});
  1. 写入特征值: 使用 wx.writeBLECharacteristicValue 将二进制数据值写入特征值。
const value = new Uint8Array([1, 2, 3]); // 需要写入的数据
wx.writeBLECharacteristicValue({
  deviceId,
  serviceId,
  characteristicId,
  value,
  success: (res) => {
    console.log('写入特征值成功', res);
  },
  fail: (err) => {
    console.error('写入特征值失败', err);
  }
});
  1. 断开蓝牙连接: 使用 wx.closeBLEConnection 断开与蓝牙设备的连接。
wx.closeBLEConnection({
  deviceId,
  success: (res) => {
    console.log('断开蓝牙连接成功', res);
  },
  fail: (err) => {
    console.error('断开蓝牙连接失败', err);
  }
});

请注意,这些 API 调用需要在用户授权后才能执行,且需要在小程序的 app.json 中声明蓝牙权限:

{
  "requiredBackgroundModes": [
    "bluetooth"
  ],
  "permission": {
    "scope.userLocation": {
      "desc": "your description"
    }
  }
}