低功耗藍牙(BLE),有時又被稱爲「Bluetooth Smart」,是經典藍牙的輕量化,同時在Bluetooth 4.0 core specification規範中做爲一部分進行介紹。儘管低功耗藍牙和經典藍牙存在一部分重複部分,可是低功耗藍牙實際上有着徹底不一樣的血統,而且再被藍牙聯盟(Bluetooth SIG)採納以前是被諾基亞做爲一個名爲「Wibree」的內部項目啓動的。數組
對於工程師和產品設計師而言有許多無線協議,可是使BLE如此有趣的在於幾乎能夠肯定它是最簡單的方式去設計一些產品可以與其餘任何移動平臺的設備(IOS,Android,Windows phones 等等)進行通訊交互,同時 特別是在Apple設備上,它是惟一的硬件設計選項不須要你跳過無數的限制以便可以合法的爲IOS設備推銷你的產品。網絡
本指南可以提供給你關於BLE的簡述,尤爲是在BLE中如何組織數據的,而且設備如何廣播他們的數據,因此大家能夠鏈接他們而後來來回回傳遞數據。ui
支持藍牙4.0和低功耗藍牙的主流平臺以下表:設計
GAP是「Generic Access Profile」的首字母縮寫,它控制着藍牙的鏈接和廣播。GAP使得你的設備可以對外部世界可見,而且決定兩個設備可否彼此交流。3d
1.Device Roles(設備角色)cdn
GAP定義了多種多樣的設備角色,可是兩個關鍵性角色起做用:Central devices(中心設備)和Peripheral devices(外圍設備)。server
2.Advertising and Scan Response Data(廣播和掃描響應數據)對象
(1)存在兩種方式發送使用GAP發送廣播數據。blog
廣播包(Advertising Data)和掃描響應包(Scan Response Data).接口
(2)兩種數據包是相同的,而且都可以容納31字節的數據,可是隻有廣播包是強制的,由於它是有效載荷,可以不斷地從設備中發出讓範圍內的中心設備可以知道它的存在。掃描響應包是可選的中央設備能夠請求的輔助性數據包。而且容許設備設計者能夠在廣播數據中容納共奪得信息,好比一個字符串設備名,等。
3.Advertising Process(廣播過程)
下面的圖解解釋了廣播的過程和廣播包和掃描響應包如何工做的。
一個外圍設備會設置一個特殊的廣播間隔,而且每個廣播間隔過去了,它都會發送發送廣播數據包。更長的間隔可以減低功耗,可是若是設備每兩秒而不是每20毫秒廣播數據,就會收到更少的響應。
若是一個監聽設備對掃描響應數據感興趣(而且它是對外圍設備可見的),它就能夠選擇性的請求掃描響應數據,而且外圍設備會用附加數據進行響應。
4.Broadcast Network Topology(廣播網絡拓撲)
多數外圍設備經過廣播發送數據,中心設備收到廣播能夠經過必定的形式,決定與什麼類型的設備創建鏈接。當主從設備創建鏈接以後。GATT服務和特徵(這些屬性容許雙向交換大量數據)能夠被使用。可是有些狀況下,並不須要中心設備與外圍設備創建鏈接。下面就是當你只想廣播數據的解決方案。
當前狀況主要用於當你想讓一個外圍設備發送廣播數據超過一個設備同時接收數據的狀況。這種狀況只能使用廣播包進行數據的通訊,由於數據的發送和接收再鏈接模式下只可以被兩個鏈接的設備發現。
經過在31字節的廣播包或者掃描相應數據包含少許的自定義數據,你可以使用低成本的藍牙低功耗外圍設備向可監聽範圍內的任何設備發送單向數據。這就是咱們所知道的低功耗藍牙廣播。
例如這就是Apple的iBeacon的使用方法,它使用「Manufacture Specific Data」字段在主廣播包裏插入自定義數據。
一旦你在你的外圍設備和中心設備確立了鏈接,廣播程序一般就會中止,而且你一般不可以向外面發送任何廣播數據包,而後你就可使用GATT 服務和特徵進行雙向通訊。
5.GATT(通用屬性配置文件)
GATT是Generic Attribute Profile(通用屬性配置文件)的首字母簡寫,它定義了一種用於在兩個低功耗藍牙設備之間使用Services(服務)和Characteristics(特徵值)向前或者向後傳遞數據的方式。它使用叫作Attribute Protocol(ATT)的通用數據協議,被用來將Services(服務)和Characteristics(特徵)和相關的數據存儲在一張使用16位的ID進行查找的數據表。
一旦兩個設備之間創建專有鏈接,GATT就會起做用,意味着你已經完成了由GAP管理的廣播進程。
GATT和鏈接是專有的。也就意味着一個外圍設備在某一時刻只能被一箇中心設備鏈接!只要外圍設備和中心設備創建鏈接,外圍設備就會中止廣播數據同時其餘設備再也不能接收到廣播或者鏈接到該設備,直到已經創建的鏈接斷開。
確立鏈接也是惟一的一種容許雙向通訊的方式,同時中央設備可以向外圍設備發送有意義的數據,反之亦然。
6.Connected Network Topology(鏈接網絡拓撲)
下面的圖解解釋了低功耗藍牙設備在鏈接環境中的工做方式。一個外圍設備僅可以被一箇中心設備鏈接,可是中心設備能夠與多個外圍設備創建鏈接。
若是須要在兩個外圍設備之間傳遞數據,一個自定義的郵箱系統須要被實現來完成全部的消息經過中央設備的功能。
一旦在外圍設備和中央設備的鏈接創建,然而,通訊是雙向進行的,這與僅使用廣播和GAP單向廣播數據的方式是不一樣的
7.GATT Transactions(GATT事務)
理解GATT的重要概念是server/client模型。也就是說這也是最經典的C/S模型。
在這個C/S模型中,外圍設備是GATT Server,它持有配置文件查詢的數據,服務,特徵定義,同時中心設備做爲GATT Client,一般爲手機或者平板將請求發送到服務,完成數據的通信。數據通信起始於主設備——GATT Client,它可以從附屬設備(GATT Server)中接收響應。
當鏈接創建以後,外圍設備會向中心設備建議一個」鏈接間隔「,而後中心設備就會嘗試在每個鏈接間隔去創建重連,而後看看是否可以接收任何新數據等等。時刻記住這個鏈接間隔就是建議的數值。你的中心設備也許不能發出請求,由於它也許正忙着和其餘外圍設備通訊或者須要的系統資源不能獲取。
下面的圖解說明了在外圍設備(the GATT Server)和中央設備(the GATT Client)的數據通訊程序,同時主設備負責驅動每一個事務:
8.Services and Characteristis(服務和特徵)
GATT事務在低功耗藍牙中是基於Profiles,Services 和Characteristics的高級嵌套對象,圖解以下:
9.Profiles(配置文件)
配置文件不存在於低功耗藍牙外圍設備中,它是一個簡單的預約義「服務」集合,由藍牙聯盟(Bluetooth SIG)或者外圍設備設計人員編譯。配置文件通常就是外圍設備開發人員根據SIG開發規範使用已經定義好的「服務」(BluetoothGattService)和「特徵值」(BluetoothGattCharacteristic)或者自定義的「服務」、「特徵值」的集合。例如:心率配置文件包含心率服務和設備信息服務。
10.Services(服務)
Services(服務)用於將數據分解爲邏輯實體,幷包含叫作BluetoothGattCharacteristic(特徵)的數據塊。每一個服務可具備一個或多個特徵(Characteristics),而且每個服務經過稱爲UUID的惟一數字ID與其餘服務區分開來,UUID能夠是16位(官方採納的BLE服務)或者128位(自定義服務),關於UUID的更多信息,請參閱bluetooth-core-specification。
11.Characteristics(特徵)
在GATT事務中最低等級的概念是BluetoothGattCharacteristic,它封裝了單個數據點(儘管它可能包含相關數據的數組,例如來自三軸加速度計的X/Y/Z值等)
與服務類似,每個特徵經過預約義的16位或128位的UUID進行區分,你能夠自由使用由Bluetooth SIG定義的標準特性(確保跨BLE和支持BLE的硬件/軟件的互操做性)或定義你本身的外圍設備和軟件能過夠理解的特性。
特性是你與外圍設備進行交互的要點,因此理解這一律念很是重要。它們也被用於將數據發送回低功耗藍牙的外設設備,由於你還能夠寫入特性。你能夠實現一個使用自定義UART服務的簡單UART類型的接口,一個用於TX通道,另外一個用於RX通道,其中一個特性可能配置爲制度,另外一個特性可能配置位寫權限。