藍牙低功耗(Bluetooth Low Energy / BLE)連接方法和步驟是有點複習,所以利用下面的例子來描述如何連接藍牙低功耗(BLE)?
連接實現的步驟:
- 通過掃描,試圖發現新設備
- 確認發現的設備沒有而已軟體,也沒有處於鎖定狀態
- 發送 Device Address 地址
- 收到並解讀待配對設備發送過來的資料
- 建立並保存連接
藍牙低功耗(BLE)的連接 |
設備 B 不斷發送廣播信號給手機(Observer),如果手機不開啟掃描視窗,手機是收不到設備 B 的廣播的,不僅手機要開啟射頻接收視窗,而且只有手機的射頻接收視窗跟廣播發送的發射視窗匹配成功,而且廣播射頻通道和手機掃描射頻通道是同一個通道,手機才能收到設備 B 的廣播信號。
中心(Central/Scanner)和外圍設備(Peripheral/Advertiser)的廣播信號 |
- 根據藍牙規格規定,Advertiser 發送完一個廣播包之後150us(T_IFS),Advertiser 必須開啟一段時間的射頻Rx視窗,以接收來自 Observer 的資料包。 Observer 就可以在這段時間裡給 Advertiser 發送連接請求。
- 同步手機和設備的時鐘,也就是說,設備每收到手機發來的一個包,都會把自己的時序原點重新設置,以跟手機同步。
- 告訴設備你現在可以傳資料給我了。連接成功後,BLE 通信將變成主從模式,因此把連接發起者(手機)稱為 Master 或者 Central,把被連接者(之前的 Advertiser)稱為 Slave 或者 Peripheral。BLE 通信之所以為主從模式,是因為 Slave 不能隨性給 Master 發資訊,它只有等到 Master 給它發了一個 Packet 後,然後才能在規定的時間把自己的資料回傳給 Master。
- 連接成功後,Master 和 Slave在每一個 Connection Interval開始的時候,都必須交互一次,即 Master 給 Slave 發一個包,Slave 再給 Master 發一個包,整個交互過程稱為一個 Connection Event 或者 Gap Event。。Master 不可能時時刻刻都有資料發給 Slave,所以 Master 大部分時候都是發的空包(Empty Packet)給 Slave。同樣 Slave 也不是時時刻刻都有資料給 Master,因此 Slave 回復給 Master 的包大部分時候也是空包。另外在一個 Connection Event 期間,Master 也可以發多個包給 Slave,以提高吞吐率。
中心(Central/Scanner)和外圍設備(Peripheral/Advertiser)的連接訊號 |
在通訊系統當中,Device Address 是用來唯一辨識一個物理設備的,像是 TCP/IP 中的 MAC Address, Bluetooth Classic 的 Bluetooth Device Address。對於 Device Address 來說一個很重要的特性就是唯一性,否則很可能會造成很多問題。
Public Address 屬於一種 48-bit 的 MA-L 類型地址,它的結構為:NN:NN:NN:NN:NN:NN。其中前三個 byte 使用 OUI(Organizationally Unique Identifier),後三個 byte 自由分配。OUI 代表了一個指定的組織機構識別碼,全球已經有許多公司申請了自己的 OUI。開發者可以從 IEEE 網站 https://standards.ieee.org/develop/regauth/oui/oui.csv 下載已被分配的 MA-L 位址。
BLE 結構的組成:
每個 BLE 設備由多個 Profile(GATT)組成
每個 Profile 由多個的 Service 服務組成,Service 用於資料的分類。
每個 Service 由多個 Characteristic 特徵組成,Characteristic用於存放屬性。
每個 Characteristic 由一個 Value 值和多個 Descriptor 描述組成 Descriptor 是對 Value 不同角度的描述和說明,所以有多個 Descriptor。