当前位置:   article > 正文

微信小程序蓝牙(BLE)开发与蓝牙设备数据交互开发总结_小程序 同步 蓝牙设备 数据 运动打卡

小程序 同步 蓝牙设备 数据 运动打卡

需要做一个类似于美团单车小程序扫码开锁的程序,需要使用到微信小程序的蓝牙模块功能与蓝牙锁进行交互

一、这里我先把我遇到的两个天坑在这里先说明一下:

  • 1、根据锁的开发文档描述:读特征值是000036F6-0000-1000-8000-00805F9B34FB,但是在iOS上设置通知一直报10008错误码!实际开发下来发现:在Android手机是使用这个,在iOS手机确是0000FEC8-0000-1000-8000-00805F9B34FB这个问题一直没有搞懂!(上面这两个特征值至是举例)
  • 2、开启读特征值通知成功后发送数据给锁,无法收到锁回复的数据

二、这里就主要总结一下BLE的开发步骤,与蓝牙设备进行交互

wx.openBluetoothAdapter({
  success(res) {
   //开启成功
  },
  fail(res) {
   //开启失败
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
wx.onBluetoothDeviceFound(function (devices) {
  var bleArray = devices.devices
  //这里会收到周边搜索到的蓝牙
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
wx.startBluetoothDevicesDiscovery({
  services: ['FEE7'],
  success(res) {
    console.log("搜索蓝牙:", res)
  },
  fail(res) {
    console.log(res)
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 第四步:在onBluetoothDeviceFound中搜索到的蓝牙进行连接
wx.stopBluetoothDevicesDiscovery({
  success(res) {
    //停止搜索蓝牙成功
  },
  fail(res) {
    //停止搜索蓝牙失败
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
wx.createBLEConnection({
  //蓝牙设备ID
  deviceId: bleDeviceId,
  success: function (res) {
    //蓝牙连接成功
  },
  fail: function (res) {
   //蓝牙连接失败
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 第五步:获取蓝牙服务ID(一个蓝牙会有多个服务,所以需要取自己需要的服务ID)
wx.getBLEDeviceServices({
  //蓝牙设备ID
  deviceId: bleDeviceId,
  success: function (res) {
    var services = res.services;
    let bleServiceUUID = "";
    for (let i = 0; i < services.length; i++) {
      if (services[i].uuid.toUpperCase().indexOf("FEE7") != -1) {
        bleServiceUUID = services[i].uuid;
        break;
      }
    }
   //获取蓝牙设备服务UUID成功
  },
  fail(res) {
    //获取蓝牙设备服务失败
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
wx.getBLEDeviceCharacteristics({
  //蓝牙设备ID
  deviceId: bleDeviceId,
  //蓝牙服务ID
  serviceId: bleServiceUUID,
  success: function (res) {
    for (let i = 0; i < res.characteristics.length; i++) {
      let character = res.characteristics[i];
      if (character.uuid.toUpperCase().indexOf("36F5") != -1) {
       //获取写特征值
      }
      if (character.uuid.toUpperCase().indexOf("36F6") != -1) {
       //读特征值
      }
    }
  }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这里就会遇到我开头说的第一个问题。然后这里取读、写特征值需要根据你的蓝牙协议文档

 wx.notifyBLECharacteristicValueChange({
   state: true,
   //蓝牙设备ID
   deviceId: bleDeviceId,
   //蓝牙服务ID
   serviceId: bleServiceUUID,
   //特征值ID
   characteristicId: uuid,
   success: function (res) {
     //开启通知成功
   },
   fail: function (res) {
     //开启通知失败
   }
 });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
wx.onBLECharacteristicValueChange(function (res) {
  //这里坐等数据过来,res.value
})
  • 1
  • 2
  • 3
wx.writeBLECharacteristicValue({
   //蓝牙设备ID
   deviceId: bleDeviceId,
   //蓝牙服务ID
   serviceId: bleServiceUUID,
   //写特征值ID
   characteristicId: uuid,
   //数据ArrayBuffer
   value: buffer,
    success(res) {
     //发送蓝牙数据成功
    },
    fail(res) {
     //发送蓝牙数据失败
    }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这里就会遇到我开头说的第二个问题。发送了数据无法收到锁的数据,原因就是第八步设置监听变化比发送数据慢,也就是我还没监听你就把数据发出去了,导致设备回的数据包没有收到,所以这里需要在第八步执行后,延时一段时间在发送数据

//断开蓝牙连接
wx.closeBLEConnection({
  //设备ID
  deviceId: bleDeviceId,
    success(res) {
    
    }
});
//关闭蓝牙模块
wx.closeBluetoothAdapter({
  success(res) {
   
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/757985?site
推荐阅读
相关标签
  

闽ICP备14008679号