1、初始化蓝牙模块
openBluetoothAdapter:function() {
let that = this;
wx.openBluetoothAdapter({
complete(res) {
}
})
},
2、检查蓝牙适配器状态
getBluetoothAdapterState: function () {
let that = this;
wx.getBluetoothAdapterState({
success(res) {
}
})
},
3、搜索蓝牙外围设备
getBluetoothAdapterState: function () {
let that = this;
wx.getBluetoothAdapterState({
success(res) {
}
})
},
4、获取所有已经发现的蓝牙设备
getBluetoothDevices:function () {
let that = this;
wx.getBluetoothDevices({
success(res) {
for (let i = 0; i < res.devices.length; i++) {
//解析所有 advertisData
var stt = that.buf2hex(res.devices[i].advertisData);
//检索指定设备
if (stt == that.data.codeQT2) {
wx.getSystemInfo({
success(ds) {
if (ds.platform == 'android') {
that.setData({
dev: res.devices[i],
deviceId: res.devices[i].deviceId,
})
} else if (ds.platform == 'ios') {
that.setData({
dev: res.devices[i],
deviceId: res.devices[i].deviceId,
})
}
}
})
// res.devices[i].deviceId
wx.stopBluetoothDevicesDiscovery();
}
}
},
fail(res) {
that.errCode(res.errCode);
}
})
},
5、连接低功耗蓝牙设备
createBLEConnection:function() {
let that = this;
wx.createBLEConnection({
deviceId: that.data.deviceId,
success: function (res) {
},
fail(res) {
wx.showModal({
content: '连接错误,请重新连接',
confirmColor: '#66A6FF',
showCancel: false
})
}
})
// 监听蓝牙连接异常或突然断开
wx.onBLEConnectionStateChange(function (res) {
if (res.connected == false) {
wx.showModal({
content: '蓝牙连接已断开或发生异常情况,请重新连接',
})
}
})
},
6、获取蓝牙设备所有服务
getBLEDeviceServices: function () {
let that = this;
wx.getBLEDeviceServices({
deviceId: that.data.deviceId,
success: function (res) {
let service_id = "";
for (let i = 0; i < res.services.length; i++) {
if (res.services[i].uuid.toUpperCase().indexOf("这里填写要使用的服务ID") != -1) {
that.setData({
service_id: res.services[i].uuid
})
break;
}
}
},
fail(res) {
wx.showModal({
content: '连接错误,请重新连接',
confirmColor: '#66A6FF',
showCancel: false
})
}
})
},
7、获取服务特征值/发送数据/监听
getBLEDeviceCharacteristics:function() {
let that = this;
wx.getBLEDeviceCharacteristics({
deviceId: that.data.deviceId,
serviceId: that.data.service_id,
success: function (res) {
for (let i = 0; i < res.characteristics.length; i++) {
let item = res.characteristics[i];
that.setData({
characteristics:item.uuid
})
//开启notify
wx.notifyBLECharacteristicValueChange({
deviceId: that.data.deviceId,
serviceId: that.data.service_id,
characteristicId: item.uuid,
state: true,
success: function (res) {
}
})
//该特征值可写
if (item.properties.write) {
var hex = '这里填写你要发送的数据'
var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
}))
var buffer1 = typedArray.buffer
wx.writeBLECharacteristicValue({
deviceId: that.data.deviceId,
serviceId: that.data.service_id,
characteristicId: item.uuid,
value: buffer1,
success: function(res) {
console.log('发送数据:' + '√');
},
})
}
//监听新动态
wx.onBLECharacteristicValueChange(function (res) {
console.log(res);
var stt = that.buf2hex(res.value);
console.log(stt);
if (stt) {
that.setData({
random: stt.slice(6, 38)
})
}
})
}
},
fail:function(res) {
wx.showModal({
content: '连接错误,请重新连接',
confirmColor: '#66A6FF',
showCancel:false
})
}
})
},
8、关闭蓝牙全部链接
closeBluetoothAdapter:function() {
let that = this;
wx.closeBLEConnection({
deviceId: that.data.deviceId,
})
wx.closeBluetoothAdapter()
},
使用到的函数
/**
* 字符串转byte
*/
stringToBytes:function (str) {
var array = new Uint8Array(str.length);
for(var i = 0, l = str.length; i<l; i++) {
array[i] = str.charCodeAt(i);
}
return array.buffer;
},
/**
* ArrayBuffer转16进制字符串
*/
buf2hex: function (buffer) {
var tohex = Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
return tohex;
},
页面数据
data: {
codeQT2: '2a6938114530',
dev:null,
deviceId:'',
service_id:'未选中服务',
characteristics:'未选中服务特征值',
strMAC:null,
random:null
},