网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網(wǎng)

微信小程序?qū)崿F(xiàn)BLE藍(lán)牙連接

發(fā)布時(shí)間:2018-04-18 10:26 所屬欄目:小程序開發(fā)教程

作者:全棧筆記,來(lái)自公眾號(hào):全棧筆記

自從微信小程序提供BLE藍(lán)牙api后,網(wǎng)上隨便一搜便是各種稱實(shí)現(xiàn)了小程序連接ble 的功能的文章,上來(lái)就貼代碼,貼效果圖,對(duì)于我們這種沒有與硬件開發(fā)打過交道的互聯(lián)網(wǎng)開發(fā)者,單單看這些文章與小程序api 離自己真正調(diào)通還是有一段距離的。

 

一、BLE特征

1、BLE(Bluetooth Low Energy),藍(lán)牙4.0核心profile,主要特點(diǎn)是快速搜索,快速連接,超低功耗保持連接和數(shù)據(jù)傳輸,缺點(diǎn):數(shù)據(jù)傳輸速率低,由于其具有低功耗特點(diǎn),所以經(jīng)常用在可穿戴設(shè)備之中。

2、關(guān)于數(shù)據(jù)傳輸:每個(gè)設(shè)備包含了多個(gè)service(可以理解為服務(wù))。每個(gè)service 同時(shí)又包含了多個(gè)characteristic特征值,每一個(gè)具體的characteristic特征值才是BLE通信的主要通道。BLE主機(jī)與從機(jī)均是通過characteristic來(lái)進(jìn)行通信。

3、如何寫入監(jiān)控?cái)?shù)據(jù): 通過第二條可以知道每個(gè)設(shè)備有多個(gè)service ,每個(gè)service 又有多個(gè)特征值,那如果要往藍(lán)牙設(shè)備寫數(shù)據(jù)寫到哪里呢? 其實(shí)連接藍(lán)牙設(shè)備是需要 硬件開發(fā)者告訴你需要操作的 service的UUID(唯一值)及 可寫特征的UUID及接收通知的特征的UUID的,或者遍歷服務(wù)和特征值,查出同一個(gè)服務(wù)下 同時(shí)有可寫特征,也有notify 特征的 ,與硬件開發(fā)者確認(rèn)。(注:可寫特征和通知特征 必須是 同一個(gè)服務(wù)下的兩個(gè)特征值) 。 
這些是需要寫死到程序的當(dāng)調(diào)用: 
wx.writeBLECharacteristicValue(OBJECT) 往可寫特征寫數(shù)據(jù) 
wx.notifyBLECharacteristicValueChanged 打開通知(特征值為notify 的特征UUID)

 

二、BLE連接操作流程

1、初始化藍(lán)牙適配器

2、全局監(jiān)聽藍(lán)牙適配器狀態(tài)變化事件

3、掃描展示可連接藍(lán)牙設(shè)備

4、停止掃描(掃描比較耗費(fèi)電量)連接指定藍(lán)牙設(shè)備

5、連接成功,同時(shí)掃描服務(wù),掃描特征(在掃描特征值成功后開啟監(jiān)聽)

6、啟用低功耗藍(lán)牙設(shè)備特征值變化時(shí)的 notify 功能(wx.notifyBLECharacteristicValueChange)注:監(jiān)聽可notify特征, 
同時(shí)開啟監(jiān)聽通知(wx.onBLECharacteristicValueChange)此處可獲取通知信息(16進(jìn)制串)在此處做接收到通知后的邏輯處理

7、寫數(shù)據(jù)

8、斷開連接(一個(gè)BLE只能同時(shí)被一個(gè)主機(jī)連接。如果不用或換主機(jī)連接需要先斷開當(dāng)前連接)

9、關(guān)閉藍(lán)牙模塊。調(diào)用該方法將斷開所有已建立的鏈接并釋放系統(tǒng)資源

 

三、開發(fā)中字符轉(zhuǎn)換的問題

因?yàn)楹虰LE藍(lán)牙設(shè)備通信的數(shù)據(jù)是 16進(jìn)制的 ArrayBuffer。所以寫數(shù)據(jù)前及接收到數(shù)據(jù)后需要進(jìn)行相應(yīng)的格式轉(zhuǎn)換

1、寫數(shù)據(jù): 數(shù)字轉(zhuǎn)16進(jìn)制

js轉(zhuǎn)16進(jìn)制還是比較方便的 直接用 int.toString(16) 即可,有時(shí)候需要轉(zhuǎn)的是字符串需要做一些parseInt處理再轉(zhuǎn)16進(jìn)制

16進(jìn)制數(shù)據(jù)轉(zhuǎn)ArrayBuffer

 

  1. stringToHexBuffer: function (data) {
  2. //var data = 'AA5504B10000B5'
  3. var typedArray = new Uint8Array(data.match(/[\da-f]{2}/gi).map(function (h) {
  4. return parseInt(h, 16)
  5. }))
  6. return typedArray.buffer
  7. },

2、接收到通知數(shù)據(jù)

ArrayBuffer解析出16進(jìn)制

 

  1. buf2hex: function (buffer) { // buffer is an ArrayBuffer
  2. return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
  3. },

js 16進(jìn)制轉(zhuǎn)10進(jìn)制

eg:接收數(shù)據(jù)fe1105090b200e01 可能需要截取字段兩位為一個(gè)解析  解析第三、四位 11 為10進(jìn)制 :

 

  1. parseInt(detail.substr(2,2),16).toString(10);
 

四、如何調(diào)試

1、正常流程是先出硬件,然后開發(fā)小程序去連接硬件,操作對(duì)應(yīng)接口,硬件給出相應(yīng)反饋,硬件操作寫數(shù)據(jù),通知小程序。

2、如果硬件沒有出來(lái)需要先開發(fā)小程序怎么辦。我此次開發(fā)就遇到了這個(gè)問題,硬件還沒有,對(duì)方要求我們先用程序?qū)崿F(xiàn)api ,對(duì)方再按照api 開發(fā)硬件。其實(shí)也有解決如下:

a.首先要準(zhǔn)備一個(gè)串口BLE藍(lán)牙設(shè)備(后續(xù)操作是基于這個(gè)設(shè)備有usb 插頭,可插到電腦上)

b.下載并安裝電腦usb 轉(zhuǎn) 串口驅(qū)動(dòng)(eg : windows下 CH340驅(qū)動(dòng))

c.下載并安裝串口調(diào)試工具(eg: windows下 sscom) 打開進(jìn)行簡(jiǎn)單設(shè)置(自行百度:本人測(cè)試時(shí)只改動(dòng)了串口號(hào)為COM7,波特率為12900,同時(shí)勾選HEX顯示,小程序?qū)憯?shù)據(jù)就可以在上面展示了)

到此結(jié)束,由于作為互聯(lián)網(wǎng)開發(fā)者與硬件打交道甚少,此文純屬自己開發(fā)中遇到的一些問題及總結(jié)(其中若有理解錯(cuò)誤望理解)(也許作為有經(jīng)驗(yàn)的硬件開發(fā)者感覺這些內(nèi)容不值一提,所以網(wǎng)上往往可以搜索到的相關(guān)文章不再提及這些,以至于我們這些小白入門甚難)


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/23649.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×