3***@qq.com
3***@qq.com
  • 发布:2020-06-04 17:12
  • 更新:2020-06-04 17:12
  • 阅读:5524

关于uniapp蓝牙读取数据和写入数据问题

分类:uni-app

蓝牙连接水务设备的时候,获取了2种服务,第一种就是获取设备自身的信息,特征值是只读的(properties: {indicate: false,notify: false,read: true,write: false}),但是在监听低功耗蓝牙设备的特征值变化的时候({"deviceId":"90E6E44A-C4A0-E62A-CBE5-7F17AFD93EC8","serviceId":"0000180A-0000-1000-8000-00805F9B34FB","characteristicId":"00002A50-0000-1000-8000-00805F9B34FB","value":{}}),value的值是空的,也是因为本身设备没有运行,我想问的问题是设备没有在运行的时候如何读取只读的特征值?在蓝牙助手的APP上是可以执行的,在uniapp中要如何实现??
//获取蓝牙设备所有服务(service)。
getBLEDeviceServices(deviceId,index){
setTimeout(()=>{
uni.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId:deviceId,
success:(res)=>{
console.log('device services:', res)
this.serverList = res.services
//获取的所有蓝牙服务
res.services.forEach((item)=>{
//0000180A-0000-1000-8000-00805F9B34FB 获取设备基本信息--第一个服务
//0000FFF0-0000-1000-8000-00805F9B34FB 发送相关字段--第二个服务
if(item.uuid=="0000180A-0000-1000-8000-00805F9B34FB"){
this.serviceId = item.uuid;
console.log('serverId:', this.serviceId)
this.getBLEDeviceCharacteristics(this.deviceId)
}
})
}
})
},5000)

        },  
        // 获取蓝牙特征值  
        getBLEDeviceCharacteristics(deviceId){  
            setTimeout(()=>{  
                uni.getBLEDeviceCharacteristics({  
                  // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  
                  deviceId:deviceId,  
                  // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取  
                  serviceId:this.serviceId,  
                  success:(res)=>{  
                    console.log('获取蓝牙特征值',res)  
                    console.log('获取蓝牙特征值',res.characteristics)  
                    // [{properties: {notify: false, write: false, indicate: false, read: true}  
                    // uuid: "00002A23-0000-1000-8000-00805F9B34FB"}]   notify--false的时候是不能启用 notify 功能notifyBLECharacteristicValueChange  
                    this.characteristics = res.characteristics  
                    res.characteristics.forEach((item,index)=>{  
                            this.characteristicId = item.uuid;  
                            console.log('characteristicId:', this.characteristicId)   
                            this.notifyBLECharacteristicValueChange(this.deviceId)  
                            // this.readBLECharacteristicValue(this.deviceId)  
                    })  
                  },  
                  fail:(res)=>{  
                    console.log(res)  
                  }  
                })  
            },2000)  
        },  
        // 启用 notify 功能  
        notifyBLECharacteristicValueChange(deviceId){  
            console.log('notify 功能')  
            uni.notifyBLECharacteristicValueChange({  
              state: true, // 启用 notify 功能  
              // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  
              deviceId:deviceId,  
              // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取  
              serviceId:this.serviceId,  
              // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取  
              characteristicId:this.characteristicId,  
              success:(res)=> {  
                console.log('success', res)  
                this.onBLECharacteristicValueChange(this.deviceId);  
              },  
              fail:(res)=> {  
                console.log('fail', res)  
              }  
            })  
        },  
        //010d0000001001  ArrayBuffer转16进度字符串示例  
        ab2hex(buffer) {  
            const hexArr = Array.prototype.map.call(  
                new Uint8Array(buffer),  
                function (bit) {  
                  return ('00' + bit.toString(16)).slice(-2)  
                })  
                console.log('获取的转义文字',hexArr.join(''))  
            return hexArr.join('')  
        },  

        Uint8ArrayToString(fileData){  
          var dataString = "";  
          for (var i = 0; i < fileData.length; i++) {  
            dataString += String.fromCharCode(fileData[i]);  
          }  

          return dataString  

        },  
        // 监听低功耗蓝牙设备的特征值变化  
        onBLECharacteristicValueChange(deviceId){  

            uni.onBLECharacteristicValueChange((res)=> {  
              console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`)  
              console.log(this.ab2hex(res.value))  
              console.log('监听低功耗蓝牙设备的特征值变化',JSON.stringify(res))  
              console.log('要转义的文字',res.value)  
              console.log('要转义的文字Uint8ArrayToString',this.Uint8ArrayToString(res.value))  
              console.log('要转义的文字stringify',JSON.stringify(res.value))  
              this.macAddress = res.deviceId;  
              this.macValue = this.ab2hex(res.value);  
              console.log('特征变化值',this.macAddress,this.macValue)  
              // this.readBLECharacteristicValue(this.deviceId)  
            })    
        },  
        // 读取设备二进制数据  
        readBLECharacteristicValue(){  
            console.log('进入读取');  
            // setTimeout(()=>{  
                uni.readBLECharacteristicValue({  
                  // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  
                  deviceId:this.deviceId,  
                  // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取  
                  serviceId:this.serviceId,  
                  // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取  
                  characteristicId:this.characteristicId,  
                  success:(res)=> {  
                     console.log('readBLECharacteristicValue:success', res)  
                     this.readCode = res.errCode;  
                     this.readCodeMsg = res.errMsg;  
                     this.onBLECharacteristicValueChange(this.deviceId);  
                  },  
                  fail:(res)=> {  
                     console.log('readBLECharacteristicValue:fail', res)  
                     this.readCode = res.errCode;  
                     this.readCodeMsg = res.errMsg;  
                     this.onBLECharacteristicValueChange(this.deviceId);  
                  }  
                })  
            // },200)  

        },
2020-06-04 17:12 负责人:无 分享
已邀请:

该问题目前已经被锁定, 无法添加新回复