1. 程式人生 > >小程式藍芽開發總結

小程式藍芽開發總結

1:安卓手機呼叫wx.getBluetoothDevices方法獲取不到藍芽裝置時:

解決方法:Android藍芽除錯時,未開啟微信的定位服務會導致搜尋不到裝置,請到手機的設定裡面確認

2:wx.getBluetoothDevices(OBJECT)

存在呼叫該介面會返回之前的藍芽使用流程中搜索到的藍芽裝置,可能裝置已經不在使用者身邊,無法連線。

解決方法:每次呼叫前,需要呼叫wx.closeBluetoothAdapter(OBJECT),然後wx.openBluetoothAdapter(OBJECT)

然後wx.startBluetoothDevicesDiscovery,最後再呼叫wx.getBluetoothDevices,參考程式碼如下

//搜尋獲取已發現裝置  
function searchBluetooth (that) {
  console.log('searchBluetooth')
  // 避免獲取到之前的裝置,每次獲取裝置前,先關閉藍芽介面卡,再開啟介面卡,設定延遲執行為了呼叫藍芽介面正常
  closeBluetoothAdapter(function(res){
    if ('success' == res){
      initializeBluetooth(function (res) {
        if ('success' == res) {
          setTimeout(function(){
            wx.startBluetoothDevicesDiscovery({//開始搜尋附近的藍芽外圍裝置
              services: ['00003900-842F-544F-5348-494241000001'], //只搜尋主服務 UUID 為 FEE7 的裝置
              success: function (res) {
                console.log('開始搜尋周邊藍芽裝置')
                console.log(res)
                setTimeout(function(){
                  wx.getBluetoothDevices({//sucess返回uuid 對應的的已連線裝置列表,Array型別
                    success: function (res) {
                      // 獲取到藍芽裝置成功之後停止搜尋周邊裝置
                      wx.stopBluetoothDevicesDiscovery({ //先停止搜尋周邊裝置
                        success: function (res) {
                          console.log('連線裝置前,先停止搜尋周邊裝置:')
                          console.log(res)
                        }
                      })
                      console.log('裝置:' + JSON.stringify(res.devices));
                      var devices = res.devices;
                      var length = devices.length;
                      if (null != devices && length > 0){
                        for (var i = 0; i < length; i++){
                          var device = devices[i];
                          if (device.name == '未知裝置' && device.localName){
                            device.name = device.localName;
                          }
                        }
                      }
                      that.setData({
                        devices: devices
                      })
                    }, fail: function (res) {
                      console.log("getBluetoothDevices fail:" + res);
                    }
                  })
                }, 500)
              }, fail: function (res) {
                console.log("searchBluetooth fail:" + res);
                wx.showToast({
                  title: '連線藍芽失敗',
                  icon: 'none',
                  image: '/images/my/
[email protected]
', mask: true }) } }) }, 100) } }) } }); }

3:iOS平臺上,直接呼叫read、write、notify報如下錯誤

10004no service沒有找到指定服務
10005no characteristic沒有找到指定特徵值

iOS平臺上後續對特徵值的read、write、notify,由於系統需要獲取特徵值例項,傳入的 serviceId 與 characteristicId 必須由 getBLEDeviceServices 與 getBLEDeviceCharacteristics 中獲取到後才能使用。建議雙平臺統一在建立連結後先執行 getBLEDeviceServices 與 getBLEDeviceCharacteristics 後再進行與藍芽裝置的資料互動

參考程式碼如下

// 密碼配對
function pair(password, newPassword, callback){
  var deviceId = app.globalData.localId;
  wx.getBLEDeviceServices({
    deviceId: deviceId,
    success: function (res) {
      wx.getBLEDeviceCharacteristics({
        deviceId: deviceId,
        serviceId: order.uuid,
        success: function (res) {
          pair1(password, newPassword, callback);
        }, fail: function (res) {
          return callback('裝置不支援密碼配對特徵值');
        }
      })
    }, fail: function (res) {
      return callback('裝置不支援密碼配對服務');
    }
  })
}
// 密碼配對-寫
function pair1(oldPassword, newPassword, callback){
  var deviceId = app.globalData.localId;
  var password = '123456';
  if (oldPassword){
    password = oldPassword;
  }
  var buf = stringToBytes(password)
  wx.writeBLECharacteristicValue({
    deviceId: deviceId,
    serviceId: order.uuid,
    characteristicId: order.pair,
    value: buf,
    success: function (res) {
      console.log('writeBLECharacteristicValue success', res)
      // 必須在這裡的回撥才能獲取
      wx.onBLECharacteristicValueChange(function (characteristic) {
        console.log('characteristic value comed:', characteristic)
        var ret = byteToDecString(characteristic.value)
        console.log(ret);
        if (ret === "1") {
          // 配對成功之後,獲取安全模式,以控制器的為準
          onConnected();
          if (newPassword && newPassword.length == 6){
            return changePassword(newPassword, callback);
          }else{
            return callback('配對成功');
          }
        } else {
          return callback('配對密碼錯誤');
        }
      })
      wx.readBLECharacteristicValue({
        deviceId: deviceId,
        serviceId: order.uuid,
        characteristicId: order.pair,
        success: function (res) {
          console.log('readBLECharacteristicValue:', res.errCode)
        },
        fail: function (res) {
          return callback('裝置不支援密碼配對讀取');
        }
      })
    },
    fail: function (res) {
      return callback('裝置不支援密碼配對寫入');
    }
  })
}

4:小程式藍芽常用轉換api

function byteToDecString(buffer) {
  return new Uint8Array(buffer)[0].toString(10)
}

function hexToBytes(hexs) {
  var array = new Uint8Array(hexs.length);
  for (var i = 0, l = hexs.length; i < l; i++) {
    array[i] = hexs[i]
  }
  return array.buffer;
}

function stringToBytes(str) {
  var array = new Uint8Array(str.length);
  for (var i = 0, l = str.length; i < l; i++) {
    array[i] = str.charCodeAt(i);
  }
  console.log(array);
  return array.buffer;
}

function bytesToString(buffer) {
  return String.fromCharCode.apply(null, new Uint8Array(buffer))
}

function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function (bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return hexArr.join('');
}

相關推薦

程式開發總結

1:安卓手機呼叫wx.getBluetoothDevices方法獲取不到藍芽裝置時:解決方法:Android藍芽除錯時,未開啟微信的定位服務會導致搜尋不到裝置,請到手機的設定裡面確認2:wx.getBluetoothDevices(OBJECT)存在呼叫該介面會返回之前的藍芽

微信程式 開發 Demo 外掛

微信小程式藍芽操作 由於開發要求,要在微信小程式加上藍芽操作,於是乎就自己寫了個封裝了個藍芽外掛bletool,方便自己以後使用,下面介紹一下使用方法和反饋引數 先來看初始化 整合之後藍芽的操作就變得簡單很多了,先把寫好的bletool.js放到utils包下(具體放哪看你們自己的了

程式親身總結

問題: 最近做了一個涉及到藍芽模組小程式,做一下總結,為自己的成長做一份記錄,如果能幫到大家的話是再好不過的了; 1.小程式藍芽搜尋能不能搜到手機裝置 2.如何判斷藍芽是否開啟 3.搜尋指定裝置 4.開發者工具和 Android 上獲取到的deviceId為裝置 MA

微信程式 長資料包 分包拆包

https://www.jianshu.com/p/de7bd0093c43 關於 微信小程式藍芽 分包傳送 及 多包傳送 不返回問題   關於分包傳送 20位元組分包,微信小程式支援多於20位元組傳送。但是低功耗藍芽傳輸可能會有問題,建議分包傳送   for

微信程式-連線

最近的專案需要使用小程式的藍芽功能與硬體裝置進行連線相互傳送資料指令,聯調過程中發現一些問題,於是想著記錄下來,方便以後檢視! 1.0一般使用藍芽功能肯定是想連線某一個藍芽裝置,所以需要知道這個藍芽裝置的名稱,一般來說都是掃描二維碼連線,那麼當你掃描這個裝置二維碼的時候,就需要去初始化你手機上的藍芽模組了

程式BLE——自動連線裝置(手環)

瞭解小程式藍芽API: /** *藍芽API: * 1.初始化藍芽(判斷藍芽是否可用);openBluetoothAdapter * 2.獲取藍芽裝置狀態(藍芽是否開啟);getBluetoothAdapterState * 3.監控藍芽開啟/關閉的動作;onBlu

程式-實戰

導語 藍芽在日常生活中廣泛使用的一項技術,小程式給了我們前端工程師一個控制藍芽的方法,帶上你的裝置,來看看怎麼控制你的藍芽裝置吧。 1. 背景介紹 藍芽是愛立信公司創立的一種無線技術標準,為短距離的硬體裝置提供低成本的通訊規範。藍芽規範由藍芽技術聯盟(Bluetooth

程式除錯工具上線啦!

一、微信小程式開發相關資料: 微信公眾平臺: 開發小程式或公眾號需要先到這裡註冊 小程式官方文件: 微信小程式開發離不了官方文件。 小程式官方開發文件: 微信小程式開發離不了官方開發文件。 二、主要效果圖 三、簡述 1.藍芽BLE除錯工具

微信程式連線傳送資訊

///獲取應用例項 var app = getApp() Page({ data: { lanya: "", state: "", msg: "", sousuo: "", status: "", connectedDeviceId: "",//連線裝置Id

mpvue開發微信程式功能

github地址:https://github.com/dujingya/blueDevice/blob/master/blueDevice.md @[T#使用mpvue 開發小程式過程中 簡單介紹一下微信小程式藍芽連線過程 #在藍芽連線的過程中部分api需要加

微信程式通訊中的路由bug

作為一名微信小程式初學者,在工作中總是遇到各種坑,把這些易犯的錯誤整理到CSDN上是一個兩全其美的選擇。今天我就說說在藍芽通訊中路由不能調轉的問題。首先看程式碼: lanya9: function (e) { var that = this; // wx.s

微信程式連線錯誤分析及解決

當開啟手機藍芽後去連線藍芽,會出現連線不上情況,報錯10003,此時不管是重啟小程式還是重新關閉開啟藍芽,都不能正常連線藍芽裝置。10003是微信藍芽連線經常碰到的問題,微信官方給出的文件中就簡單的描述為“connection fail”,備註為“連線失敗”。然而,實際上出現

android ble開發總結(附帶自己專案中提取整理的demo地址)

一些基本的知識我就不寫了,很多其他部落格都可以查到。我主要寫幾點我在其他部落格沒有看到的東西以及我在實際開發中遇到的問題。最後我會貼上程式碼的地址。 1.需要設定2個或3個uuid。通常連線裝置後會得

微信程式通訊模組demo

公司專案用到藍芽和硬體通訊,APP正在開發,弄一個微信小程式藍芽通訊的demo,可能後期會有微信藍芽的專案,第一次搞,遇到2個坑: 1.安卓和蘋果獲取的硬體服務UUID順序不同 2.目前用的這一版 “啟用低功耗藍芽裝置特徵值變化時的 notify 功能”在安卓和蘋果的測試機

微信程式模組遇到的坑

測試手機: 手機名稱:iPhone 5s 版本:10.3.1 微信版本:6.5.7 藍芽:4.0手機名稱:iPhone 6 版本:10.3.1 微信版本:6.5.7 藍芽:4.0手機名稱:iPhone 6s 版本:10.3.1 微信版本:6.5.7 藍芽:4.2手機名稱

微信程式開發手記之七:一個程式上線後的總結(上)

終於,經過大概一週時間,磕磕絆絆地提交稽核了,一個移動猿開發小程式,也算有了些心得,也遇到了些坑,這裡和大家一起分享下。 怎麼樣調佈局 先說一個題外話,最後引入正題。 如果翻看過一些資料,大家肯定很容易會發現一件事,那就是關於image標籤的預設寬高,

微信程式開發手記之八:一個程式上線後的總結(下)

今天,說一下專案開發中遇到的一些問題,和一些效果。如果大家遇到了一些效果不好實現的,也可以給我留言,移動猿不怕嘗試。 網路請求該怎麼寫 這個似乎不是個問題,但其實是的,先來看一個請求的程式碼。 wx.request({ url: 'https:

關於android開發的一些總結

   最近三個月一直在忙著公司的一個產品。這個產品主要是藍芽和微控制器之間的資料交換。當時在選擇通訊方式的時候有2種選擇。一種是wifi,另外一種就是後來選擇的藍芽。期間遇到了很多問題,包括藍芽連線問題啊,android版本問題,bluesocket連線問題等等。    1

android 開發常見問題總結

  1、主機和從機有什麼區別 主機是主動搜尋的,從機是被搜尋的,主機可以記憶從機地址、密碼,也可以放棄這些記憶 重新搜尋。 (HC-06)主機如果配對過從機,那麼就會記憶該從機的地址和密碼,下次上電就

iOS開發總結-4

讀寫 開發 想象 src character font term 震動 模塊 藍牙開發總結 只要熟悉藍牙的流程,和藍牙中每一個角色的作用,其實藍牙通訊並沒有想象中的難 1.藍牙中心CBCentralManager:一般指得是iPhone手機 2.設備(外設)CBPer