Heim  >  Artikel  >  WeChat-Applet  >  Beispiel-Tutorial zum WeChat Mini-Programm für eine Bluetooth-Verbindung

Beispiel-Tutorial zum WeChat Mini-Programm für eine Bluetooth-Verbindung

小云云
小云云Original
2018-02-06 09:03:574723Durchsuche

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, wenn die Bluetooth-Initialisierung fehlgeschlagen ist.
(3) Das Scannen des Bluetooth-Adapters beim Öffnen des Bluetooth-Adapters auf der Android-Seite schlägt fehl 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();
 }

Beschreibung:

1. serviceId_2~6 ist das, was ich von Ihnen will kann nur eine Service-ID für das verbundene Bluetooth-Gerät schreiben.
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.

Nachdem init abgeschlossen ist, wird die Verbindung startConnect() aufgerufen: Dieser Absatz enthält Kommentare, daher werde ich nicht auf Details eingehen.

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

Anleitung:

1 um festzustellen, ob ein Scanvorgang stattfindet.

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


startBluetoothDevicesDiscovery-Code:


Anleitung:

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


onBluetoothDeviceGefundener 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. Dies ist das Discovered Bluetooth-Geräte werden anhand des Namensattributs 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.

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



Anweisungen:

1. Beenden Sie den Vorgang Verbindungsscan-Methode (gepaart werden). 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();

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:



Hinweis:

1 Bei den nach dem erfolgreichen Aufruf der Methode zurückgegebenen Geräten handelt es sich um ein Array mit mehreren Bluetooth-Geräten, die von der gekoppelt wurden 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.

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:

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蓝牙

Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial zum WeChat Mini-Programm für eine 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