开发蓝牙很多小伙伴刚开始一头雾水,不知道从何下手,网上可以查的资料少之又少,所以写这篇文章来总结一下BLE低功耗蓝牙开发流程,话不多说,仔细看!! 基本使用步骤我们总结完了,那么接下来就介绍怎么使用 1.初始化蓝牙 2.开始搜索蓝牙设备 3.发现外围设备 4.点击选择自己需要连接的设备 5.当我们连接成功的时候,一定要停止搜索外围设备,停止,停止,停止 6.获取蓝牙设备所有服务 注:这个地方使用了setTimeout等待一秒种再去获取,直接获取我们可能出现获取不到的情况 7.获取蓝牙特征 8.启用蓝牙设备特征值变化时的 notify 功能 “properties”: { 9.再多介绍一个采坑的记录 到这里基本上就完成了蓝牙的连接Uni-App开发BLE低功耗蓝牙步骤
这里主要目的就是检测一下手机蓝牙是否打开uni.openBluetoothAdapter({ success:(res)=> { //已打开 uni.getBluetoothAdapterState({//蓝牙的匹配状态 success:(res1)=>{ console.log(res1,'“本机设备的蓝牙已打开”') // 开始搜索蓝牙设备 this.startBluetoothDeviceDiscovery() }, fail(error) { uni.showToast({icon:'none',title: '查看手机蓝牙是否打开' } }); }, fail:err=>{ //未打开 uni.showToast({icon:'none',title: '查看手机蓝牙是否打开'}); } })
// 开始搜索蓝牙设备 startBluetoothDeviceDiscovery(){ uni.startBluetoothDevicesDiscovery({ success: (res) => { console.log('startBluetoothDevicesDiscovery success', res) // 发现外围设备 this.onBluetoothDeviceFound() },fail:err=>{ console.log(err,'错误信息') } }) }
到这个位置就会搜索到设备了
这个地方重点就是获取到了 deviceId 这是连接蓝牙的重要ID,存起来到data里面后面我们会用到// 发现外围设备 onBluetoothDeviceFound() { // console.log("zhixing") uni.onBluetoothDeviceFound((res) => { // console.log(res) // ["name", "deviceId"] // 吧搜索到的设备存储起来,方便我们在页面上展示 if(this.list.indexOf(res.devices[0].deviceId)==-1){ this.list.push(res.devices[0].deviceId) } }) }
在上面搜索到设备之后我们把设备存储到list里面,方便我们在页面展示,然后点击选择我们要连接的设备,吧deviceId传进来,保存起来,说明我们连接的是这个设备,下面还需要用到,我们存到data里面就行//选择设备连接吧deviceId传进来 createBLEConnection(deviceId){ let thit = this //data里面建立一个deviceId,存储起来 this.deviceId = deviceId //连接蓝牙 uni.createBLEConnection({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId:this.deviceId, success(res) { //防止在这里面取不到this,古在外面用thit存储了this thit.stopBluetoothDevicesDiscovery() console.log(res) console.log("蓝牙连接成功") },fail(res) { console.log("蓝牙连接失败",res) } }) },
// 停止搜寻蓝牙设备 stopBluetoothDevicesDiscovery(){ uni.stopBluetoothDevicesDiscovery({ success: e => { this.loading = false console.log('停止搜索蓝牙设备:' + e.errMsg); }, fail: e => { console.log('停止搜索蓝牙设备失败,错误码:' + e.errCode); } }); }
getBLEDeviceServices这个方法里面填一个参数deviceId就是我们刚刚获取到的
成功就会获取到了services uuid 同理也存储起来
等下来获取特征值//获取蓝牙的所有服务 getBLEDeviceServices(){ setTimeout(()=>{ uni.getBLEDeviceServices({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId:this.deviceId, success:(res)=>{ // console.log("成功",res) console.log('device services:', res) //这里会获取到好多个services uuid 我们只存储我们需要用到的就行,这个uuid一般硬件厂家会给我们提供 res.services.forEach((item)=>{ if(item.uuid.indexOf("AE00")!=-1){ this.serviceId = item.uuid; //进入特征 this.getBLEDeviceCharacteristics() } }) } }) },1000) },
这里需要穿2个参数了,就是上面的两个id,分别是deviceId、services
这里获取的特征值的uuid才是我们真正需要操作的uuid//获取蓝牙特征 getBLEDeviceCharacteristics(){ console.log("进入特征"); setTimeout(()=>{ uni.getBLEDeviceCharacteristics({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId:this.deviceId, // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 serviceId:this.serviceId, success:(res)=>{ console.log(res,'特征getBLEDeviceCharacteristics') this.characteristics = res.characteristics console.log(this.characteristics) //循环所有的uuid // for(let i=0;i<3;i++){ // this.notifyBLECharacteristicValueChange(res.characteristics[i].uuid) // console.log(res.characteristics[i].uuid) // console.log(i,'i') // } res.characteristics.forEach((item)=>{ if(item.uuid.indexOf("AE02") != -1){ console.log('characteristicId:', item.uuid) //利用传参的形势传给下面的notify,这里的uuid如果都需要用到,就不用做判断了,建议使用setTimeout进行间隔性的调用此方法 this.notifyBLECharacteristicValueChange(item.uuid) } }) }, fail:(res)=>{ console.log(res) } }) },1000) },
当我们启动notify功能,才能知道我们当前蓝牙的读写状态,
到这里蓝牙连接基本就完成了,然后就是需要自己用到读写操作
“read”: true, //读
“write”: true, //写
“notify”: true, //广播
“indicate”: false
}// 启用 notify 功能 notifyBLECharacteristicValueChange(characteristicId){ console.log(characteristicId,'characteristicId') uni.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId:this.deviceId, // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 serviceId:this.serviceId, // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 characteristicId:characteristicId, success:(res)=> { console.log(res) // console.log(this.characteristicId) console.log('notifyBLECharacteristicValueChange success', res.errMsg) }, fail:(res)=> { console.log('notifyBLECharacteristicValueChange success2', res.errMsg) } }) },
那就是监听变化这个方法的使用
最开始我是写在了8.启用 notify 功能里面,可我发现只能监听一个,后来我就吧这个监听方法放在了6.获取蓝牙设备所有服务,这个地方可以监听到所有特征值的变化,所以我们的代码改进一下
就成了下面这段,读取成功就会在这个地方监听输出//获取蓝牙的所有服务 getBLEDeviceServices(){ setTimeout(()=>{ uni.getBLEDeviceServices({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId:this.deviceId, success:(res)=>{ // console.log("成功",res) console.log('device services:', res) res.services.forEach((item)=>{ if(item.uuid.indexOf("AE00")!=-1){ // this.serviceId = item.uuid; //存储到状态 this.$store.commit("upserviceId",item.uuid) console.log(this.serviceId) // 这里获取回调,读取成功就的值就会在这个地方接收到!!! uni.onBLECharacteristicValueChange((res)=>{ console.log("监听成功",res) //res.value是ArrayBuffer类型的,官方给了一个方法转16进制,我们再进行操作 this.shiliu = this.ab2hex(res.value) }) this.getBLEDeviceCharacteristics() } }) } }) },1000) }
自己需要执行读写操作,就在下面读写就行,如果想默认读写操作,就可以在 8.启用 notify 功能 里面进行操作
就到这里了,如果对你有帮助,请点击喜欢
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算