Heim  >  Artikel  >  WeChat-Applet  >  Das WeChat-Applet implementiert Code für die Bluetooth-Verbindung

Das WeChat-Applet implementiert Code für die Bluetooth-Verbindung

小云云
小云云Original
2018-05-18 15:14:226268Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Informationen zur Bluetooth-Verbindung des WeChat-Applets vor. Ich hoffe, dass Sie durch diesen Artikel die Entwicklungsmethode des Bluetooth-Applets beherrschen können kann jedem helfen.

WeChat Mini-Programm Bluetooth-Verbindung

WeChat Mini-Programm Bluetooth-Verbindung 2.0 Beschreibung:

1. Diese Version unterscheidet zwischen ANDROID und verschiedenen Möglichkeiten der Bluetooth-Verbindung unter IOS-System.

2. Kompatibel mit Links in weiteren Situationen, einschließlich:

(1) Wenn das Bluetooth des Geräts nicht aktiviert ist, wird die Verbindung automatisch gestartet, wenn Bluetooth aktiviert wird.
(2) Initialisieren Sie den Bluetooth-Adapter alle 3000 ms automatisch neu, nachdem die Bluetooth-Initialisierung fehlgeschlagen ist.
(3) Das Scannen des Bluetooth-Adapters auf der Android-Seite ist fehlgeschlagen und wird alle 3000 ms automatisch neu gestartet.
(4) Die IOS-Seite erhält das verbundene Bluetooth-Gerät als leer und erfasst es automatisch alle 3000 ms erneut.
(5) Die Android-Bluetooth-Verbindung unterbricht den Scanvorgang, nachdem die Verbindung hergestellt wurde. Wenn die Verbindung fehlschlägt, scannen Sie erneut.
(6) Nachdem die IOS-Seite mit der Verbindung zum Gerät begonnen hat, stoppt sie die Erfassung des verbundenen Geräts. Wenn die Verbindung fehlschlägt, wird die Erfassung automatisch neu gestartet.
(7) Schalten Sie nach erfolgreicher Verbindung das System-Bluetooth aus und setzen Sie den Bluetooth-Adapter zurück.
(8) Nachdem die Verbindung erfolgreich hergestellt wurde, schalten Sie das Bluetooth des Systems aus, schalten Sie Bluetooth wieder ein und starten Sie die Verbindung automatisch neu.
(9) Nach erfolgreicher Verbindung schalten Sie das Ziel-Bluetooth-Gerät aus und starten den Scanvorgang (Erfassung) automatisch neu.
(10) Nachdem die Verbindung erfolgreich hergestellt wurde, minimieren Sie das Applet (die Verbindung wird nicht unterbrochen), öffnen Sie das Applet und es wird angezeigt, dass es verbunden ist.
(11) Nachdem die Verbindung erfolgreich hergestellt wurde, beenden Sie den Applet-Prozess, schließen Sie die Verbindung und starten Sie den Scanvorgang (Erfassung) automatisch neu.

3. Ich werde es aktualisieren, wenn ich mich daran erinnere....

4. Flussdiagramm, ich kann es morgen oder übermorgen zeichnen oder ... wer Zeit hat, kann mir beim Zeichnen helfen.

Meine Verbindung wird in App.js hergestellt.

Der onLaunch-Trigger in App.js besteht darin, die init()-Methode aufzurufen.

Init-Code:

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

Beschreibung:

1. serviceId_2~6 ist die Service-ID des Bluetooth-Geräts, mit dem ich eine Verbindung herstellen möchte kann einfach eins schreiben.
2. CharacterId_write ist der charakteristische Wert des Bluetooth-Geräts, von dem ich weiß, dass ich eine Verbindung herstellen möchte, um Daten darauf zu schreiben.
3. CharacterId_read ist der charakteristische Wert des Bluetooth-Geräts, von dem ich weiß, dass ich eine Verbindung herstellen möchte, um Daten zu lesen.
(Die oben genannten drei dienen zum Vergleich, der tatsächliche Vorgang basiert auf den erhaltenen Sericeids und Characterids).
4. connectedDevice ist das Informationsobjekt des verbundenen Geräts.

Nachdem init abgeschlossen ist, wird die Verbindung startConnect() aufgerufen. Allerdings ist es relativ einfach.

Rufen Sie die Methode getBluetoothAdapterState() auf, nachdem Sie den Status des Bluetooth-Adapters erfolgreich initialisiert haben.

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

Beschreibung: Diese Methode wird verwendet, um den aktuellen Bluetooth-Status abzurufen.

