大家好,欢迎来到IT知识分享网。
现阶段蓝牙技术已在现实生活和工作中得到广泛使用,各平台为我们提供了上手实践的方法,带上你的装备,一起来看看怎么控制你的蓝牙设备。
目录:
一、蓝牙连接流程
二、蓝牙读写操作
蓝牙连接流程

连接流程闭坑指南:
1、获取在蓝牙模块生效期间所有已发现的蓝牙设备(uni.getBluetoothDevices),添加有效设备且需要去重,如:
uni.getBluetoothDevices({ success: res => { // 查询所有已知设备 res.devices.forEach(item => { if (item.deviceId && item.name) this.baseList.push(item) }) // 对象去重 this.bleList = this.$utils.uniqueObj(this.baseList) } })
2、连接低功耗蓝牙设备(uni.createBLEConnection)后,需要延迟1.5秒以上调用,才能拿到设备服务信息。停止搜寻附近的蓝牙外围设备(
uni.stopBluetoothDevicesDiscovery),因为一直搜寻附近的蓝牙外围设备,比较耗费系统资源,如:
uni.createBLEConnection({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: item.deviceId, success: res => { // 需要延迟调用才能拿到设备服务信息 setTimeout(() => { this.getBLEDeviceServices(item.deviceId) this.stopBluetoothDevicesDiscovery() }, 1500) } })
3、获取蓝牙设备所有服务(uni.getBLEDeviceServices),获取设备服务列表含义“FFF”的服务,如:
uni.getBLEDeviceServices({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId, success: res => { // FFF uuid 微信硬件平台协议 res.services.forEach((item) => { item.uuid.indexOf('FFF') > -1 && this.getBLEDeviceCharacteristics(deviceId, item.uuid) }) } })
4、获取蓝牙设备某个服务中所有特征值(
uni.getBLEDeviceCharacteristics),如:
uni.getBLEDeviceCharacteristics({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId, // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 serviceId, success: res => { res.characteristics.forEach((item, index) => { // 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。 if (item.properties.read && index == 0) { uni.readBLECharacteristicValue({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId, // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 serviceId, // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 characteristicId: item.uuid }) } // 向低功耗蓝牙设备特征值中写入二进制数据。注意:必须设备的特征值支持 write 才可以成功调用。 if (item.properties.write && index == 1) { this.deviceId = deviceId this.serviceId = serviceId this.characteristicId = item.uuid // 向蓝牙中写入对应的值 setTimeout(() => { this.writeBLECharacteristicValue('00000000') }, 500) } // 启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。注意:必须设备的特征值支持 notify 或者 indicate 才可以成功调用。另外,必须先启用 notifyBLECharacteristicValueChange 才能监听到设备 characteristicValueChange 事件 if ((item.properties.notify || item.properties.indicate) && index == 0) { uni.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId, // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 serviceId, // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 characteristicId: item.uuid, success: res => { // 安卓平台上,成功后立即调用,在部分机型上会发生 10008 系统错误 setTimeout(() => { this.onBLECharacteristicValueChange() }, 300) } }) } }) } })
获取某个特征值时,之所以下标值写死,是通过不断尝试得到,可能不同设备存在差异,需要自己去调试。
5、监听低功耗蓝牙设备的特征值变化事件(
uni.onBLECharacteristicValueChange),记得转义后打印,直接打印值为空,如:
uni.onBLECharacteristicValueChange(res => { // 写入蓝牙后的应答值 console.log('写入蓝牙后的应答值----------', this.$utils.ab2hex(res.value)) })
以上一顿操作完成,能看到应答值,恭喜你,现在可以随意操作你的蓝牙设备了;如需要完整代码,欢迎评论区留言;
蓝牙读写操作
读写操作时,设备需要提供一份蓝牙通信协议;协议采用一问一答方式进行交互,协议格式大致为:帧头+命令码+数据组号+数据长度+数据+某种校验+帧尾;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/185148.html