概述
最近這段時間接了一個藍牙車位鎖的項目;項目中包括APP和微信小程序;其中涉及藍牙部分的功能就是手機連接藍牙然后通過藍牙給車位鎖發指令控制車位鎖開關;更多細節不好透露;畢竟涉及到客戶項目這點職業道德還是得守的;我們這里只存技術角度去說;APP部分的就不說了,這里說微信小程序連接藍牙並且通過藍牙發送指令
小程序發送藍牙指令流程
1、 開啟藍牙適配
2、 獲取藍牙適配器狀態,判斷設備藍牙是否可用。
3、通過deviceId連接藍牙
4、發送和接收信息
由於業務是通過掃描二維碼后連接藍牙,所以我這里省去了掃描藍牙流程,直接通過掃描二維碼然后通過二維碼中的內容去服務器交互獲取deviceId最后直接連接藍牙
//打開適配器
wx.openBluetoothAdapter({
success: function (res) { console.log("藍牙適配器打開成功!") //從服務器獲取設備id util.httpClient.httpGet("/parklock/manager/android/ble2/locker!getLockerInfor.do", { lockerId: 20001 }, function (data) { that.setData({ webData: data }); wx.createBLEConnection({ deviceId: that.data.deviceId, success: function (res) { console.log("連接成功", res) wx.getBLEDeviceServices({ // 這里的 deviceId 需要已經通過 createBLEConnection 與對應設備建立鏈接 deviceId: that.data.deviceId, success: function (res) { console.log('藍牙服務:', res.services) wx.getBLEDeviceCharacteristics({ // 這里的 deviceId 需要已經通過 createBLEConnection 與對應設備建立鏈接 deviceId: that.data.deviceId, // 這里的 serviceId 需要在上面的 getBLEDeviceServices 接口中獲取 serviceId: that.data.serviceId, success: function (res1) { console.log('服務設備特:', res1.characteristics) //發送信息給藍牙設備 // 向藍牙設備發送一個0x00的16進制數據 var hex = 'AA5504B10000B5' var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })) var buffer1 = typedArray.buffer console.log("發送內容:",buffer1) wx.writeBLECharacteristicValue({ deviceId: that.data.deviceId, serviceId: that.data.serviceId, characteristicId: that.data.characteristicId, value: buffer1, success: function (resr) { console.log("發送成功") }, fail: function (res2) { console.log("發送失敗:", res2) } }) } }) } }) } }) }); // 接收結果監聽 wx.onBLECharacteristicValueChange(function (characteristic) { console.log('characteristic value comed:', characteristic) }) }, fail: function (res) { console.log("藍牙適配器打開失敗!") console.log(res) } });
其中data中定義了serviceId 和 characteristicId
data: { serviceId:"0000FFE0-0000-1000-8000-00805F9B34FB", characteristicId:"0000FFE1-0000-1000-8000-00805F9B34FB", deviceId: "34:15:13:87:DF:60" }
歡迎關注微信公眾號【千里授漁】免費獲取教學視頻。
QQ507545336

