Maison >Applet WeChat >Développement de mini-programmes >Comment implémenter la connexion Bluetooth dans l'applet WeChat ? (exemple de code)

Comment implémenter la connexion Bluetooth dans l'applet WeChat ? (exemple de code)

青灯夜游
青灯夜游avant
2018-11-13 13:55:2411257parcourir

Comment implémenter la connexion Bluetooth dans l'applet WeChat ? Ce que cet article vous apporte, c'est de présenter la méthode (les étapes) de l'applet WeChat pour mettre en œuvre la connexion Bluetooth. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Un projet récent nécessite l'utilisation de la fonction Bluetooth du mini programme pour se connecter à des périphériques matériels afin de se transmettre des instructions de données. Au cours du processus de débogage commun, certains problèmes ont été découverts, j'ai donc pensé à les enregistrer. pour référence future !

1. Initialisez le périphérique Bluetooth

En général, lorsque vous utilisez la fonction Bluetooth, vous souhaitez absolument vous connecter à un certain périphérique Bluetooth, donc vous devez connaître le nom de l'appareil Bluetooth. , généralement vous scannez le QR code pour vous connecter, puis lorsque vous scannez le QR code de cet appareil, vous devez initialiser le module Bluetooth sur votre téléphone

/**
* 初始化蓝牙设备
*/
  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. Rechercher des appareils Bluetooth

Une fois le Bluetooth du téléphone mobile initialisé avec succès, il recherchera les appareils Bluetooth environnants

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

3. Obtenir des informations sur le périphérique Bluetooth

Après avoir recherché des appareils Bluetooth, vous devez obtenir les informations sur le périphérique Bluetooth recherché. L'applet WeChat propose deux méthodes pour. obtenir les informations sur l'appareil Bluetooth recherché , respectivement :

wx.onBluetoothDeviceFound : Écoutez l'événement de recherche d'un nouvel appareil, indiquant que cette méthode sera appelée une fois tant qu'un un nouveau périphérique Bluetooth est trouvé.

wx.getBluetoothDevices : Récupérez tous les appareils Bluetooth découverts pendant que le module Bluetooth est en vigueur, y compris les appareils déjà connectés à la machine

Examinez deux méthodes Introduction Nous connaître leurs différences, mais quel genre de problèmes cela entraînera-t-il si nous ne comprenons pas leurs différences ?

La première fois que j'ai utilisé la méthode wx.onBluetoothDeviceFound pour le débogage conjoint, j'ai trouvé que tout était normal, comme il n'y avait qu'un seul appareil pendant le débogage, j'ai constaté que lorsque j'ai ré-analysé le périphérique Bluetooth pour le deuxième. fois, il n'a pas pu être trouvé sur cet appareil, car pour cette méthode, il ne s'agit pas d'un nouvel appareil et a déjà été connecté ou lorsque vous faites une erreur lors de la transmission de commandes de données via Bluetooth pour une raison quelconque et que vous devez vous reconnecter ; Je ne peux pas le trouver lorsque vous vous reconnectez à l'appareil actuel, pour la même raison, car l'appareil actuel n'est pas un nouvel appareil pour cette méthode

Alors j'ai utilisé la méthode 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. Connectez le périphérique Bluetooth

Après avoir trouvé le Bluetooth à l'étape précédente, établissez la connexion Bluetooth via l'identifiant du périphérique Bluetooth

/**
  * 获取到设备之后连接蓝牙设备
 */
  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. Obtenez l'uuid de service

Après la connexion à l'appareil Bluetooth requis, obtenez l'uuid de service de cet appareil Bluetooth

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
      }
    })
  },

6. Vérifiez la valeur caractéristique de l'appareil Bluetooth par identifiant

Si un appareil Bluetooth doit écrire et transmettre des données, il doit avoir certaines valeurs caractéristiques, alors obtenez-le via les étapes ci-dessus L'identifiant peut afficher la valeur caractéristique de l'appareil Bluetooth actuel

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

7. Instructions obtenues à partir du serveur d'arrière-plan

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

8. Écrivez les instructions obtenues à partir du service d'arrière-plan dans l'appareil Bluetooth

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

Remarque : Voici la méthode de conversion des deux formats qui doivent être utilisés

/**
* 将字符串转换成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;);
  },

Remarque : ce qui précède concerne l'ensemble du processus de connexion Bluetooth, mais il ne sera certainement pas aussi fluide dans l'utilisation réelle, et les appareils qui envoient des commandes Bluetooth auront une fonctionnalité, c'est-à-dire qu'une fois que quelqu'un se connecte au périphérique Bluetooth actuel, d'autres ne peuvent pas rechercher ce périphérique Bluetooth. Vous devez donc prendre en compte certaines situations particulières dans lesquelles le code doit déconnecter activement la connexion Bluetooth pour libérer le appareil pour que d'autres utilisateurs puissent l'utiliser, et lors de l'écriture d'instructions sur l'appareil Bluetooth, il est facile de se tromper, vous devez donc écrire un rappel pour écrire plusieurs fois pour garantir le succès !

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun. .

Tutoriels vidéo associés recommandés :

Document de développement du programme WeChat Mini

Tutoriel vidéo d'analyse complète et approfondie du programme WeChat Mini

Tutoriel vidéo du système CMS de développement de programmes WeChat Mini

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer