Maison  >  Article  >  Applet WeChat  >  L'applet WeChat implémente le code pour la liaison Bluetooth

L'applet WeChat implémente le code pour la liaison Bluetooth

小云云
小云云original
2018-05-18 15:14:226268parcourir

Cet article vous présente principalement les informations pertinentes sur le lien Bluetooth de l'applet WeChat. J'espère qu'à travers cet article, vous pourrez maîtriser la méthode de développement de l'applet Bluetooth. Les amis qui en ont besoin pourront s'y référer. peut aider tout le monde.

Lien Bluetooth du mini programme WeChat

Connexion Bluetooth du mini programme WeChat 2.0 Description :

Cette version fait la distinction entre ANDROID et différentes manières. de connexion Bluetooth sous le système 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 côté Android a échoué et redémarrera automatiquement toutes les 3 000 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 arrête l'acquisition de 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('init state', this.connectedDevice.state);
  if (!this.connectedDevice.state || n == 200) {
   this.connectedDevice.state = false;
   this.connectedDevice.deviceId = '';
   this.adapterHasInit = false
  }
  this.startConnect();
 }

Description :

1. serviceId_2~6 est l'ID de service de l'appareil Bluetooth auquel je sais que je veux vous connecter. je peux juste en écrire un.
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, la connexion startConnect() est appelée ; Cela dit, c'est relativement simple.

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

getBluetoothAdapterState Code :
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: '初始化蓝牙',
   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: '请开蓝牙',
     icon: 'loading',
     duration: 2000
    })
   }
  });
 }

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.

judegIfDiscovering 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: '请开蓝牙',
      icon: 'loading',
      duration: 2000
     })
    } else {
     if (!that.connectedDevice['state']) {
      that.judegIfDiscovering(res.discovering);
     }
    }
   },
   fail: function (err) {
    console.log(err);
   }
  })
 }
 :

Explication :

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

judegIfDiscovering: function (discovering) {
  var that = this;
  if (this.isConnectinng) return;
  wx.getConnectedBluetoothDevices({
   services: [that.serviceId],
   success: function (res) {
    console.log("获取处于连接状态的设备", res);
    var devices = res['devices'];
    if (devices[0]) {
     if (that.isAndroidPlatform) {
      wx.showToast({
       title: '蓝牙连接成功',
       icon: 'success',
       duration: 2000
      });
     } else {
      that.getConnectedBluetoothDevices(256);
     }
    } else {
     if (discovering) {
      wx.showLoading({
       title: '蓝牙搜索中'
      })
     } else {
      if (that.isAndroidPlatform) {
       that.startBluetoothDevicesDiscovery();
      } else {
       that.getConnectedBluetoothDevices(267);
      }
     }
    }
   },
   fail: function (err) {
    console.log('getConnectedBluetoothDevices err 264', err);
    if (that.isAndroidPlatform) {
     that.startBluetoothDevicesDiscovery();
    } else {
     that.getConnectedBluetoothDevices(277);
    }
   }
  });
 }
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.


startBluetoothDevicesDiscovery code :

Instructions :

1. Recherchez les appareils Bluetooth à proximité uniquement sur les appareils Android. 2. Dans le rappel réussi, activez la surveillance des événements onBluetoothDeviceFound() pour découvrir de nouveaux appareils Bluetooth.

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

onBluetoothDeviceFound Code :

Description :

1 Ici, les appareils Bluetooth découverts sont traités en fonction de l'attribut de nom. .filtrer.

[mw_shl_code=javascript,true]onBluetoothDeviceFound: function () {
  var that = this;
  wx.onBluetoothDeviceFound(function (res) {
   console.log('new device list has founded');
   if (res.devices[0]) {
    var name = res.devices[0]['name'];
    if (name.indexOf('FeiZhi') != -1) {
     var deviceId = res.devices[0]['deviceId'];
     console.log(deviceId);
     that.deviceId = deviceId;
     if (!that.isConnecting) {
      that.startConnectDevices();
     }
    }
   }
  })
 }
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 :


Instructions :

1. Terminez la méthode de numérisation (être couplée) après avoir ouvert 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 selon le système de l'appareil
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: '正在连接'
  });
  that.stopBluetoothDevicesDiscovery();
  wx.createBLEConnection({
   deviceId: that.deviceId,
   success: function (res) {
    console.log('连接成功', res);
    wx.showLoading({
     title: '正在连接'
    });
    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('连接变化', res);
     that.connectedDevice.state = res.connected;
     that.connectedDevice.deviceId = res.deviceId;
     if (!res.connected) {
      that.init('200');
     }
    });
   },
   fail: function (err) {
    console.log('连接失败:', err);
    wx.hideLoading();
    if (ltype == 'loop') {
     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;
   }
  });
 }


code getConnectedBluetoothDevices :



Instructions ; : Si vous obtenez Bluetooth L'appareil Bluetooth couplé a échoué ou la liste obtenue est vide. Appelez failToGetConnected();

code failToGetConnected :

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

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.

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: '请开蓝牙',
       icon: 'loading',
       duration: 2000
      })
     } else {
      if (!that.connectedDevice['state']) {
       that.getConnectedBluetoothDevices();
      }
     }
    },
    fail: function (err) {
     console.log(err);
    }
   })
  }, 5000);
 }

Code loopConnect :


Explication : Après l'échec de la méthode de création de la connexion, looConnect supprimera la première valeur du tableau puis continuera à appeler le 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.

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


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 en 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).

Recommandations associées :

Exemple de partage de la façon dont l'applet WeChat implémente Bluetooth

Linux installe le pilote et utilise Blueman pour se connecter vers Bluetooth Introduction détaillée des écouteurs (images et texte)

Applet WeChat - Ble Bluetooth

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:
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