1、初始化蓝牙模块:
uni.openBluetoothAdapter({
success(res1) {
console.log("蓝牙初始化成功",res1)
}
})
2、初始化蓝牙后,获取本机蓝牙是否开启
uni.getBluetoothAdapterState({
success: function(row) {
console.log('蓝牙状态:', row.available);
if (row.available) {
// 蓝牙连接成功,开启蓝牙设备搜索
} else {
// 请开启蓝牙
uni.showToast({
title: "请开启蓝牙",
icon: 'none',
duration: 2000
});
}
},
fail: function(err) {
// 请开启蓝牙
uni.showToast({
title: "请开启蓝牙",
icon: 'none',
duration: 2000
});
}
})
3、蓝牙打开后,开始搜索设备
uni.startBluetoothDevicesDiscovery({
success(res2) {
uni.showLoading({
title: "正在搜索设备",
icon:"none",
duration: 2000
});
console.log('搜索蓝牙外围设备完成', res2)
}
});
4、监听寻找到新设备的事件
uni.onBluetoothDeviceFound(function (devices) {
console.log("devices", devices)
console.log("devices1", devices.devices)
if (devices.devices[0].name == 'Mintti') {
uni.hideLoading()
let deviceId = devices.devices[0].deviceId
}
})
5、寻找到该设备后停止搜索
uni.stopBluetoothDevicesDiscovery({
success(res4) {
console.log('res4',res4)
}
})
6、连接蓝牙设备
uni.createBLEConnection({
deviceId: deviceId, // 设备id
success() {
console.log('蓝牙连接成功后关闭蓝牙搜索并获取服务id')
// 获取服务id
}
})
7、连接成功后,获取服务id
uni.getBLEDeviceServices({
deviceId: deviceId,
success(res5) {
console.log("获取服务Id", res5)
// serviceId固定,获取蓝牙设备某个服务中的所有特征值【读写属性】,如果有多个服务可以都尝试下
if (res5.services && res5.services.length > 0) {
let serviceId = res5.services[0].uuid;
console.log('serviceId', serviceId);
}
}
})
8、获取到服务id后,调用蓝牙监听和写入功能
uni.getBLEDeviceCharacteristics({
deviceId: deviceId, // 蓝牙设备id
serviceId: serviceId, // 蓝牙服务UUID
success(res6) {
console.log('数据监听', res6);
res6.characteristics.forEach(item => {
// 003
if (item.properties.notify === true) {
// 监听
let notifyId = item.uuid;
}
// 002
if (item.properties.write === true) {
// 写入
let writeId = item.uuid;
}
}
}
})
9、如果是监听设备返回数据,启用低功耗蓝牙设备特征值变化时的notify功能
uni.notifyBLECharacteristicValueChange({
characteristicId: notify,
deviceId: deviceId,
serviceId: serviceId,
state: true,
success(res) {
// 监听低功耗蓝牙设备的特征值变化
uni.onBLECharacteristicValueChange(result => {
console.log("监听低功耗蓝牙设备的特征值变化", result);
if (result.value) {
let resHex = this.ab2hex(result.value)
console.log('设备返回数据', resHex)
}
})
}
});
10、如果是向设备发送数据
uni.writeBLECharacteristicValue({
characteristicId: writeId,
deviceId: deviceId,
serviceId: serviceId,
value: buffer, // 具体数据
success(res) {
console.log("writeBLECharacteristicValue success", res);
},
fail(err) {
console.log("报错了", err);
}
});
11、需要做数据处理的方法
ab2hex(buffer) {
const hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('')
}