Lien Bluetooth dans l'applet WeChat

不言
Libérer: 2018-06-22 16:33:32
original
2345 Les gens l'ont consulté

Cet article présente principalement les informations pertinentes sur le lien Bluetooth de l'applet WeChat. J'espère que grâce à cet article, tout le monde pourra maîtriser la méthode de développement de l'applet Bluetooth. Les amis dans le besoin pourront se référer à

<.>Lien Bluetooth de l'applet WeChat du programme

Description de la connexion Bluetooth 2.0 de l'applet WeChat :

1. Cette version distingue différents modes de connexion Bluetooth sous les systèmes ANDROID et IOS.


2. Compatible avec les liens dans plus de situations, notamment :

(1) Si le Bluetooth de l'appareil n'est pas activé, la connexion démarre automatiquement lorsque le Bluetooth est activé.

(2) Réinitialisez automatiquement l'adaptateur Bluetooth toutes les 3 000 ms après un échec d'initialisation du Bluetooth.
(3) La numérisation de l'adaptateur Bluetooth lors de l'ouverture de l'adaptateur Bluetooth du côté Android échoue et redémarrera automatiquement toutes les 3000 ms.
(4) Le côté IOS obtient le périphérique Bluetooth connecté comme étant vide et le réacquiert automatiquement toutes les 3 000 ms.
(5) La connexion Bluetooth Android interrompt la numérisation après le début de la connexion. Si la connexion échoue, effectuez une nouvelle numérisation.
(6) Une fois que le côté IOS commence à se connecter à l'appareil, il cessera d'acquérir l'appareil connecté. Si la connexion échoue, il redémarrera automatiquement l'acquisition.
(7) Une fois la connexion réussie, éteignez le système Bluetooth et réinitialisez l'adaptateur Bluetooth.
(8) Une fois la connexion réussie, désactivez le système Bluetooth, réactivez le Bluetooth et redémarrez automatiquement la connexion.
(9) Une fois la connexion réussie, éteignez l'appareil Bluetooth cible et redémarrez automatiquement la numérisation (acquisition).
(10) Une fois la connexion réussie, réduisez l'applet (la connexion n'est pas interrompue), ouvrez l'applet et elle montrera qu'elle est connectée.
(11) Une fois la connexion réussie, arrêtez le processus d'applet, fermez la connexion et redémarrez automatiquement la numérisation (acquisition).

3. Je mettrai à jour quand je m'en souviendrai....


4. Organigramme, je peux le dessiner pour moi demain ou après-demain ou... celui qui a le temps peut m'aider à le dessiner.

Ma connexion se fait dans App.js.


Le déclencheur onLaunch dans App.js consiste à appeler la méthode init().


code d'initialisation :

