>위챗 애플릿 >미니 프로그램 개발 >WeChat 애플릿에서 Bluetooth 연결을 구현하는 방법은 무엇입니까? (코드 예)

WeChat 애플릿에서 Bluetooth 연결을 구현하는 방법은 무엇입니까? (코드 예)

青灯夜游
青灯夜游앞으로
2018-11-13 13:55:2411187검색

WeChat 애플릿에서 블루투스 연결을 구현하는 방법은 무엇입니까? 이 기사에서는 WeChat 애플릿을 사용하여 Bluetooth 연결을 구현하는 방법(단계)을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

최근 프로젝트에서는 애플릿의 블루투스 기능을 이용해 하드웨어 장치와 연결해 서로 데이터 명령을 전송해야 하는데, 공동 디버깅 과정에서 몇 가지 문제점이 발견되어 기록해 볼까 생각했습니다. 나중에 참고할 수 있도록!

1. 블루투스 기기 초기화

일반적으로 블루투스 기능을 사용하려면 특정 블루투스 기기이므로 블루투스 기기의 이름을 알아야 합니다. 일반적으로 QR 코드를 스캔하여 연결합니다. 그런 다음 이 기기의 QR 코드를 스캔하면 휴대폰의 블루투스 모듈을 초기화해야 합니다. 🎜🎜#

/**
* 初始化蓝牙设备
*/
  initBlue:function(){
    var that = this;
    wx.openBluetoothAdapter({//调用微信小程序api 打开蓝牙适配器接口
      success: function (res) {
        // console.log(res)
        wx.showToast({
          title: '初始化成功',
          icon: 'success',
          duration: 800
        })
        that.findBlue();//2.0
      },
      fail: function (res) {//如果手机上的蓝牙没有打开,可以提醒用户
        wx.showToast({
          title: '请开启蓝牙',
          icon: 'fails',
          duration: 1000
        })
      }
    })
  },
#🎜 🎜#

2. 블루투스 장치 검색휴대폰 블루투스가 성공적으로 초기화된 후 검색됩니다. 주변 블루투스 기기

/**
*开始搜索蓝牙设备
*/
findBlue(){
    var that = this
    wx.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      interval: 0,
      success: function (res) {
       
        wx.showLoading({
          title: '正在搜索设备',
        })
        that.getBlue()//3.0
      }
    })
  },

3. 블루투스 기기 정보 얻기 블루투스 기기 검색 후 검색된 Bluetooth 장치 정보를 얻어야 합니다. 프로그램은

검색된 Bluetooth 장치 정보

를 얻는 두 가지 방법을 제공합니다. 해당 방법은

wx.onBluetoothDeviceFound입니다. :

Listen to find new 장치의 이벤트는 새 Bluetooth 장치가 발견되는 한 이 메서드가 한 번 호출된다는 의미입니다.

wx.getBluetoothDevices:

블루투스 모듈이 적용되는 동안 이미 기기에 연결된 장치를 포함하여 검색된 모든 블루투스 장치를 가져옵니다. #🎜🎜 # 두 가지 방법의 소개를 보면 차이점을 알 수 있는데, 차이점을 이해하지 못한다면 어떤 문제가 발생할까요?

처음 wx.onBluetoothDeviceFound 메서드를 공동 디버깅에 사용했을 때 모든 것이 정상임을 확인했습니다. 디버깅하는 동안 장치가 하나뿐이었기 때문에 Bluetooth 장치를 다시 검색했을 때 발견했습니다. 두 번째로 이 장치를 찾을 수 없습니다. 이 방법의 경우 새 장치가 아니고 이전에 연결한 적이 있거나 어떤 이유로 Bluetooth를 통해 데이터 명령을 전송할 때 오류가 발생하여 다시 연결해야 하기 때문입니다. 같은 이유로 현재 장치를 찾을 수 없습니다. 현재 장치는 이 방법의 새 장치가 아니기 때문입니다

그래서 wx.getBluetoothDevices 방법을 사용했습니다

/**
  * 获取搜索到的设备信息
 */
  getBlue(){
    var that = this
    wx.getBluetoothDevices({
      success: function(res) {
        wx.hideLoading();
        for (var i = 0; i < res.devices.length; i++){
           /*that.data.inputValue:表示的是需要连接的蓝牙设备ID,简单点来说就是我想要连接这个蓝牙设备,所以我去遍历我搜索到的蓝牙设备中是否有这个ID*/
          if (res.devices[i].name == that.data.inputValue || res.devices[i].localName == that.data.inputValue){
            that.setData({
              deviceId: res.devices[i].deviceId,
              consoleLog: "设备:" + res.devices[i].deviceId,
            })
            that.connetBlue(res.devices[i].deviceId);//4.0
            return;
          }
        }
      },
      fail: function(){
        console.log("搜索蓝牙设备失败")
      }
    })
  },

4. 블루투스 기기 연결

이전 단계를 통해 해당 블루투스를 찾은 후, 해당 블루투스 기기의 ID를 통해 블루투스 연결을 해주세요. 블루투스 장치

