Comment implémenter la connexion Bluetooth dans l'applet WeChat ? Ce que cet article vous apporte, c'est de présenter la méthode (les étapes) de l'applet WeChat pour mettre en œuvre la connexion Bluetooth. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Un projet récent nécessite l'utilisation de la fonction Bluetooth du mini programme pour se connecter à des périphériques matériels afin de se transmettre des instructions de données. Au cours du processus de débogage commun, certains problèmes ont été découverts, j'ai donc pensé à les enregistrer. pour référence future !
1. Initialisez le périphérique Bluetooth
En général, lorsque vous utilisez la fonction Bluetooth, vous souhaitez absolument vous connecter à un certain périphérique Bluetooth, donc vous devez connaître le nom de l'appareil Bluetooth. , généralement vous scannez le QR code pour vous connecter, puis lorsque vous scannez le QR code de cet appareil, vous devez initialiser le module Bluetooth sur votre téléphone
/** * 初始化蓝牙设备 */ initBlue:function(){ var that = this; wx.openBluetoothAdapter({//调用微信小程序api 打开蓝牙适配器接口 success: function (res) { // console.log(res) wx.showToast({ title: '初始化成功', icon: 'success', duration: 800 }) that.findBlue();//2.0 }, fail: function (res) {//如果手机上的蓝牙没有打开,可以提醒用户 wx.showToast({ title: '请开启蓝牙', icon: 'fails', duration: 1000 }) } }) },
2. Rechercher des appareils Bluetooth
Une fois le Bluetooth du téléphone mobile initialisé avec succès, il recherchera les appareils Bluetooth environnants
/** *开始搜索蓝牙设备 */ findBlue(){ var that = this wx.startBluetoothDevicesDiscovery({ allowDuplicatesKey: false, interval: 0, success: function (res) { wx.showLoading({ title: '正在搜索设备', }) that.getBlue()//3.0 } }) },
3. Obtenir des informations sur le périphérique Bluetooth
Après avoir recherché des appareils Bluetooth, vous devez obtenir les informations sur le périphérique Bluetooth recherché. L'applet WeChat propose deux méthodes pour. obtenir les informations sur l'appareil Bluetooth recherché , respectivement :
wx.onBluetoothDeviceFound : Écoutez l'événement de recherche d'un nouvel appareil, indiquant que cette méthode sera appelée une fois tant qu'un un nouveau périphérique Bluetooth est trouvé.
wx.getBluetoothDevices : Récupérez tous les appareils Bluetooth découverts pendant que le module Bluetooth est en vigueur, y compris les appareils déjà connectés à la machine
Examinez deux méthodes Introduction Nous connaître leurs différences, mais quel genre de problèmes cela entraînera-t-il si nous ne comprenons pas leurs différences ?
La première fois que j'ai utilisé la méthode wx.onBluetoothDeviceFound pour le débogage conjoint, j'ai trouvé que tout était normal, comme il n'y avait qu'un seul appareil pendant le débogage, j'ai constaté que lorsque j'ai ré-analysé le périphérique Bluetooth pour le deuxième. fois, il n'a pas pu être trouvé sur cet appareil, car pour cette méthode, il ne s'agit pas d'un nouvel appareil et a déjà été connecté ou lorsque vous faites une erreur lors de la transmission de commandes de données via Bluetooth pour une raison quelconque et que vous devez vous reconnecter ; Je ne peux pas le trouver lorsque vous vous reconnectez à l'appareil actuel, pour la même raison, car l'appareil actuel n'est pas un nouvel appareil pour cette méthode
Alors j'ai utilisé la méthode wx.getBluetoothDevices
/** * 获取搜索到的设备信息 */ getBlue(){ var that = this wx.getBluetoothDevices({ success: function(res) { wx.hideLoading(); for (var i = 0; i < res.devices.length; i++){ /*that.data.inputValue:表示的是需要连接的蓝牙设备ID,简单点来说就是我想要连接这个蓝牙设备,所以我去遍历我搜索到的蓝牙设备中是否有这个ID*/ if (res.devices[i].name == that.data.inputValue || res.devices[i].localName == that.data.inputValue){ that.setData({ deviceId: res.devices[i].deviceId, consoleLog: "设备:" + res.devices[i].deviceId, }) that.connetBlue(res.devices[i].deviceId);//4.0 return; } } }, fail: function(){ console.log("搜索蓝牙设备失败") } }) },
4. Connectez le périphérique Bluetooth
Après avoir trouvé le Bluetooth à l'étape précédente, établissez la connexion Bluetooth via l'identifiant du périphérique Bluetooth
/** * 获取到设备之后连接蓝牙设备 */ connetBlue(deviceId){ var that = this; wx.createBLEConnection({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: deviceId,//设备id success: function (res) { wx.showToast({ title: '连接成功', icon: 'fails', duration: 800 }) console.log("连接蓝牙成功!") wx.stopBluetoothDevicesDiscovery({ success: function (res) { console.log('连接蓝牙成功之后关闭蓝牙搜索'); } }) that.getServiceId()//5.0 } }) },
5. Obtenez l'uuid de service
Après la connexion à l'appareil Bluetooth requis, obtenez l'uuid de service de cet appareil Bluetooth
getServiceId(){ var that = this wx.getBLEDeviceServices({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.data.deviceId, success: function (res) { var model = res.services[0] that.setData({ services: model.uuid }) that.getCharacteId()//6.0 } }) },
6. Vérifiez la valeur caractéristique de l'appareil Bluetooth par identifiant
Si un appareil Bluetooth doit écrire et transmettre des données, il doit avoir certaines valeurs caractéristiques, alors obtenez-le via les étapes ci-dessus L'identifiant peut afficher la valeur caractéristique de l'appareil Bluetooth actuel
getCharacteId(){ var that = this wx.getBLEDeviceCharacteristics({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.services, success: function (res) { for (var i = 0; i < res.characteristics.length; i++) {//2个值 var model = res.characteristics[i] if (model.properties.notify == true) { that.setData({ notifyId: model.uuid//监听的值 }) that.startNotice(model.uuid)//7.0 } if (model.properties.write == true){ that.setData({ writeId: model.uuid//用来写入的值 }) } } } }) },
7. Instructions obtenues à partir du serveur d'arrière-plan
startNotice(uuid){ var that = this; wx.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.services, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取 characteristicId: uuid, //第一步 开启监听 notityid 第二步发送指令 write success: function (res) { // 设备返回的方法 wx.onBLECharacteristicValueChange(function (res) { // 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以需要通过一个方法转换成字符串 var nonceId = that.ab2hex(res.value) //拿到这个值后,肯定要去后台请求服务(当前步骤根据当前需求自己书写),获取下一步操作指令写入到蓝牙设备上去 wx.request({ method: "POST", data: { xx:nonceId }, url: url, success: (res) => { //res.data.data.ciphertext:我这边服务返回来的是16进制的字符串,蓝牙设备是接收不到当前格式的数据的,需要转换成ArrayBuffer that.sendMy(that.string2buffer(res.data.data.ciphertext))//8.0 // 服务器返回一个命令 我们要把这个命令写入蓝牙设备 } }) } }) },
8. Écrivez les instructions obtenues à partir du service d'arrière-plan dans l'appareil Bluetooth
sendMy(buffer){ var that = this wx.writeBLECharacteristicValue({ // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.services, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取 characteristicId: that.data.writeId,//第二步写入的特征值 // 这里的value是ArrayBuffer类型 value: buffer, success: function (res) { console.log("写入成功") }, fail: function () { console.log('写入失败') }, complete:function(){ console.log("调用结束"); } }) },
Remarque : Voici la méthode de conversion des deux formats qui doivent être utilisés
/** * 将字符串转换成ArrayBufer */ string2buffer(str) { let val = "" if(!str) return; let length = str.length; let index = 0; let array = [] while(index < length){ array.push(str.substring(index,index+2)); index = index + 2; } val = array.join(","); // 将16进制转化为ArrayBuffer return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })).buffer }, /** * 将ArrayBuffer转换成字符串 */ ab2hex(buffer) { var hexArr = Array.prototype.map.call( new Uint8Array(buffer), function (bit) { return ('00' + bit.toString(16)).slice(-2) } ) return hexArr.join(''); },
Remarque : ce qui précède concerne l'ensemble du processus de connexion Bluetooth, mais il ne sera certainement pas aussi fluide dans l'utilisation réelle, et les appareils qui envoient des commandes Bluetooth auront une fonctionnalité, c'est-à-dire qu'une fois que quelqu'un se connecte au périphérique Bluetooth actuel, d'autres ne peuvent pas rechercher ce périphérique Bluetooth. Vous devez donc prendre en compte certaines situations particulières dans lesquelles le code doit déconnecter activement la connexion Bluetooth pour libérer le appareil pour que d'autres utilisateurs puissent l'utiliser, et lors de l'écriture d'instructions sur l'appareil Bluetooth, il est facile de se tromper, vous devez donc écrire un rappel pour écrire plusieurs fois pour garantir le succès !
Résumé : 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. .
Tutoriels vidéo associés recommandés :
Document de développement du programme WeChat Mini
Tutoriel vidéo d'analyse complète et approfondie du programme WeChat Mini
Tutoriel vidéo du système CMS de développement de programmes WeChat Mini
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!