--- title: 藍芽低功耗介紹 description: "source link : https://learn.adafruit.com/introduction-to-bluetooth-low-energy/introduction" # image: https://hackmd.io/screenshot.png tags: Bluetooth # robots: noindex, nofollow langs: zh-Hant --- # 藍芽低功耗介紹 source link : https://learn.adafruit.com/introduction-to-bluetooth-low-energy/introduction ## 支援平台 - iOS5 +(iOS7 +首選) - Android 4.3+(4.4+中的大量錯誤修復) - Apple OS X 10.6+ - Windows 8(XP,Vista和7僅支持藍牙2.1) - GNU / Linux Vanilla BlueZ 4.93+ ## GAP GAP是通用訪問配置文件(Generic Access Profile)的首字母縮寫,用來控制藍芽的connection和advertising,設備對外界的可見性,並確定兩個設備如何(或不能)相互溝通。 ### Device Roles GAP定義了設備的各種角色,但要記住的兩個關鍵概念是中央(Central)設備和外圍(Peripheral)設備。 外圍設備是小型,低功耗,資源有限的設備,中央設備通常是您連接的行動電話或平板電腦,具有更強的處理能力和記憶體。 ### Advertising and Scan Response Data 有兩種方法可以通過GAP發送廣告。Advertising Data payload和Scan Response payload。兩個有效載荷都可以包含多達**31byte**的數據,但只有Advertising Data payload是強制性的,它將不斷從設備傳出,讓範圍內的中央設備知道它存在。 Scan Response payload是中央設備可以請求的可選次要payload,並且允許設備設計者在Advertising Data payload中容納更多信息,例如設備名稱的字符串等。 ### Advertising Process 下圖說明了Advertising Process以及Advertising Data payload和Scan Response payload的工作原理。 外圍設備將設置一個特定的廣告時間間隔,每當此時間間隔過去,它將重新發送它的主要廣告數據包。較長的延遲可以節省電力,但如果設備每2秒而不是每20毫秒宣傳一次,則感覺反應較慢。 如果監聽設備對Scan Response payload感興趣(並且它在外圍設備上可用),則它可以選擇性地請求它,而外圍設備將伴隨附加數據來回應。  ### Broadcast Network Topology 雖然大多數外圍設備都在宣傳自己,以便可以建立連接並且可以使用GATT服務和特性(characteristic),允許在兩個方向上交換更多數據,但是在某些情況下您只想要廣告數據。 這裡的主要用例是您希望外圍設備一次向多個設備發送數據。這只能使用advertising packet,因為在連接模式下發送和接收的數據只能由這兩個連接的設備看到。 通過在31byte payload中包含少量自定義數據,您可以使用低成本藍牙低功耗外設將數據單向發送到聆聽範圍內的任何設備,如下圖所示。 這被稱為藍牙低功耗**廣播(Broadcasting**。 例如,這是Apple的iBeacon使用的方法,它使用**Manufacturer Specific Data**欄位在主廣告數據包中插入自定義payload  在外圍設備和中央設備之間建立連接後,Advertising Process通常會停止,通常將無法再發送advertising packet,並且將使用GATT服務和特性(characteristic)在兩個方向進行通訊。 ## GATT GATT定義了兩個藍牙低功耗設備使用稱為服務(Service)和特性(Characteristic)的概念來回傳輸數據的方式。 它使用稱為屬性協議(ATT, Attribute Protocol)的通用數據協議,該協議用於在一個簡單的查詢表中存儲**服務**,**特性**和相關數據,表中每個條目使用**16位元ID**。 一旦在兩個設備之間建立專用連接,GATT即可發揮作用,這意味著已經完成了由GAP管理的廣告流程。 GATT和connection最重要的是connection是獨占(exclusive)的。 這意味著BLE外圍設備一次只能連接到一個中央設備! 只要外圍設備連接到中央設備,它就會停止自我宣傳,而其他設備將無法再查看或連接到它,直到現有連接中斷。 建立連接也是允許雙向通訊的唯一方式,其中中央設備可以向外圍設備發送有意義的數據,反之亦然 ### Connected Network Topology 下圖應說明藍牙低功耗設備在連接環境中的工作方式。 外圍設備一次只能連接到一個中央設備(例如移動電話),但中央設備可以連接到多個外圍設備。 **如果需要在兩個外圍設備之間交換數據,則需要在所有消息都通過中央設備的情況下實施自定義郵箱系統**。 然而,一旦在外圍設備和中央設備之間建立連接,就可以在兩個方向上進行通訊,這與僅使用廣告數據和GAP的單向廣播方法不同。  ### GATT Transactions 使用GATT理解的一個重要概念是服務器/客戶端關係。外圍設備稱為GATT服務器,它保存ATT查找數據和服務及特性定義,以及GATT客戶端(電話/平板電腦),它向此服務器發送請求。所有事務都由接收GATT服務器回應的GATT客戶端開始。 建立連接時,外圍設備將向中央設備建議“**連接間隔(Connection Interval)**”,並且中央設備將嘗試重新連接每個連接間隔以查看是否有可用的新數據等。重要的是要記住,這個連接間隔實際上只是一個建議! 您的中央設備可能無法兌現請求,因為它正在忙於與其他外圍設備通信,或者所需的系統資源不可用。 下圖應說明外圍設備(GATT服務器)和中央設備(GATT客戶端)之間的數據交換過程,主設備啟動每個事務:  ### Services and Characteristics BLE的GATT事務基於名為**Profile**,**Service**和**Characteristic**的高級嵌套物件,如下圖所示:  #### Profiles BLE外圍設備實際上本身不存在Profile,它是簡單的由Bluetooth SIG或外圍設備設計人員編譯的預定義服務集合。 例如,心率Profile結合了心率服務和設備信息服務。可在此處查看官方採用基於GATT的Profile完整列表:[Profiles Overview]。 #### Services Service用於將數據分解為邏輯實體,並包含稱為Characteristic的特定數據塊。Service可以具有一個或多個Characteristic,並且每個Service通過稱為UUID的唯一數字ID將其自身與其他服務區分開來,**UUID可以是16位元(對於正式採用的BLE服務)或128位元(對於自定義服務)**。 可以在Bluetooth Developer Portal的“[Servicce]”頁面上看到正式採用的BLE服務的完整列表。 例如,如果您查看[心率服務],我們可以看到這個官方採用的服務具有0x180D的16位UUID,並且包含多達3個Characteristic,但只有第一個是必需的:心率測量,身體傳感器位置和心率控制點(Heart Rate Measurement, Body Sensor Location and Heart Rate Control Point)。 #### Characteristics GATT事務中的最低級別概念是特性(Characteristic),其封裝單個數據點(儘管它可能包含相關數據的陣列,例如來自3軸加速度計的X / Y / Z值等)。 與Service類似,每個Characteristic通過預定義的16位或128位UUID進行區分,您可以自由使用[Bluetooth SIG定義的標準Characteristic](確保互操作性和支持BLE的硬體/軟體)或定義您自己的自定義Characteristic,只有您的外圍設備和SW可以理解。 例如,[心率測量特性]對於心率服務是強制性的,並且使用UUID為0x2A37。它以描述HRM數據格式的單個8位元值開始(無論數據是UINT8還是UINT16等),並且繼續包括與該配置byte匹配的心率測量數據。 Characteristic是與BLE外圍設備交互的要點,因此理解這一概念非常重要。 它們還用於將數據發送回BLE外圍設備,因為您還可以寫入Characteristic。 **您可以使用自定義“UART Service”和兩個Characteristic實現簡單的UART類型接口,一個用於TX通道,另一個用於RX通道,其中一個特性可能配置為只讀,另一個特性具有寫權限**。 [Profiles Overview]: https://www.bluetooth.com/specifications/gatt [心率服務]: https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.heart_rate.xml [Servicce]: https://www.bluetooth.com/specifications/gatt/services [心率測量特性]: https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.heart_rate_measurement.xml [Bluetooth SIG定義的標準Characteristic]: https://www.bluetooth.com/specifications/gatt/characteristics
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.