res.devices[i].localName == that.data.inputValue){
that.setData({
deviceId: res.devices[i].deviceId,
consoleLog: "设备:" + res.devices[i].deviceId,
})
that.connetBlue(res.devices[i].deviceId);//4.0
return;
}
}
},
fail: function(){
console.log("搜索蓝牙设备失败")
}
})
},
4、连接蓝牙设备
通过上一个步骤找到这个蓝牙之后,通过蓝牙设备的id进行蓝牙连接
/**
* 获取到设备之后连接蓝牙设备
*/
connetBlue(deviceId){
var that = this;
wx.createBLEConnection({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: deviceId,//设备id
success: function (res) {
wx.showToast({
title: '连接成功',
icon: 'fails',
duration: 800
})
console.log("连接蓝牙成功!")
wx.stopBluetoothDevicesDiscovery({
success: function (res) {
console.log('连接蓝牙成功之后关闭蓝牙搜索');
}
})
that.getServiceId()//5.0
}
})
},5、获取服务uuid
连接上需要的蓝牙设备之后,获取这个蓝牙设备的服务uuid
getServiceId(){
var that = this
wx.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: that.data.deviceId,
success: function (res) {
var model = res.services[0]
that.setData({
services: model.uuid
})
that.getCharacteId()//6.0
}
})
},6、通过id查看蓝牙设备的特征值
如果一个蓝牙设备需要进行数据的写入以及数据传输,就必须具有某些特征值,所以通过上面步骤获取的id可以查看当前蓝牙设备的特征值
getCharacteId(){
var that = this
wx.getBLEDeviceCharacteristics({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: that.data.deviceId,
// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
serviceId: that.data.services,
success: function (res) {
for (var i = 0; i < res.characteristics.length; i++) {//2个值
var model = res.characteristics[i]
if (model.properties.notify == true) {
that.setData({
notifyId: model.uuid//监听的值
})
that.startNotice(model.uuid)//7.0
}
if (model.properties.write == true){
that.setData({
writeId: model.uuid//用来写入的值
})
}
}
}
})
}, 7、从后台服务器获取的指令
startNotice(uuid){
var that = this;
wx.notifyBLECharacteristicValueChange({
state: true, // 启用 notify 功能
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: that.data.deviceId,
// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
serviceId: that.data.services,
// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
characteristicId: uuid, //第一步 开启监听 notityid 第二步发送指令 write
success: function (res) {
// 设备返回的方法
wx.onBLECharacteristicValueChange(function (res) {
// 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以需要通过一个方法转换成字符串
var nonceId = that.ab2hex(res.value)
//拿到这个值后,肯定要去后台请求服务(当前步骤根据当前需求自己书写),获取下一步操作指令写入到蓝牙设备上去
wx.request({
method: "POST",
data: {
xx:nonceId
},
url: url,
success: (res) => {
//res.data.data.ciphertext:我这边服务返回来的是16进制的字符串,蓝牙设备是接收不到当前格式的数据的,需要转换成ArrayBuffer
that.sendMy(that.string2buffer(res.data.data.ciphertext))//8.0
// 服务器返回一个命令 我们要把这个命令写入蓝牙设备
}
})
}
})
},8、将从后台服务获取的指令写入到蓝牙设备当中
sendMy(buffer){
var that = this
wx.writeBLECharacteristicValue({
// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
deviceId: that.data.deviceId,
// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
serviceId: that.data.services,
// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
characteristicId: that.data.writeId,//第二步写入的特征值
// 这里的value是ArrayBuffer类型
value: buffer,
success: function (res) {
console.log("写入成功")
},
fail: function () {
console.log('写入失败')
},
complete:function(){
console.log("调用结束");
}
})
},注:下面是需要使用到的两个格式相互转换的方法
/**
* 将字符串转换成ArrayBufer
*/
string2buffer(str) {
let val = ""
if(!str) return;
let length = str.length;
let index = 0;
let array = []
while(index < length){
array.push(str.substring(index,index+2));
index = index + 2;
}
val = array.join(",");
// 将16进制转化为ArrayBuffer
return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
})).buffer
},
/**
* 将ArrayBuffer转换成字符串
*/
ab2hex(buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('');
},注:以上是蓝牙连接的全部流程,但是我们在实际使用中肯定不会这么顺畅,而且蓝牙发送指令的设备都会有一个特性,就是当前蓝牙设备有人连接上之后,其他人是搜索不到这个蓝牙设备的,所以你需要考虑在某些个特殊情况,代码里需要主动断开蓝牙连接把设备释放出来供其他用户使用,还有就是将指令写入蓝牙设备的时候很容易出问题,所以要写个回调去多次写入,保证成功性!
总结:以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。。
相关视频教程推荐:
微信小程序开发文档
微信小程序全方位深度解析视频教程
微信小程序开发CMS系统视频教程
以上就是微信小程序怎么实现蓝牙连接?(代码示例)的详细内容,更多请关注php中文网其它相关文章!
小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。
关键词:微信小程序怎样完成蓝牙连接?(代码示例)