Die judegIfDiscovering-Methode wird aufgerufen, wenn erkannt wird, dass Bluetooth verfügbar ist.

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

Erläuterung:

1. Mit dieser Methode wird ermittelt, ob gerade gescannt wird.

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 wird über getSystemInfo des Applets abgerufen, um festzustellen, ob es sich um ein Android-Gerät oder ein IOS-Gerät handelt.


Wenn es sich um ein Android-Gerät handelt, rufen Sie startBluetoothDevicesDiscovery() auf, um den Scanvorgang zu starten. Wenn es sich um ein IOS-Gerät handelt, rufen Sie getConnectedBluetoothDevices() auf, um gekoppelte Bluetooth-Geräte abzurufen.


startBluetoothDevicesDiscovery-Code:

Anleitung:

1. Suchen Sie nur auf Android-Geräten nach Bluetooth-Geräten in der Nähe. 2. Aktivieren Sie im erfolgreichen Rückruf die Ereignisüberwachung onBluetoothDeviceFound() zum Erkennen neuer Bluetooth-Geräte.

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:

Beschreibung:

1 Hier werden die erkannten Bluetooth-Geräte anhand des Namensattributs verarbeitet . filtern.

[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. Wenn das Gerät, das das Namensattribut des zu verbindenden Geräts enthält, herausgefiltert wird, wird die Geräte-ID abgerufen und die Methode startConnectDevices() aufgerufen, um die Verbindung zu starten.


startConnectDevices-Code:


Anweisungen:

1. Beenden Sie die Scan-Methode (gepaart werden), nachdem Sie die Verbindung geöffnet haben. 2. Erstellen Sie eine Bluetooth-Verbindung mit geringem Stromverbrauch basierend auf der Geräte-ID. Wenn die Verbindung erfolgreich ist, fahren Sie mit den nachfolgenden Lese- und Schreibvorgängen fort.

3. Wenn die Verbindung fehlschlägt, rufen Sie je nach Gerätesystem startBluetoothDevicesDiscovery() bzw. getConnectedBluetoothDevices() auf : Wenn Sie Bluetooth erhalten, ist das gekoppelte Bluetooth-Gerät fehlgeschlagen oder die erhaltene Liste ist leer. Rufen Sie failToGetConnected();
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;
   }
  });
 }


failToGetConnected-Code auf:



Anweisungen:

1. Bei den nach erfolgreichem Aufruf der Methode zurückgegebenen Geräten handelt es sich um ein Array mit mehreren Bluetooth-Geräten, die vom System gekoppelt wurden. 2. Wenn die Geräteliste abgerufen wird, rufen Sie die Methode loopConnect() auf, um den rekursiven Aufruf des Bluetooth-Geräts zu starten.

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

loopConnect-Code:

Erklärung: looConnect löscht den ersten Wert des Arrays, nachdem die Methode zum Erstellen der Verbindung fehlschlägt, und ruft dann weiter auf Methode, bis alle darin enthaltenen Geräte verbunden sind.

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

Fast verpasst: Rufen Sie die init()-Methode in onShow von app.js auf.

Besondere Hinweise:

1. In der aktuellen Version werden für die Bluetooth-Verbindung unter Android und IOS unterschiedliche Methoden empfohlen. Das Android-Gerät nutzt direkt die Bluetooth-Verbindung des Applets, um die Systemkopplung abzubrechen. IOS-Geräte können innerhalb von Sekunden nach der Systemkopplung und dem Öffnen des Miniprogramms erfolgreich verbunden werden.

2. Die Verbindung dieser Version muss noch verbessert werden. Die Verbindung wird nicht automatisch beendet (Sie können sie bei Bedarf selbst hinzufügen) und wird solange gescannt und wiederhergestellt, bis sie erfolgreich ist.

3. Vorgänge nach erfolgreicher Verknüpfung müssen gleichzeitig mit dem Schreiben von Daten und dem Aktivieren der Benachrichtigung erfolgen. (Der Grund ist unbekannt, andernfalls tritt ein Fehler 10008 auf).

Verwandte Empfehlungen:

Beispielfreigabe, wie das WeChat-Applet Bluetooth implementiert

Linux installiert den Treiber und verwendet Blueman für die Verbindung zu Bluetooth Detaillierte Einführung in Kopfhörer (Bilder und Text)

WeChat-Applet – Ble Bluetooth

Das obige ist der detaillierte Inhalt vonDas WeChat-Applet implementiert Code für die Bluetooth-Verbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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