背景介紹
BLE的通信和以太網,wifi有個重大的不同是:BLE通信的設備往往有特定的功能。且這個功能不會在運行中發生變化。
因此藍牙設備通信的時候,只能訪問預先定義好的(也就是配置文件profile)的功能。
那profile里寫了啥?寫了服務,服務里寫了各種功能屬性(如溫度,濕度,開關狀態等非常多)。
怎樣表示屬性,使用ATT(屬性協議),很多零散的屬性,怎么組織起來,設備之間怎么溝通,就通過GATT協議來實現。
所以ATT是GATT協議的基石。GATT實現了通信的整個過程的各種細節。
GATT的角色
標準里定義了GATT 服務器和GATT客戶端。
- 將定義屬性的一方叫GATT服務器。也就是提供數據服務的一端
- 將使用屬性數據的一方叫GATT客戶端。
所以通常手機會是GATT客戶端。從GATT服務端(例如溫濕度設備)獲取數據。
如果服務端有提供可控制的屬性,那么客戶端就可以控制設備。否則就沒有這個功能。
通用屬性配置文件(profile)
其結構如下所示。
層級關系就是最上層profile-》servie——》attribute。
在代碼里,通常直接就定義服務了,不會先弄個profile結構體。
以心率服務舉例
公共服務和私有服務
公共服務:藍牙官方定義了很多的公共服務,他們有明確定義的屬性和操作方法。實現了公共服務的設備,不管是哪個廠家,都能看懂并正確操作此服務。
私有服務: 自定義的服務,只有自己能看懂,需要雙方都懂各屬性的含義
心率服務是公共服務,
在如下位置可以找到標準定義
心率profile定義
心率service定義
屬性還有權限、UUID這部分內容,放在后續的文展開。