Maison  >  Article  >  Applet WeChat  >  Tutoriel d'exemple de lien Bluetooth du mini programme WeChat

Tutoriel d'exemple de lien Bluetooth du mini programme WeChat

小云云
小云云original
2018-02-06 09:03:574723parcourir

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 cessera d'acquérir l'appareil connecté. Si la connexion échoue, il redémarrera automatiquement l'acquisition.
(7) Une fois la connexion réussie, désactivez 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 ce que je sais que je te veux. ne peut écrire qu’un seul serviceId pour le périphérique Bluetooth connecté.
2. CharacterId_write est la valeur caractéristique du périphérique Bluetooth auquel je sais que je veux me connecter pour écrire des données.
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 obtenu).
4.connectedDevice est l’objet d’informations sur l’appareil connecté.

Une fois l'initialisation terminée, la connexion startConnect() est appelée ; : il y a des commentaires dans ce paragraphe, donc je n'entrerai pas dans les détails.

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

Instructions :

1. pour déterminer si une 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.
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);
    }
   }
  });
 }


startBluetoothDevicesCode de découverte :


Instructions :

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


Code onBluetoothDeviceFound :

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

Instructions :

1. Les appareils Bluetooth 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.

[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();
     }
    }
   }
  })
 }
code startConnectDevices :



Instructions :

1. méthode de numérisation de connexion (être couplée). 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 :
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;
   }
  });
 }




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

failToGetConnected code :


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

Remarque :

1 Les appareils renvoyés une fois la méthode appelée avec succès 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 :

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


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

说明:looConnect在创建连接的方法连接失败后会操作删除数组的第一个值,然后继续调用该方法,直到其中所有的设备都连接过。

差点漏了:在app.js的onShow里调用init()方法。

特别说明:

1、安卓和IOS的蓝牙连接在当前版本中推荐采用不同方式。安卓设备直接使用小程序的蓝牙连接,取消系统配对。IOS设备先系统配对在打开小程序可以时效秒连接成功。

2、此版本的连接仍然有待完善,连接不会自动终止(需要的可以自己加),会无限扫描重连,直到成功。

3、链接成功后的操作如果写入数据和开启notify需要同时进行,建议先写入,后开启notify。(原因未知,否则必然出现10008错误)。

相关推荐:

微信小程序蓝牙设备代码与错误整理

微信小程序如何实现蓝牙的实例分享

微信小程序--Ble蓝牙

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