當前位置:編程學習大全網 - 編程語言 - 藍牙低功耗(BLE)概述

藍牙低功耗(BLE)概述

Android 4.3(API Level 18)開始引入Bluetooth Low Energy(BLE,低功耗藍牙)的核心功能並提供了相應的 API, 應用程序通過這些 API 掃描藍牙設備、查詢 services、讀寫設備的 characteristics(屬性特征)等操作。

詳細介紹 GATT 之前,需要了解 GAP(Generic Access Profile) ,它在 用來控制設備連接和廣播 GAP 使妳的設備被其他設備可見,並決定了妳的設備是否可以或者怎樣與合同設備進行交互 。例如 Beacon 設備就只是向外廣播,不支持連接,小米手環就等設備就可以與中心設備連接。

GAP 給設備定義了若幹角色,其中主要的兩個是: 外圍設備(Peripheral) 中心設備(Central)

在 GAP 中外圍設備通過兩種方式向外廣播數據: Advertising Data Payload(廣播數據) Scan Response Data Payload(掃描回復) ,每種數據最長可以包含 31 byte。

這裏 廣播數據是必需的 ,因為外設必需不停的向外廣播,讓中心設備知道它的存在。掃描回復是可選的,中心設備可以向外設請求掃描回復,這裏包含壹些設備額外的信息,例如設備的名字。

GAP 的廣播工作流程如下圖所示:

外圍設備會設定壹個廣播間隔,每個廣播間隔中,它會重新發送自己的廣播數據,廣播時間越長,越省電,同時也不太容易掃描到。

大部分情況下, 外設通過廣播自己來讓中心設備發現自己,並建立 GATT 連接,從而進行更多的數據交換。

也有些情況是不需要連接的,只要外設廣播自己的數據即可。用這種方式主要目的是讓外圍設備,把自己的信息發送給多個中心設備。 因為基於 GATT 連接的方式的,只能是壹個外設連接壹個中心設備。 使用廣播這種方式最典型的應用就是蘋果的 iBeacon。廣播工作模式下的網絡拓撲圖如下:

查看這篇博客

GATT 的全名是 Generic Attribute Profile,它定義兩個 BLE 設備通過叫做 Service 和 Characteristic 的東西進行通信。GATT 就是使用了 ATT(Attribute Protocol)協議,ATT 協議把 Service, Characteristic以及對應的數據保存在壹個查找表中,次查找表使用 16 bit ID 作為每壹項的索引。

壹旦兩個設備建立起了連接,GATT 就開始起作用了,這也意味著,妳必需完成前面的 GAP 協議。這裏需要說明的是,GATT 連接,必需先經過 GAP 協議。實際上,我們在 Android 開發中,可以直接使用設備的 MAC 地址,發起連接,可以不經過掃描的步驟。這並不意味不需要經過 GAP,實際上在芯片級別已經給妳做好了,藍牙芯片發起連接,總是先掃描設備,掃描到了才會發起連接。

GATT 連接需要特別註意的是: GATT 連接是獨占的。也就是壹個 BLE 外設同時只能被壹個中心設備連接 。壹旦外設被連接,它就會馬上停止廣播,這樣它就對其他設備不可見了。當設備斷開,它又開始廣播。

中心設備和外設需要雙向通信的話,唯壹的方式就是建立 GATT 連接。

下圖展示了 GTT 連接網絡拓撲結構。這裏很清楚的顯示, 壹個外設只能連接壹個中心設備,而壹個中心設備可以連接多個外設。 Connected Topology壹旦建立起了連接,通信就是雙向的了,對比前面的 GAP 廣播的網絡拓撲, GAP 通信是單向的。如果妳要讓兩個設備外設能通信,就只能通過中心設備中轉。

GATT 通信的雙方是 C/S 關系。 外設作為 GATT 服務端(Server),它維持了 ATT 的查找表以及 service 和 characteristic 的定義 。中心設備是 GATT 客戶端(Client),它向 Server 發起請求。需要註意的是,所有的通信事件,都是由客戶端(也叫主設備,Master)發起,並且接收服務端(也叫從設備,Slave)的響應。

壹旦連接建立,外設將會給中心設備建議壹個連接間隔(Connection Interval) ,這樣,中心設備就會在每個連接間隔嘗試去重新連接,檢查是否有新的數據。但是,這個連接間隔只是壹個建議,妳的中心設備可能並不會嚴格按照這個間隔來執行,例如妳的中心設備正在忙於連接其他的外設,或者中心設備資源太忙。

下圖展示壹個外設(GATT 服務端)和中心設備(GATT 客戶端)之間的數據交換流程,可以看到的是,每次都是主設備發起請求:

  • 上一篇:什麽是Java?
  • 下一篇:美國為什麽要發動這場貿易戰?
  • copyright 2024編程學習大全網