Wie implementiert man eine Bluetooth-Verbindung im WeChat-Applet? (Codebeispiel)

青灯夜游
Freigeben: 2018-11-13 13:55:24
nach vorne
11132 Leute haben es durchsucht

Wie implementiert man eine Bluetooth-Verbindung im WeChat-Applet? In diesem Artikel wird Ihnen die Methode (die Schritte) des WeChat-Applets zur Implementierung einer Bluetooth-Verbindung vorgestellt. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Ein aktuelles Projekt erfordert die Verwendung der Bluetooth-Funktion des Miniprogramms, um eine Verbindung mit Hardwaregeräten herzustellen und Datenanweisungen untereinander zu übertragen. Während des gemeinsamen Debugging-Prozesses wurden einige Probleme entdeckt, daher dachte ich darüber nach, diese aufzuzeichnen zum späteren Nachschlagen!

1. Initialisieren Sie das Bluetooth-Gerät

Im Allgemeinen möchten Sie bei Verwendung der Bluetooth-Funktion unbedingt eine Verbindung zu einem bestimmten Bluetooth-Gerät herstellen Sie müssen den Namen des Bluetooth-Geräts kennen. Im Allgemeinen scannen Sie den QR-Code, um eine Verbindung herzustellen. Wenn Sie dann den QR-Code dieses Geräts scannen, müssen Sie das Bluetooth-Modul auf Ihrem Telefon initialisieren

/**
* 初始化蓝牙设备
*/
  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
        })
      }
    })
  },
Nach dem Login kopieren

2. Nach Bluetooth-Geräten suchen

Nachdem die Bluetooth-Initialisierung des Mobiltelefons erfolgreich war, wird nach umliegenden Bluetooth-Geräten gesucht

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

3. Bluetooth-Geräteinformationen abrufen

Nach der Suche nach Bluetooth-Geräten müssen Sie die gesuchten Bluetooth-Geräteinformationen abrufen. Das WeChat-Applet bietet zwei Methoden, um das gesuchte Bluetooth zu erhalten Geräteinformationen, nämlich:

wx.onBluetoothDeviceFound: Hören Sie auf das Ereignis, bei dem ein neues Gerät gefunden wird, und geben Sie an, dass diese Methode einmal aufgerufen wird, solange ein neues Bluetooth-Gerät vorhanden ist gefunden.

wx.getBluetoothDevices: Alle erkannten Bluetooth-Geräte abrufen, während das Bluetooth-Modul aktiv ist, einschließlich der Geräte, die bereits mit der Maschine verbunden sind

Sehen Sie sich zwei Methoden an. Einführung Wir Wir kennen ihre Unterschiede, aber welche Art von Problemen wird es verursachen, wenn wir ihre Unterschiede nicht verstehen?

Als ich zum ersten Mal die Methode wx.onBluetoothDeviceFound zum gemeinsamen Debuggen verwendete, stellte ich fest, dass alles normal war. Da beim Debuggen nur ein Gerät vorhanden war, stellte ich fest, dass das Bluetooth-Gerät erneut gescannt wurde Zu diesem Zeitpunkt konnte es nicht gefunden werden, da es sich bei dieser Methode nicht um ein neues Gerät handelt und es bereits zuvor eine Verbindung hergestellt hat, oder wenn Ihnen bei der Übertragung von Datenbefehlen über Bluetooth aus irgendeinem Grund ein Fehler unterläuft und Sie eine erneute Verbindung herstellen müssen Kann es nicht finden, wenn Sie erneut eine Verbindung zum aktuellen Gerät herstellen, aus demselben Grund, da das aktuelle Gerät kein neues Gerät für diese Methode ist

Also habe ich die Methode wx.getBluetoothDevices verwendet

/**
  * 获取搜索到的设备信息
 */
  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("搜索蓝牙设备失败")
      }
    })
  },
Nach dem Login kopieren

4. Verbinden Sie das Bluetooth-Gerät

Nachdem Sie Bluetooth im vorherigen Schritt gefunden haben, stellen Sie die Bluetooth-Verbindung über die ID des Bluetooth-Geräts her

/**
  * 获取到设备之后连接蓝牙设备
 */
  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
      }
    })
  },
Nach dem Login kopieren

5. Service-UUID abrufen

Nachdem Sie eine Verbindung zum erforderlichen Bluetooth-Gerät hergestellt haben, rufen Sie die Service-UUID ab

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
      }
    })
  },
Nach dem Login kopieren

6. Zeigen Sie das Bluetooth-Gerät nach ID an. Charakteristischer Wert

Wenn ein Bluetooth-Gerät Daten schreiben und übertragen muss, muss es bestimmte charakteristische Werte haben, also die Die durch die obigen Schritte erhaltene ID kann verwendet werden, um den aktuellen Bluetooth-Charakteristikwert des Geräts anzuzeigen

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//用来写入的值
            })
          }
        }
      }
    })
  },
Nach dem Login kopieren

7. Vom Hintergrundserver erhaltene Anweisungen

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
                      // 服务器返回一个命令  我们要把这个命令写入蓝牙设备
                    }
                   })
  }
    })
  },
Nach dem Login kopieren

8. Wird aus dem Hintergrund bereitgestellt. Die erhaltenen Anweisungen werden in das Bluetooth-Gerät geschrieben.

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("调用结束");
      }
    })
  },
Nach dem Login kopieren

Hinweis: Im Folgenden wird die Methode zum Konvertieren der beiden beschrieben Formate, die verwendet werden müssen

/**
* 将字符串转换成ArrayBufer
*/
  string2buffer(str) {
    let val = ""
    if(!str) return;
    let length = str.length;
    let index = 0;
    let array = []
    while(index < length){
      array.push(str.substring(index,index+2));
      index = index + 2;
    }
    val = array.join(",");
    // 将16进制转化为ArrayBuffer
    return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) {
      return parseInt(h, 16)
    })).buffer
  },
 
  /**
   * 将ArrayBuffer转换成字符串
   */
  ab2hex(buffer) {
    var hexArr = Array.prototype.map.call(
      new Uint8Array(buffer),
      function (bit) {
        return (&#39;00&#39; + bit.toString(16)).slice(-2)
      }
    )
    return hexArr.join(&#39;&#39;);
  },
Nach dem Login kopieren

Hinweis: Das Obige ist eine Bluetooth-Verbindung Der gesamte Prozess, aber wir werden in der tatsächlichen Verwendung definitiv nicht so reibungslos sein, und die Geräte, die Befehle über Bluetooth senden, verfügen über eine Funktion, Das heißt, nachdem jemand eine Verbindung zum aktuellen Bluetooth-Gerät hergestellt hat, können andere Personen nicht nach diesem Bluetooth-Gerät suchen. Unter bestimmten Umständen muss der Code die Bluetooth-Verbindung aktiv trennen und das Gerät für andere Benutzer freigeben Darüber hinaus kann es beim Schreiben von Anweisungen auf das Bluetooth-Gerät leicht zu Problemen kommen, sodass ein Rückruf mehrmals eingegeben werden muss. Erfolg garantiert!

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird. .

Empfohlene verwandte Video-Tutorials:

Entwicklungsdokument für das WeChat Mini-Programm

Umfassendes und detailliertes Analyse-Video-Tutorial für das WeChat Mini-Programm

WeChat Mini-Programmentwicklung CMS-System-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie implementiert man eine Bluetooth-Verbindung im WeChat-Applet? (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!