uni-appIOT低功耗蓝⽛模块与app的各种交互(未完)
在项⽬中,底层硬件的数据交互是有设计成可以通过蓝⽛进⾏传输的。低功耗蓝⽛传输和app的交互,有太多问题和坑,这篇⽂章就从头到尾的把所有碰到的问题以及解决的流程做⼀个讲解。
⽂章环境
编辑器-HbuilderX
前端框架-uni-app
UI框架-uview-ui
⽂章⽬录
1、设备的连接与鉴权
公司的蓝⽛设备和app连接是有⼀个鉴权的过程的,保证只有我司的app可以与我司的设备进⾏数据对接。开始设计的连接⽅式有两种分别是蓝⽛连接和扫码连接,两种连接的⽅式都⼀样都是通过
第⼀步、打开蓝⽛ openBluetoothAdapter
uni.openBluetoothAdapter({
success: e =>{
//成功打开蓝⽛初始化
this.startBluetoothDevicesDiscovery_ble();
},
小吃创业项目
fail: e =>{
//失败原因:因为设备蓝⽛功能未打开
this.$refs.uToast.show({
title:"设备蓝⽛功能未打开",
type:'error'
})
}
});
第⼆步、发现蓝⽛设备 startBluetoothDevicesDiscovery
uni.startBluetoothDevicesDiscovery({
success: e =>{
// 将搜索到的蓝⽛设备deviceId 发送给全局的蓝⽛列表蓝⽛连接的⼦页⾯显⽰
if(that.bluelist.indexOf(res.devices[0].deviceId)==-1){
that.bluelist.push(res.devices[0].deviceId)
}
})
/
/ 跳转到⼦页⾯(该页⾯详细展⽰了所有的蓝⽛设备地址号,⽤户可以在该页⾯进⾏相应蓝⽛的连接)
完形教育
uni.navigateTo({
url:'./connecting-devieces-ble/index'
});
},
fail: e =>{
// 弹窗-搜索蓝⽛设备失败
this.$refs.uToast.show({
title:"搜索蓝⽛设备失败",
type:'error',
})
}
});
第三步、建⽴蓝⽛连接 createBLEConnection与打开notify监听notifyBLECharacteristicValueChange
/**
* @description: 将mac存⼊vuex中并发起连接
* @param 选择的mac值(deviceId)
* 以及以下由设备产家提供的数据值(也可以通过⾃⼰连接进⾏获取)
* rviceId: "0000FE60-0000-1000-8000-00805F9B34FB",
* characteristicId62: "0000FE62-0000-1000-8000-00805F9B34FB",
* characteristicId61: "0000FE61-0000-1000-8000-00805F9B34FB",
* @return void
*/
我心爱的一件物品作文
deviceId:this.mac,
success(res){
// 延迟两秒启⽤设备的特征值功能(该功能只需要启动⼀次)
tTimeout(()=>{
state:true,
deviceId: thit.mac,
rviceId: thit.rviceId,
characteristicId: thit.characteristicId62,
success(res){
//这⾥如果成功则延时500ms后开始鉴权操作
tTimeout(()=>{
thit.writeBLECharacteristicValue()
},500)
},
fail(res){
thit.$refs.uToast.show({
title:'启⽤设备特征值失败',
龙案
type:'error',
})
},
})
},2000)
},
});
这⾥谈到⼀个建议,由于蓝⽛的搜索很多都是实时进⾏的。如果采样组件或者页⾯通讯,有可能会造成数据流失,所以我们采取vuex的全局数据通讯保证数据完整性
如果是利⽤扫码连接,那么则将设备的deviceId制作成⼆维码供设备扫码
scanConnect(){
// 扫码连接测试设备
uni.scanCode({
success: res =>{
this.openBluetoothAdapter()
},
fail: err =>{
}
});
},
成功的话对蓝⽛设备是否打开进⾏检查…以下操作和上⾯⼀样
第四步、设备鉴权 writeBLECharacteristicValue 监听返回onBLECharacteristicValueChange 设备鉴权前都需要进⾏数据处理,关于数据的处理我放在下⼀个段落阐明
value的值就是需要写⼊的数据微烫
uni.writeBLECharacteristicValue({
deviceId:this.mac,
rviceId:this.rviceId,
characteristicId:this.characteristicId61,扬起理想的风帆
value: buffer,
success(res){
var data =ab2hex(res.value)
质疑精神console.log(data)
})
},
fail(res){
// 弹窗-设备连接失败请重试
thit.$refs.uToast.show({
title:'设备连接失败,请重试',
type:'error'
})
}
})
第五步、实时监听设备情况 onBLEConnectionStateChange
onShow(){
},
onBLEConnectionStateChange(){
var that =this诗集大全
// 该⽅法回调中可以⽤于处理连接意外断开等异常情况
console.log(`蓝⽛连接状态 -------------------------->`);
console.log(JSON.stringify(res));
// 当设备意外断连时监听时间会将全局的参数恢复到断连的情况ted ==fal){
that.backToDeviceShow =fal
}
})
},
2、设备数据的读取与展⽰
3、参数的读取和修改
⾸先是设备参数的读取