微信小程序的低功耗蓝牙(BLE)功能为开发者提供了强大的工具,以实现与蓝牙设备的无缝交互。经过一段时间的深入研究和实践,我将项目中的BLE功能代码进行了精心剥离,去除了特定业务逻辑,以便广大开发者能够轻松地复制和应用到自己的项目中。本文将详细介绍如何利用微信小程序的API来实现BLE操作,包括基本步骤和示例代码,旨在为有相同开发需求的同仁提供参考和便利。
- 启用蓝牙适配器: 在小程序中使用蓝牙功能前,需要先调用
wx.openBluetoothAdapter方法启用蓝牙适配器。
wx.openBluetoothAdapter({
success: (res) => {
console.log('蓝牙已开启', res);
},
fail: (err) => {
console.error('开启蓝牙失败', err);
}
});
- 获取蓝牙设备列表: 使用
wx.getBluetoothDevices获取当前蓝牙设备的列表。
wx.getBluetoothDevices({
success: (res) => {
console.log('蓝牙设备列表', res.devices);
},
fail: (err) => {
console.error('获取蓝牙设备失败', err);
}
});
- 搜索蓝牙设备: 使用
wx.startBluetoothDevicesDiscovery开始搜索附近的蓝牙设备。
wx.startBluetoothDevicesDiscovery({
success: (res) => {
console.log('开始搜索蓝牙设备', res);
},
fail: (err) => {
console.error('搜索蓝牙设备失败', err);
}
});
- 获取搜索到的蓝牙设备: 在搜索过程中,可以使用
wx.onBluetoothDeviceFound监听搜索到的新设备。
wx.onBluetoothDeviceFound((res) => {
console.log('发现新蓝牙设备', res.devices);
});
- 创建蓝牙连接: 使用
wx.createBLEConnection与蓝牙设备建立连接。
const deviceId = '你的蓝牙设备ID';
wx.createBLEConnection({
deviceId,
success: (res) => {
console.log('连接蓝牙设备成功', res);
},
fail: (err) => {
console.error('连接蓝牙设备失败', err);
}
});
- 服务发现: 连接成功后,使用
wx.getBLEDeviceServices获取蓝牙设备的所有服务(Service)。
wx.getBLEDeviceServices({
deviceId,
success: (res) => {
console.log('蓝牙设备服务列表', res.services);
},
fail: (err) => {
console.error('获取蓝牙设备服务失败', err);
}
});
- 获取特征值(Characteristic) : 使用
wx.getBLEDeviceCharacteristics获取指定服务下的所有特征值。
const serviceId = '服务ID';
wx.getBLEDeviceCharacteristics({
deviceId,
serviceId,
success: (res) => {
console.log('蓝牙设备特征值列表', res.characteristics);
},
fail: (err) => {
console.error('获取蓝牙设备特征值失败', err);
}
});
- 读取特征值: 使用
wx.readBLECharacteristicValue读取特征值的二进制数据值。
const characteristicId = '特征值ID';
wx.readBLECharacteristicValue({
deviceId,
serviceId,
characteristicId,
success: (res) => {
console.log('特征值数据', res.value);
},
fail: (err) => {
console.error('读取特征值失败', err);
}
});
- 写入特征值: 使用
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);
}
});
- 断开蓝牙连接: 使用
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"
}
}
}