const logFlag = true;//是否显示日志
let timeoutID;
//搜索设备
function startBluetoothDevicesDiscovery() {
return new Promise((resolve, reject) => {
timeoutID = setTimeout(() => {
stopBluetoothDevicesDiscovery();
}, 15000);
wx.startBluetoothDevicesDiscovery({
services: [],
success: function (res) {
if(logFlag){
console.log("success startBluetoothDevicesDiscovery:", res)
}
resolve(res);
},
fail: function (res) {
if(logFlag){
console.log("fail startBluetoothDevicesDiscovery:", res)
}
reject({
message: "开始搜索设备失败"
})
}
})
}).catch((res) => {
stopBluetoothDevicesDiscovery();
clearTimeout(timeoutID);
myShowToast(res.message);
})
}
function getBluetoothDevices(bluetoothName) {
return new Promise((resolve, reject) => {
wx.getBluetoothDevices({
success: (res) => {
console.log(res)
let devices = res.devices;
if(logFlag){
console.log("success getBluetoothDevices:", devices)
}
let device_id;
for (let device of devices) {
if (device.name == bluetoothName || device.localName == bluetoothName) {
device_id = device.deviceId;
console.log('utils',device_id)
stopBluetoothDevicesDiscovery();
clearTimeout(timeoutID);
resolve(device_id);
}
}
if (!device_id) {
resolve(undefined);
}
},
})
})
}
function onBluetoothDeviceFound(bluetoothName) {
return new Promise((resolve, reject) => {
wx.onBluetoothDeviceFound(function (res) {
let devices = res.devices;
if(logFlag){
console.log("success onBluetoothDeviceFound:", devices);
}
for (let device of devices) {
if (device.name == bluetoothName || device.localName == bluetoothName) {
let device_id = device.deviceId;
stopBluetoothDevicesDiscovery();
clearTimeout(timeoutID);
resolve(device_id);
}
}
});
})
}
function stopBluetoothDevicesDiscovery() {
wx.stopBluetoothDevicesDiscovery({
success: (res) => {
console.log('关闭蓝牙停止搜索成功');
},
fail: (res) => {
console.log('关闭蓝牙停止搜索失败');
},
})
}
function createBLEConnection(deviceID) {
return new Promise((resolve, reject) => {
wx.createBLEConnection({
deviceId: deviceID,
timeout: 10000,
success: function (res) {
console.log('蓝牙连接成功')
if(logFlag){
console.log("success createBLEConnection:", res);
}
stopBluetoothDevicesDiscovery();
resolve(res);
},
fail: function (res) {
if(logFlag){
console.log("fail createBLEConnection:", res);
}
stopBluetoothDevicesDiscovery();
resolve();
}
})
})
}
function getBLEDeviceServices(deviceID) {
return new Promise((resolve, reject) => {
wx.getBLEDeviceServices({
deviceId: deviceID,
success: function (res) {
if(logFlag){
// console.log("success getBLEDeviceServices:", res);
}
resolve(res)
},
fail: function (res) {
if(logFlag){
console.log("fail getBLEDeviceServices:", res);
}
resolve();
}
})
})
}
function filterService(services) {
return new Promise((resolve, reject) => {
let serviceIndex = 0;
let servicesInfo = {};
for (let service of services) {
if (service.uuid.toUpperCase().indexOf("FFE5") != -1) {
servicesInfo.writeServiceID = service.uuid;
serviceIndex++;
} else if (service.uuid.toUpperCase().indexOf("FFE0") != -1) {
servicesInfo.readServiceID = service.uuid;
serviceIndex++;
}
}
console.log(servicesInfo)
if (serviceIndex == 2) {
if(logFlag){
console.log("success filterService:", servicesInfo);
}
resolve(servicesInfo);
} else {
if(logFlag){
console.log("fail filterService:", servicesInfo);
}
resolve();
}
})
}
function getDeviceCharacter(deviceID, serviceID) {
return new Promise((resolve, reject) => {
wx.getBLEDeviceCharacteristics({
deviceId: deviceID,
serviceId: serviceID,
success: function (res) {
if(logFlag){
console.log("success getDeviceCharacter:", res);
}
resolve(res);
},
fail: function (res) {
if(logFlag){
console.log("fail getDeviceCharacter:", res);
}
resolve();
}
})
})
}
function notifyBLECharacteristicValueChange(deviceID, serviceID, characteristicID) {
return new Promise((resolve, reject) => {
wx.notifyBLECharacteristicValueChange({
state: true,
deviceId: deviceID,
serviceId: serviceID,
characteristicId: characteristicID,
success: function (res) {
if(logFlag){
console.log("success notifyBLECharacteristicValueChange:", res);
}
resolve(res);
},
fail: function (res) {
if(logFlag){
console.log("fail notifyBLECharacteristicValueChange:", res);
}
resolve();
},
})
})
}
// function closeBLEConnection(deviceID) {
// return new Promise((resolve, reject) => {
// wx.closeBLEConnection({
// deviceId: deviceID,
// success: function (res) {
// if(logFlag){
// console.log("success closeBLEConnection:", res);
// }
// resolve(res);
// },
// fail: function (res) {
// if(logFlag){
// console.log("fail closeBLEConnection:", res);
// }
// resolve();
// }
// });
// })
// }
function closeBluetoothAdapter() {
return new Promise((resolve, reject) => {
wx.closeBluetoothAdapter({
success: function (res) {
if(logFlag){
console.log("success closeBluetoothAdapter:", res);
}
resolve(res);
},
fail: function (res) {
if(logFlag){
console.log("fail closeBluetoothAdapter:", res);
}
resolve();
},
})
})
}
module.exports = {
startBluetoothDevicesDiscovery,
getBluetoothDevices,
onBluetoothDeviceFound,
stopBluetoothDevicesDiscovery,
createBLEConnection,
getBLEDeviceServices,
filterService,
getDeviceCharacter,
notifyBLECharacteristicValueChange,
closeBLEConnection,
closeBluetoothAdapter,
}
封装微信小程序蓝牙模块
于 2021-12-07 13:50:59 首次发布