/**
  * 获取到设备之后连接蓝牙设备
 */
  connetBlue(deviceId){                    
    var that = this;
    wx.createBLEConnection({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: deviceId,//设备id
      success: function (res) {
        wx.showToast({
          title: &#39;连接成功&#39;,
          icon: &#39;fails&#39;,
          duration: 800
        })
        console.log("连接蓝牙成功!")
        wx.stopBluetoothDevicesDiscovery({
          success: function (res) {
            console.log(&#39;连接蓝牙成功之后关闭蓝牙搜索&#39;);
          }
        })
        that.getServiceId()//5.0
      }
    })
  },

5. 서비스 uuid

을(를) 가져옵니다. Bluetooth 장치의 서비스 uuid#을 가져옵니다. 🎜🎜#

6 id

으로 Bluetooth 장치의 특성 값을 봅니다. 블루투스 기기의 경우 데이터를 쓰고 전송하려면 특정 특성값이 있어야 하므로 위의 단계를 통해 얻은 ID를 사용하여 현재 블루투스 장치의 특성값을 볼 수 있습니다#🎜 🎜#

getServiceId(){
    var that = this
    wx.getBLEDeviceServices({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: that.data.deviceId,
      success: function (res) {
        var model = res.services[0]
        that.setData({
          services: model.uuid
        })
        that.getCharacteId()//6.0
      }
    })
  },

7. 백그라운드 서버에서 얻은 지침

getCharacteId(){
    var that = this 
    wx.getBLEDeviceCharacteristics({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: that.data.deviceId,
      // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
      serviceId: that.data.services,
      success: function (res) {
        for (var i = 0; i < res.characteristics.length; i++) {//2个值
          var model = res.characteristics[i]
          if (model.properties.notify == true) {
            that.setData({
              notifyId: model.uuid//监听的值
            })
            that.startNotice(model.uuid)//7.0
          }
          if (model.properties.write == true){
            that.setData({
              writeId: model.uuid//用来写入的值
            })
          }
        }
      }
    })
  },

8. 백그라운드 서비스에서 얻은 지침을 Bluetooth 장치에 기록합니다#🎜 🎜#

startNotice(uuid){
    var that = this;
    wx.notifyBLECharacteristicValueChange({
      state: true, // 启用 notify 功能
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 
      deviceId: that.data.deviceId,
      // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
      serviceId: that.data.services,
      // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
      characteristicId: uuid,  //第一步 开启监听 notityid  第二步发送指令 write
      success: function (res) {
      
          // 设备返回的方法
          wx.onBLECharacteristicValueChange(function (res) {
              // 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以需要通过一个方法转换成字符串
              var nonceId = that.ab2hex(res.value) 
      //拿到这个值后,肯定要去后台请求服务(当前步骤根据当前需求自己书写),获取下一步操作指令写入到蓝牙设备上去
      
     wx.request({
                    method: "POST",
         
                    data: {
                      xx:nonceId
                    },
                    url: url,
                    success: (res) => {
                      //res.data.data.ciphertext:我这边服务返回来的是16进制的字符串,蓝牙设备是接收不到当前格式的数据的,需要转换成ArrayBuffer
                      that.sendMy(that.string2buffer(res.data.data.ciphertext))//8.0
                      // 服务器返回一个命令  我们要把这个命令写入蓝牙设备
                    }
                   })
  }
    })
  },

참고: 다음은 두 형식을 서로 변환하는 방법입니다

sendMy(buffer){
    var that = this 
    wx.writeBLECharacteristicValue({
      // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
      deviceId: that.data.deviceId,
      // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
      serviceId: that.data.services,
      // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
      characteristicId: that.data.writeId,//第二步写入的特征值
      // 这里的value是ArrayBuffer类型
      value: buffer,
      success: function (res) {
        console.log("写入成功")
      },
      fail: function () {
        console.log(&#39;写入失败&#39;)
      },
      complete:function(){
        console.log("调用结束");
      }
    })
  },
#🎜 🎜#참고: 위는 블루투스 연결의 전체 과정이지만 실제 사용에서는 확실히 그렇게 원활하지는 않을 것이며 블루투스를 통해 명령을 보내는 장치에는 특성이 있습니다. 즉, 누군가가 현재 블루투스 장치에 연결한 후입니다. , 다른 사람이 이 블루투스 기기를 검색할 수 없으므로 특정 개인이 특별한 상황에서 코드를 적극적으로 블루투스 연결을 끊고 다른 사용자가 사용할 수 있도록 기기를 해제해야 하는지 고려해야 합니다. Bluetooth 장치에 명령을 작성할 때 문제가 발생하기 쉽기 때문에 성공하려면 콜백을 여러 번 작성해야 합니다. 요약:

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. .

추천 관련 비디오 튜토리얼:


WeChat 미니 프로그램 개발 문서

전체 WeChat 미니 프로그램 방향성 심층 분석 영상 튜토리얼

WeChat 애플릿 개발 CMS 시스템 영상 튜토리얼

위 내용은 WeChat 애플릿에서 Bluetooth 연결을 구현하는 방법은 무엇입니까? (코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제