Heim >WeChat-Applet >Mini-Programmentwicklung >Bluetooth-Verbindung im WeChat-Applet

Bluetooth-Verbindung im WeChat-Applet

不言
不言Original
2018-06-22 16:33:322402Durchsuche

In diesem Artikel werden hauptsächlich die relevanten Informationen zur Bluetooth-Verbindung des WeChat-Applets vorgestellt. Ich hoffe, dass jeder, der die Entwicklungsmethode des Bluetooth-Applets beherrscht, darauf zugreifen kann

WeChat-Applet Bluetooth-Verbindung des Programms

WeChat-Applet Bluetooth-Verbindung 2.0 Beschreibung:

1. Diese Version unterscheidet verschiedene Arten der Bluetooth-Verbindung unter ANDROID- und IOS-Systemen.

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) Nach erfolgreicher Verbindung schalten Sie das System-Bluetooth aus und setzen Sie den Bluetooth-Adapter zurück.
(8) Nachdem die Verbindung erfolgreich hergestellt wurde, schalten Sie das System-Bluetooth 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();
 }

Erklärung:

1. serviceId_2~6 ist das, was ich weiß Schreiben Sie nur eine Service-ID für das zu verbindende Bluetooth-Gerät.
2. CharacterId_write ist der charakteristische Wert der Daten, die von dem Bluetooth-Gerät geschrieben werden, von dem ich weiß, dass ich eine Verbindung herstellen möchte.
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, die tatsächliche Operation basiert auf den erhaltenen Sericeids und Characterids).
4. connectedDevice ist das Informationsobjekt des verbundenen Geräts.

Sobald die Initialisierung abgeschlossen ist, starten Sie den Aufruf von startConnect();

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

Hinweis: In diesem Absatz gibt es Kommentare, daher werde ich nicht auf Details eingehen, es ist relativ einfach.

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

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

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:

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

Anleitung:

Diese Methode ist Wird verwendet, um festzustellen, ob ein Scanvorgang ausgeführt wird.

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:

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

Anleitung:

1. Nur auf Android-Geräten Einschalten Suche 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.

auf Bluetooth-Gerät gefundener Code:

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

Anleitung:

1 Erkannte Bluetooth-Geräte werden basierend auf dem Namensattribut gefiltert.

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:

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

Anleitung:

1. Nach dem Öffnen des Verbindung Scan beenden (gepaart werden) Methode.
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;

Hinweis: Wenn die Erfassung von über Bluetooth gekoppelten Bluetooth-Geräten fehlschlägt oder die erhaltene Liste leer ist, verwenden Sie 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;
   }
  });
 }

Erläuterung:

1. Die nach dem erfolgreichen Aufruf der Methode zurückgegebenen Geräte sind ein Array mit mehreren Bluetooth-Geräten, die gekoppelt wurden durch das System.

2. Wenn die Geräteliste abgerufen wird, rufen Sie die Methode loopConnect() auf, um einen rekursiven Aufruf zum Verbinden des Bluetooth-Geräts zu starten.

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

Hinweis: Nachdem die Verbindungserstellungsmethode fehlschlägt, löscht looConnect den ersten Wert des Arrays und ruft diese Methode dann weiter auf, bis alle darin enthaltenen Geräte verbunden sind.

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

Besonderer Hinweis:

1. Für die Bluetooth-Verbindung unter Android und IOS werden in der aktuellen Version 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. Wenn das Schreiben von Daten und das Aktivieren der Benachrichtigung gleichzeitig erfolgen müssen, wird empfohlen, zuerst zu schreiben und dann die Benachrichtigung zu aktivieren. (Der Grund ist unbekannt, andernfalls tritt ein Fehler 10008 auf).

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Ein einfaches Beispiel für einen Warenkorb im WeChat-Miniprogramm

So implementieren Sie das Meituan-Menü in WeChat Miniprogramm

Über die Schritte zur WeChat-Applet-Anmeldeauthentifizierung

Das obige ist der detaillierte Inhalt vonBluetooth-Verbindung im WeChat-Applet. 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