• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

        微信小程序如何完成藍牙連接?(代碼示例)

        微信小程序如何完成藍牙連接?(代碼示例)

        更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

        微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
        微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
        微信小程序如何實現藍牙連接?本篇文章給大家帶來的內容是介紹微信小程序實現藍牙連接的方法(步驟)。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。

        最近的項目需要使用小程序的藍牙功能與硬件設備進行連接相互傳送數據指令,聯調過程中發現一些問題,于是想著記錄下來,方便以后查看!

        1、初始化藍牙設備

        一般使用藍牙功能肯定是想連接某一個藍牙設備,所以需要知道這個藍牙設備的名稱,一般來說都是掃描二維碼連接,那么當你掃描這個設備二維碼的時候,就需要去初始化你手機上的藍牙模塊了

        /**
        * 初始化藍牙設備
        */
          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、搜索藍牙設備

        手機藍牙初始化成功之后,就會去搜索周邊的藍牙設備

        /**
        *開始搜索藍牙設備
        */
        findBlue(){
            var that = this
            wx.startBluetoothDevicesDiscovery({
              allowDuplicatesKey: false,
              interval: 0,
              success: function (res) {
               
                wx.showLoading({
                  title: '正在搜索設備',
                })
                that.getBlue()//3.0
              }
            })
          },

        3、獲取藍牙設備信息

        搜索藍牙設備之后,需要獲取搜索到的藍牙設備信息,微信小程序提供了兩個方法可以獲取搜索到的藍牙設備信息,分別是:

        wx.onBluetoothDeviceFound:監聽尋找到新設備的事件 ,表示只要找到一個新的藍牙設備就會調用一次該方法。

        wx.getBluetoothDevices:獲取在藍牙模塊生效期間所有已發現的藍牙設備,包括已經和本機處于連接狀態的設備

        看兩個方法的介紹我們知道他們的區別,但是不了解他們的區別會造成什么樣的問題?

        第一次我使用的是wx.onBluetoothDeviceFound方法進行聯調,發現一切正常,由于調試的時候就只有一臺設備,發現第二次重新掃碼這個藍牙設備的時候,找不到這個設備了,因為對這個方法來說,這不是一個新的設備,以前連接上過;或者當你因為某些原因藍牙傳送數據指令的時候出錯了需要重新連接,再次連接的時候也找不到當前設備,還是同樣的原因,因為當前設備對這個方法來說不是一個新設備

        所以后來我就用了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、連接藍牙設備

        通過上一個步驟找到這個藍牙之后,通過藍牙設備的id進行藍牙連接

        /**
          * 獲取到設備之后連接藍牙設備
         */
          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、獲取服務uuid

        連接上需要的藍牙設備之后,獲取這個藍牙設備的服務uuid

        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、通過id查看藍牙設備的特征值

        如果一個藍牙設備需要進行數據的寫入以及數據傳輸,就必須具有某些特征值,所以通過上面步驟獲取的id可以查看當前藍牙設備的特征值

        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、從后臺服務器獲取的指令

        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、將從后臺服務獲取的指令寫入到藍牙設備當中

        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("調用結束");
              }
            })
          },

        注:下面是需要使用到的兩個格式相互轉換的方法

        /**
        * 將字符串轉換成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('');
          },

        注:以上是藍牙連接的全部流程,但是我們在實際使用中肯定不會這么順暢,而且藍牙發送指令的設備都會有一個特性,就是當前藍牙設備有人連接上之后,其他人是搜索不到這個藍牙設備的,所以你需要考慮在某些個特殊情況,代碼里需要主動斷開藍牙連接把設備釋放出來供其他用戶使用,還有就是將指令寫入藍牙設備的時候很容易出問題,所以要寫個回調去多次寫入,保證成功性!

        總結:以上就是本篇文章的全部內容,希望能對大家的學習有所幫助。。

        相關視頻教程推薦:

        微信小程序開發文檔

        微信小程序全方位深度解析視頻教程

        微信小程序開發CMS系統視頻教程

        以上就是微信小程序怎么實現藍牙連接?(代碼示例)的詳細內容,更多請關注php中文網其它相關文章!


        小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲精品无码专区久久| 亚洲国产一区二区三区青草影视| 91丁香亚洲综合社区| 最新黄色免费网站| 精品久久亚洲中文无码| 香蕉免费一区二区三区| 亚洲av日韩av高潮潮喷无码| 亚洲首页在线观看| 18禁成人网站免费观看| 亚洲性一级理论片在线观看| 污污视频网站免费观看| 亚洲国产精品丝袜在线观看| 一级毛片免费毛片毛片| 亚洲综合网站色欲色欲| 亚洲日韩国产AV无码无码精品| 成年女人毛片免费播放视频m| 亚洲精品GV天堂无码男同| 真实国产乱子伦精品免费| 国产高清免费在线| 男男gay做爽爽免费视频| 免费中文字幕不卡视频| 成av免费大片黄在线观看| 亚洲成a人片在线观看中文动漫| 麻豆高清免费国产一区| 亚洲欧洲国产综合AV无码久久| 国产一区二区三区免费在线观看| 亚洲国产精品综合久久久| 成人毛片免费观看视频在线| 免费一区二区无码视频在线播放 | 一区二区三区亚洲| japanese色国产在线看免费| 亚洲AV无码一区二区二三区软件| 中文字幕免费视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲福利电影一区二区?| 在线观看人成视频免费| 亚洲最大免费视频网| 日韩高清免费观看| 国产精品亚洲一区二区麻豆| 亚洲高清偷拍一区二区三区| 免费A级毛片无码视频|