作者:全棧筆記,來自公眾號:全棧筆記
自從微信小程序提供BLE藍牙api后,網上隨便一搜便是各種稱實現了小程序連接ble 的功能的文章,上來就貼代碼,貼效果圖,對于我們這種沒有與硬件開發打過交道的互聯網開發者,單單看這些文章與小程序api 離自己真正調通還是有一段距離的。
1、BLE(Bluetooth Low Energy),藍牙4.0核心profile,主要特點是快速搜索,快速連接,超低功耗保持連接和數據傳輸,缺點:數據傳輸速率低,由于其具有低功耗特點,所以經常用在可穿戴設備之中。
2、關于數據傳輸:每個設備包含了多個service(可以理解為服務)。每個service 同時又包含了多個characteristic特征值,每一個具體的characteristic特征值才是BLE通信的主要通道。BLE主機與從機均是通過characteristic來進行通信。
3、如何寫入監控數據: 通過第二條可以知道每個設備有多個service ,每個service 又有多個特征值,那如果要往藍牙設備寫數據寫到哪里呢? 其實連接藍牙設備是需要 硬件開發者告訴你需要操作的 service的UUID(唯一值)及 可寫特征的UUID及接收通知的特征的UUID的,或者遍歷服務和特征值,查出同一個服務下 同時有可寫特征,也有notify 特征的 ,與硬件開發者確認。(注:可寫特征和通知特征 必須是 同一個服務下的兩個特征值) 。
這些是需要寫死到程序的當調用:
wx.writeBLECharacteristicValue(OBJECT) 往可寫特征寫數據
wx.notifyBLECharacteristicValueChanged 打開通知(特征值為notify 的特征UUID)
1、初始化藍牙適配器
2、全局監聽藍牙適配器狀態變化事件
3、掃描展示可連接藍牙設備
4、停止掃描(掃描比較耗費電量)連接指定藍牙設備
5、連接成功,同時掃描服務,掃描特征(在掃描特征值成功后開啟監聽)
6、啟用低功耗藍牙設備特征值變化時的 notify 功能(wx.notifyBLECharacteristicValueChange)注:監聽可notify特征,
同時開啟監聽通知(wx.onBLECharacteristicValueChange)此處可獲取通知信息(16進制串)在此處做接收到通知后的邏輯處理
7、寫數據
8、斷開連接(一個BLE只能同時被一個主機連接。如果不用或換主機連接需要先斷開當前連接)
9、關閉藍牙模塊。調用該方法將斷開所有已建立的鏈接并釋放系統資源
因為和BLE藍牙設備通信的數據是 16進制的 ArrayBuffer。所以寫數據前及接收到數據后需要進行相應的格式轉換
1、寫數據: 數字轉16進制
js轉16進制還是比較方便的 直接用 int.toString(16) 即可,有時候需要轉的是字符串需要做一些parseInt處理再轉16進制
16進制數據轉ArrayBuffer
2、接收到通知數據
ArrayBuffer解析出16進制
js 16進制轉10進制
eg:接收數據fe1105090b200e01 可能需要截取字段兩位為一個解析 解析第三、四位 11 為10進制 :
1、正常流程是先出硬件,然后開發小程序去連接硬件,操作對應接口,硬件給出相應反饋,硬件操作寫數據,通知小程序。
2、如果硬件沒有出來需要先開發小程序怎么辦。我此次開發就遇到了這個問題,硬件還沒有,對方要求我們先用程序實現api ,對方再按照api 開發硬件。其實也有解決如下:
a.首先要準備一個串口BLE藍牙設備(后續操作是基于這個設備有usb 插頭,可插到電腦上)
b.下載并安裝電腦usb 轉 串口驅動(eg : windows下 CH340驅動)
c.下載并安裝串口調試工具(eg: windows下 sscom) 打開進行簡單設置(自行百度:本人測試時只改動了串口號為COM7,波特率為12900,同時勾選HEX顯示,小程序寫數據就可以在上面展示了)
到此結束,由于作為互聯網開發者與硬件打交道甚少,此文純屬自己開發中遇到的一些問題及總結(其中若有理解錯誤望理解)(也許作為有經驗的硬件開發者感覺這些內容不值一提,所以網上往往可以搜索到的相關文章不再提及這些,以至于我們這些小白入門甚難)