Cet article présente principalement les informations pertinentes sur le lien Bluetooth de l'applet WeChat. J'espère que grâce à cet article, tout le monde pourra maîtriser la méthode de développement de l'applet Bluetooth. Les amis dans le besoin pourront se référer à
<.>Lien Bluetooth de l'applet WeChat du programme
Description de la connexion Bluetooth 2.0 de l'applet WeChat : 1. Cette version distingue différents modes de connexion Bluetooth sous les systèmes ANDROID et IOS. (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 lors de l'ouverture de l'adaptateur Bluetooth du côté Android échoue et redémarrera automatiquement toutes les 3000 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, é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).
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(); }
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é.
code startConnect :
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 }) } }); }
Explication : Il y a des commentaires dans cette section, donc je ne rentrerai pas dans les détails, c'est relativement simple. Appelez la méthode getBluetoothAdapterState() après avoir initialisé avec succès l'état de l'adaptateur Bluetooth.
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); } }) }
code judegIfDiscovering :
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 :
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); } }) }
onBluetoothDeviceCode trouvé :
[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 :
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; } }); }
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 :
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; } }); }
failToGetConnected 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); }
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 :
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); } } }
Remarque : après l'échec de la méthode de création de connexion, looConnect supprimera la première valeur du tableau, puis continuera à appeler cette 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.
Remarque spéciale :
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 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).
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Un exemple simple de panier d'achat dans le mini programme WeChat
Comment implémenter le menu Meituan dans WeChat mini programme
À propos des étapes d'authentification de connexion à l'applet WeChat
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!