uniapp 蓝牙通讯保姆级教程(搜索/连接蓝牙、读、写) | 您所在的位置:网站首页 › 蓝牙通讯错误怎么解决方法 › uniapp 蓝牙通讯保姆级教程(搜索/连接蓝牙、读、写) |
小程序点击蓝牙设备进行通讯
1.初始化蓝牙设备 | | 提醒用户打开蓝牙设备 player() { var that = this; uni.openBluetoothAdapter({ //调用微信小程序api 打开蓝牙适配器接口 success: function(res) { // console.log(res) uni.showToast({ title: '初始化成功', icon: 'success', duration: 800 }) that.findBlue(); //2.0 }, fail: function(res) { //如果手机上的蓝牙没有打开,可以提醒用户 uni.showToast({ title: '请打开蓝牙', type: 'error', icon: 'none' }); } }) },2.搜索周边设备(此操作比较耗费系统资源,请在搜索并连接到设备后调用 uni.stopBluetoothDevicesDiscovery 方法停止搜索。) findBlue() { var that = this uni.startBluetoothDevicesDiscovery({ allowDuplicatesKey: false, interval: 0, success: function(res) { uni.showLoading({ title: '正在搜索设备', }) that.getBlue() //3.0 } }) },3.获取搜索到的设备信息 getBlue() { var that = this //uni.getBluetoothDevices获取在蓝牙模块生效期间所有已发现的蓝牙设备。包括已经和本机处于连接状态的设备 uni.getBluetoothDevices({ success: function(res) { uni.hideLoading(); // console.log(res) that.BluetoothList = res.devices //将BluetoothList遍历给用户,当用户点击连接某个蓝牙时调用4.0 }, fail: function() { console.log("搜索蓝牙设备失败") } }) },4.当用户点击某个设备时将deviceId进行蓝牙连接 connetBlue(deviceId) { // console.log(deviceId) var that = this; uni.createBLEConnection({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: deviceId, //设备id success: function(res) { uni.showToast({ title: '连接成功', icon: 'fails', duration: 800 }) console.log("连接蓝牙成功!-->11111") uni.stopBluetoothDevicesDiscovery({ success: function(res) { console.log('连接蓝牙成功之后关闭蓝牙搜索'); } }) that.deviceId = deviceId; that.getServiceId() //5.0 } }) },5.连接上需要的蓝牙设备之后,获取这个蓝牙设备的服务uuid getServiceId() { var that = this uni.getBLEDeviceServices({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.deviceId, success: function(res) { console.log(res) //需要什么服务就用对应的services that.readyservices = res.services[0].uuid //因设备而议:该特征值只支持读 that.services = res.services[1].uuid //因设备而议:该特征值支持write和notfy服务 that.getCharacteId() //6.0 } }) },6.如果一个蓝牙设备需要进行数据的写入以及数据传输,就必须具有某些特征值,所以通过上面步骤获取的id可以查看当前蓝牙设备的特征值 getCharacteId() { var that = this uni.getBLEDeviceCharacteristics({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.services, success: function(res) { console.log(res) for (var i = 0; i //model.uuid:用来写入的uuid值 //this.sendMy()给设备写入 that.sendMy(model.uuid) } if (model.properties.notify) { //model.uuid:用来notify的uuid值 that.notifyUuid = model.uuid } } } }) },7.将从后台服务获取的指令写入到蓝牙设备当中 //buffer允许写入的uuid sendMy(buffer) { var that = this //this.string2buffer-->字符串转换成ArrayBufer(设备接收数据的格式ArrayBufer) var buff = that.string2buffer('3a0a0b0c0d02423122'); //9.0 uni.writeBLECharacteristicValue({ // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 deviceId: that.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.services, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取 characteristicId: buffer, //第二步写入的特征值 // 这里的value是ArrayBuffer类型 value: buff, success: function(res) { //此时设备已接收到你写入的数据 console.log("写入成功") that.startNotice() }, fail: function(err) { console.log(err) }, complete: function() { console.log("调用结束"); } }) },8.创建链接,发送指令启用notify 功能接收设备返回的数据 startNotice() { var that = this; uni.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.services, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取 characteristicId: that.notifyUuid, //第一步 开启监听 notityid 第二步发送指令 write success(res) { //接收蓝牙返回消息 uni.onBLECharacteristicValueChange((sjRes)=>{ // 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据, //所以需要通过一个方法转换成字符串 var nonceId = that.ab2hex(sjRes.value)//10.0 console.log(sjRes) console.log('194行'+nonceId) }) }, fail(err) { console.log(err) } }) }9.将字符串转换成ArrayBufer string2buffer(str) { let val = "" if (!str) return; let length = str.length; let index = 0; let array = [] while (index return parseInt(h, 16) })).buffer },10.将ArrayBuffer转换成字符串 ab2hex(buffer) { const hexArr = Array.prototype.map.call( new Uint8Array(buffer), function (bit) { return ('00' + bit.toString(16)).slice(-2) } ) return hexArr.join('') },基本完成连接、写入、读取返回值…其他操作看官网 |
CopyRight 2018-2019 实验室设备网 版权所有 |