init: function (n) {
  this.list = [];
  this.serviceId = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E";
  this.serviceId_2 = "00001803-0000-1000-8000-00805F9B34FB";
  this.serviceId_3 = "00001814-0000-1000-8000-00805F9B34FB";
  this.serviceId_4 = "00001802-0000-1000-8000-00805F9B34FB";
  this.serviceId_5 = "00001804-0000-1000-8000-00805F9B34FB";
  this.serviceId_6 = "00001535-1212-EFDE-1523-785FEABCD123";
  this.characterId_write = "6E400042-B5A3-F393-E0A9-E50E24DCCA9E";
  this.characterId_read = "6E400012-B5A3-F393-E0A9-E50E24DCCA9E";
  this.connectDeviceIndex = 0;
  this.isGettingConnected = false;
  this.isDiscovering = false;
  this.isConnecting = false;
  this.connectedDevice = {};
  console.log(&#39;init state&#39;, this.connectedDevice.state);
  if (!this.connectedDevice.state || n == 200) {
   this.connectedDevice.state = false;
   this.connectedDevice.deviceId = &#39;&#39;;
   this.adapterHasInit = false
  }
  this.startConnect();
 }
Copier après la connexion

Description :

1. serviceId_2~6 m'est connu. Vous ne pouvez écrire qu’un seul serviceId pour le périphérique Bluetooth que vous souhaitez connecter.

2. CharacterId_write est la valeur caractéristique des données écrites par le périphérique Bluetooth auquel je sais que je veux me connecter.
3. CharacterId_read est la valeur caractéristique du périphérique Bluetooth que je sais que je veux connecter pour lire les données.
(Les trois ci-dessus sont à titre de comparaison, l'opération réelle est basée sur le sericeid et le caractérisid obtenus).
4.connectedDevice est l’objet d’informations sur l’appareil connecté.

Une fois l'initialisation terminée, commencez à appeler startConnect();

code startConnect :

startConnect: function () {
  var that = this;
  if (that.connectedDevice.state) return;
  that.connectedDevice.deviceId = "";
  that.connectedDevice.state = false;
  // 如果适配器已经初始化不在调用初始化(重复初始化会报错)
  if (this.adapterHasInit == undefined || this.adapterHasInit) return;
  wx.showLoading({
   title: &#39;初始化蓝牙&#39;,
   duration: 2000
  });
  // 开启蓝牙适配器状态监听
  this.listenAdapterStateChange();
  // 初始化蓝牙适配器状态(必须步骤,否则无法进行后续的任何操作)
  wx.openBluetoothAdapter({
   success: function (res) {
    console.log("初始化蓝牙适配器成功");
    that.getBluetoothAdapterState();
    that.adapterHasInit = true;
   },
   fail: function (err) {
    console.log(err);
    wx.showLoading({
     title: &#39;请开蓝牙&#39;,
     icon: &#39;loading&#39;,
     duration: 2000
    })
   }
  });
 }
Copier après la connexion

Explication : Il y a des commentaires dans cette section, donc je ne rentrerai pas dans les détails, c'est relativement simple.

Appelez la méthode getBluetoothAdapterState() après avoir initialisé avec succès l'état de l'adaptateur Bluetooth.

getBluetoothAdapterState Code :

getBluetoothAdapterState: function () {
  var that = this;
  wx.getBluetoothAdapterState({
   success: function (res) {
    console.log(res);
    var available = res.available;
    that.isDiscovering = res.discovering;
    if (!available) {
     wx.showLoading({
      title: &#39;请开蓝牙&#39;,
      icon: &#39;loading&#39;,
      duration: 2000
     })
    } else {
     if (!that.connectedDevice[&#39;state&#39;]) {
      that.judegIfDiscovering(res.discovering);
     }
    }
   },
   fail: function (err) {
    console.log(err);
   }
  })
 }
Copier après la connexion

Description : Cette méthode est utilisée pour obtenir l'état actuel du Bluetooth.

La méthode judegIfDiscovering est appelée lorsque Bluetooth est détecté comme étant disponible.

code judegIfDiscovering :

judegIfDiscovering: function (discovering) {
  var that = this;
  if (this.isConnectinng) return;
  wx.getConnectedBluetoothDevices({
   services: [that.serviceId],
   success: function (res) {
    console.log("获取处于连接状态的设备", res);
    var devices = res[&#39;devices&#39;];
    if (devices[0]) {
     if (that.isAndroidPlatform) {
      wx.showToast({
       title: &#39;蓝牙连接成功&#39;,
       icon: &#39;success&#39;,
       duration: 2000
      });
     } else {
      that.getConnectedBluetoothDevices(256);
     }
    } else {
     if (discovering) {
      wx.showLoading({
       title: &#39;蓝牙搜索中&#39;
      })
     } else {
      if (that.isAndroidPlatform) {
       that.startBluetoothDevicesDiscovery();
      } else {
       that.getConnectedBluetoothDevices(267);
      }
     }
    }
   },
   fail: function (err) {
    console.log(&#39;getConnectedBluetoothDevices err 264&#39;, err);
    if (that.isAndroidPlatform) {
     that.startBluetoothDevicesDiscovery();
    } else {
     that.getConnectedBluetoothDevices(277);
    }
   }
  });
 }
Copier après la connexion

Description :


1. La méthode est utilisée pour déterminer si l'analyse est en cours.


2. isAndroidPlatform est obtenu via getSystemInfo de l'applet pour déterminer s'il s'agit d'un appareil Android ou d'un appareil IOS.

S'il s'agit d'un appareil Android, appelez startBluetoothDevicesDiscovery() pour lancer la numérisation. S'il s'agit d'un appareil IOS, appelez getConnectedBluetoothDevices() pour commencer à coupler les appareils Bluetooth.

startBluetoothDevicesCode de découverte :

startBluetoothDevicesDiscovery: function () {
  var that = this;
  if (!this.isAndroidPlatform) return;
  if (!this.connectedDevice[&#39;state&#39;]) {
   wx.getBluetoothAdapterState({
    success: function (res) {
     console.log(res);
     var available = res.available;
     that.isDiscovering = res.discovering;
     if (!available) {
      wx.showLoading({
       title: &#39;请开蓝牙&#39;,
       icon: &#39;loading&#39;,
       duration: 2000
      })
     } else {
      if (res.discovering) {
       wx.showLoading({
        title: &#39;蓝牙搜索中&#39;
       })
      } else {
       wx.startBluetoothDevicesDiscovery({
        services: [],
        allowDuplicatesKey: true,
        success: function (res) {
         that.onBluetoothDeviceFound();
         wx.showLoading({
          title: &#39;蓝牙搜索中&#39;
         })
        },
        fail: function (err) {
         if (err.isDiscovering) {
          wx.showLoading({
           title: &#39;蓝牙搜索中&#39;
          })
         } else {
          that.startDiscoveryTimer = setTimeout(function () {
           if (!that.connectedDevice.state) {
            that.startBluetoothDevicesDiscovery();
           }
          }, 5000)
         }
        }
       });
      }
     }
    },
    fail: function (err) {
     console.log(err);
    }
   })
  }
Copier après la connexion

Instructions :

1. Uniquement sur Android Activer. rechercher les appareils Bluetooth à proximité sur votre appareil.

2. Dans le rappel réussi, activez la surveillance des événements onBluetoothDeviceFound() pour découvrir de nouveaux appareils Bluetooth.

onBluetoothDeviceCode trouvé :

[mw_shl_code=javascript,true]onBluetoothDeviceFound: function () {
  var that = this;
  wx.onBluetoothDeviceFound(function (res) {
   console.log(&#39;new device list has founded&#39;);
   if (res.devices[0]) {
    var name = res.devices[0][&#39;name&#39;];
    if (name.indexOf(&#39;FeiZhi&#39;) != -1) {
     var deviceId = res.devices[0][&#39;deviceId&#39;];
     console.log(deviceId);
     that.deviceId = deviceId;
     if (!that.isConnecting) {
      that.startConnectDevices();
     }
    }
   }
  })
 }
Copier après la connexion

Description :


1. Les appareils Bluetooth découverts sont filtrés en fonction de l'attribut de nom.


2. Lorsque l'appareil contenant l'attribut name de l'appareil qui doit être connecté est filtré, le deviceId est obtenu et la méthode startConnectDevices() est appelée pour démarrer la connexion.

code startConnectDevices :

startConnectDevices: function (ltype, array) {
  var that = this;
  clearTimeout(this.getConnectedTimer);
  clearTimeout(this.startDiscoveryTimer);
  this.getConnectedTimer = null;
  this.startDiscoveryTimer = null;
  this.isConnectinng = true;
  wx.showLoading({
   title: &#39;正在连接&#39;
  });
  that.stopBluetoothDevicesDiscovery();
  wx.createBLEConnection({
   deviceId: that.deviceId,
   success: function (res) {
    console.log(&#39;连接成功&#39;, res);
    wx.showLoading({
     title: &#39;正在连接&#39;
    });
    that.connectedDevice.state = true;
    that.connectedDevice.deviceId = that.deviceId;
    if (res.errCode == 0) {
     setTimeout(function () {
      that.getService(that.deviceId);
     }, 5000)
    }
    wx.onBLEConnectionStateChange(function (res) {
     console.log(&#39;连接变化&#39;, res);
     that.connectedDevice.state = res.connected;
     that.connectedDevice.deviceId = res.deviceId;
     if (!res.connected) {
      that.init(&#39;200&#39;);
     }
    });
   },
   fail: function (err) {
    console.log(&#39;连接失败:&#39;, err);
    wx.hideLoading();
    if (ltype == &#39;loop&#39;) {
     array = array.splice(0, 1);
     console.log(array);
     that.loopConnect(array);
    } else {
     if (that.isAndroidPlatform) {
      that.startBluetoothDevicesDiscovery();
     } else {
      that.getConnectedBluetoothDevices(488);
     }
    }
   },
   complete: function () {
    that.isConnectinng = false;
   }
  });
 }
Copier après la connexion

Instructions :


1. sur la méthode Terminer l'analyse (être couplée) après la connexion.

2. Créez une connexion Bluetooth à faible consommation basée sur l'ID de l'appareil. Si la connexion réussit, poursuivez les opérations de lecture et d'écriture suivantes.
3. Si la connexion échoue, appelez startBluetoothDevicesDiscovery() ou getConnectedBluetoothDevices() respectivement en fonction du système de l'appareil

code getConnectedBluetoothDevices :

getConnectedBluetoothDevices: function (n) {
  var that = this;
  that.isGettingConnected = true;
  wx.showLoading({
   title: &#39;蓝牙搜索中&#39;
  });
  wx.getConnectedBluetoothDevices({
   services: [that.serviceId],
   success: function (res) {
    console.log("获取处于连接状态的设备", res);
    var devices = res[&#39;devices&#39;],
     flag = false,
     index = 0,
     conDevList = [];
    devices.forEach(function (value, index, array) {
     if (value[&#39;name&#39;].indexOf(&#39;FeiZhi&#39;) != -1) {
      // 如果存在包含FeiZhi字段的设备
      flag = true;
      index += 1;
      conDevList.push(value[&#39;deviceId&#39;]);
      that.deviceId = value[&#39;deviceId&#39;];
     }
    });
    if (flag) {
     that.connectDeviceIndex = 0;
     that.loopConnect(conDevList);
    } else {
     that.failToGetConnected();
    }
   },
   fail: function (err) {
    that.failToGetConnected();
   },
   complete: function () {
    that.isGettingConnected = false;
   }
  });
 }
Copier après la connexion

Remarque : Si l'acquisition des appareils Bluetooth couplés Bluetooth échoue ou si la liste obtenue est vide, utilisez failToGetConnected();

failToGetConnected code :

failToGetConnected: function () {
  var that = this;
  if (!that.getConnectedTimer) {
   clearTimeout(that.getConnectedTimer);
   that.getConnectedTimer = null;
  }
  that.getConnectedTimer = setTimeout(function () {
   wx.getBluetoothAdapterState({
    success: function (res) {
     console.log(res);
     var available = res.available;
     if (!available) {
      wx.showLoading({
       title: &#39;请开蓝牙&#39;,
       icon: &#39;loading&#39;,
       duration: 2000
      })
     } else {
      if (!that.connectedDevice[&#39;state&#39;]) {
       that.getConnectedBluetoothDevices();
      }
     }
    },
    fail: function (err) {
     console.log(err);
    }
   })
  }, 5000);
 }
Copier après la connexion

Instructions :


1 Les appareils renvoyés après l'appel réussi de la méthode sont un tableau contenant plusieurs appareils Bluetooth. qui ont été couplés par le système.

2. Si la liste des appareils est obtenue, appelez la méthode loopConnect() pour démarrer un appel récursif pour connecter l'appareil Bluetooth.

code loopConnect :

loopConnect: function (array) {
  var that = this;
  var listLen = array.length;
  if (array[0]) {
   that.deviceId = array[0];
   if (!that.isConnecting) {
    that.startConnectDevices(&#39;loop&#39;, array);
   }
  } else {
   console.log(&#39;已配对的设备小程序蓝牙连接失败&#39;);
   if (!that.isAndroidPlatform) {
    that.getConnectedBluetoothDevices(431);
   }
  }
 }
Copier après la connexion

Remarque : après l'échec de la méthode de création de connexion, looConnect supprimera la première valeur du tableau, puis continuera à appeler cette méthode jusqu'à ce que tous les appareils qu'il contient soient connectés.

Presque manqué : appelez la méthode init() dans onShow de app.js.

Remarque spéciale :

1. Différentes méthodes sont recommandées pour la connexion Bluetooth sur Android et IOS dans la version actuelle. L'appareil Android utilise directement la connexion Bluetooth de l'applet pour annuler l'appairage du système. Les appareils IOS peuvent être connectés avec succès quelques secondes après le couplage du système et l'ouverture du mini programme.

2. La connexion de cette version doit encore être améliorée. La connexion ne sera pas automatiquement interrompue (vous pouvez l'ajouter vous-même si nécessaire), et sera analysée et reconnectée à l'infini jusqu'à ce qu'elle réussisse.

3. Opérations une fois le lien réussi. Si l'écriture des données et l'activation de la notification doivent être effectuées en même temps, il est recommandé d'écrire d'abord, puis d'activer la notification. (La raison est inconnue, sinon une erreur 10008 se produira).

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. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Un exemple simple de panier d'achat dans le mini programme WeChat

Comment implémenter le menu Meituan dans WeChat mini programme

À propos des étapes d'authentification de connexion à l'applet WeChat

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal