小程序藍牙BLE——自動連接設備(手環)


了解小程序藍牙API:

/** 
    *藍牙API: 
    * 1.初始化藍牙(判斷藍牙是否可用);openBluetoothAdapter
    * 2.獲取藍牙設備狀態(藍牙是否打開);getBluetoothAdapterState
    * 3.監控藍牙打開/關閉的動作;onBluetoothAdapterStateChange
    * 4.開始搜索周圍是否有設備;startBluetoothDevicesDiscovery
    * 5.獲取周圍設備列表;getBluetoothDevices
    * 6.停止搜索周圍設備,減少消耗資源;stopBluetoothDevicesDiscovery
    * 7.過濾目標設備;
    * 8.是否已經連接藍牙設備:
    *           a.獲取已經連接的藍牙設備;getConnectedBluetoothDevices
    *           b.創建新的低功耗藍牙設備連接deviceId;createBLEConnection
    * 9.獲取設備的信息
    *           a.獲取藍牙設備的服務碼;getBLEDeviceServices
    *           b.獲取藍牙設備的特征值;getBLEDeviceCharacteristics
    *           c.獲取藍牙設備的write和notify服務;readBLECharacteristicValue
    * 10.向藍牙設備寫入指令;writeBLECharacteristicValue
    * 11.只有,開啟藍牙設備的notify提醒功能;notifyBLECharacteristicValueChange
    * 12.才能,監聽接受藍牙設備返回的數據;onBLECharacteristicValueChange
    * 13.斷開低功耗的藍牙連接;closeBLEConnection
    * 14.關閉藍牙,釋放資源:closeBluetoothAdapter
    * 
    * */

 編程邏輯步驟:

/**
     * 第一部分:藍牙設配器
     * 1.微信小程序:是否支持
     * 2.手機藍牙:是否可用;
     * 3.手機藍牙:是否開啟
     * 4.監聽開啟手機藍牙狀態的事件
     * 
     */ 


 /**
     * 第二部分:開啟搜索、過濾、連接、關閉搜索
     * 1.搜索設備;
     * 2.獲取設備列表;
     * 3.連接設備,成功后關閉實時搜索;
     *
     * */

 /**
     * 第三部分:服務值、特征、write和notify服務
     * 1.獲取服務值;
     * 2.特征;
     * 3.write和notify服務
     * 
     * */

 /**
     * 第四部分:向藍牙寫入指令、監控接受數據
     * 1.寫入指令;
     *     對應命令轉為16進制的形式
     *      START   = [83, 84, 65, 82, 84]+時間戳
     *      STOP    = [83, 84, 79, 80]
     *      REQDATA = [82, 69, 81, 68, 65, 84, 65]
     *      AUTO_ACC= [   ...]    
     * 2.監控接收數據;
     * 
     * */

 /**
     * 第五部分:斷開連接
     * 1.斷開藍牙;
     * 2.清楚緩存
     * */

 

 斷開后、自動連接(半成熟):

 wx.onBluetoothAdapterStateChange();//監聽藍牙適配器狀態變化事件,判斷連接狀態;

 wx.getConnectedBluetoothDevices();//是否有已連接設備,否根據安卓deviceId||蘋果uuid唯一識別符重新: wx.getBLEDeviceServices()-->....-->wx.createBLEConnection() 重新自動連接;

 

附錄:藍牙設備的硬件的知識點:

硬件字節

ArrayBuffer:類型化數組,JavaScript操作二進制數據的一個接口。 WebGL,指瀏覽器與顯卡之間的通信接口,為了滿足JavaScript與顯卡之間大量的、實時的數據交換,它們之間的數據通信必須是二進制的,而不能是傳統的文本格式。 比如,以文本格式傳遞一個32位整數,兩端的JavaScript腳本與顯卡都要進行格式轉化,將非常耗時。這時要是存在一種機制,可以像C語言那樣,直接操作字節,然后將4個字節的32位整數,以二進制形式原封不動地送入顯卡,腳本的性能就會大幅提升。 類型化數組(Typed Array)就是在這種背景下誕生的。它很像C語言的數組,允許開發者以數組下標的形式,直接操作內存。有了類型化數組以后,JavaScript的二進制數據處理功能增強了很多,接口之間完全可以用二進制數據通信。

ArrayBuffer作為內存區域,可以存放多種類型的數據。不同數據有不同的存儲方式,這就叫做“視圖”。目前,JavaScript提供以下類型的視圖:

Int8Array:8位有符號整數,長度1個字節。

Uint8Array:8位無符號整數,長度1個字節。

Int16Array:16位有符號整數,長度2個字節。

Uint16Array:16位無符號整數,長度2個字節。

Int32Array:32位有符號整數,長度4個字節。

Uint32Array:32位無符號整數,長度4個字節。

Float32Array:32位浮點數,長度4個字節。

Float64Array:64位浮點數,長度8個字節。

 

parseInt(s, 16)//十六進制字符串轉字節數組

str.toString(16)//字節數組轉十六進制字符串

float:浮點數
unsigned:無符號
int :向下取整
char:字符

ArrayBuffer:類型化數組

客戶端要產生一個唯一的標識符:deviceId、MAC地址、AndroidId:

AndroidId:

  獲取AndroidId是不需要權限的但是AndroidId是可能變的,AndroidId是在用戶第一次激活這個設備時產生的所以當用戶重置手機時AndroidId會產生變化,理論上這個AndroidId是可以接受的畢竟重置手機這個事發生也不會太頻繁;

MAC地址:

  可以使用WIFI的MAC地址來作為標識符,感覺現階段這種方式比較可靠總結如下:Mac地址是唯一的,直接產生在硬件上基本上不會變更;

DeviceId:

  區別設備唯一設備ID。

 其他:

1、profile 

  profile可以理解為一種規范,一個標准的通信協議,它存在於從機中。藍牙組織規定了一些標准的profile,例如 HID OVER GATT ,防丟器 ,心率計等。每個profile中會包含多個service,每個service代表從機的一種能力。藍牙設備可以包括多個Profile,一個Profile中有多個Service,

2、service服務

  service可以理解為一個服務,在ble從機中,通過有多個服務,例如電量信息服務、系統信息服務等,每個service中又包含多個characteristic特征值。每個具體的characteristic特征值才是ble通信的主題。比如當前的電量是80%,所以會通過電量的characteristic特征值存在從機的profile里,這樣主機就可以通過這個characteristic來讀取80%這個數據;一個Service中有多個Characteristic,

3、characteristic特征

  characteristic特征值,例如:read、notify、write等特征…;ble主從機的通信均是通過characteristic的read、write來實現,可以 理解為一個標簽,通過這個標簽可以獲取或者寫入想要的內容。

4、UUID

  UUID,統一識別碼,我們剛才提到的service和characteristic,都需要一個唯一的uuid來標識

  每個從機都會有一個叫做profile的東西存在,不管是上面的自定義的simpleprofile,還是標准的防丟器profile,他們都是由一些列service組成,然后每個service又包含了多個characteristic,主機和從機之間的通信,均是通過characteristic來實現。

  實際產品中,每個藍牙4.0的設備都是通過服務和特征來展示自己的,服務和特征都是用UUID來唯一標識的。一個設備必然包含一個或多個服務,每個服務下面又包含若干個特征。特征是與外界交互的最小單位。藍牙設備硬件廠商通常都會提供他們的設備里面各個服務(service)和特征(characteristics)的功能,比如哪些是用來交互(讀寫),哪些可獲取模塊信息(只讀)等。比如說,一台藍牙4.0設備,用特征A來描述自己的出廠信息,用特征B來與收發數據等。

 

參考:

藍牙核心技術了解(藍牙協議、架構、硬件和軟件筆記)
實戰分享,教你藍牙在小程序中的應用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM