iOS - GATT Profile 简介
1、引言
現(xiàn)在低功耗藍(lán)牙(BLE)連接都是建立在 GATT (Generic Attribute Profile) 協(xié)議之上。GATT 是一個(gè)在藍(lán)牙連接之上的發(fā)送和接收很短的數(shù)據(jù)段的通用規(guī)范,這些很短的數(shù)據(jù)段被稱為屬性(Attribute)。
2、GAP
詳細(xì)介紹 GATT 之前,需要了解 GAP(Generic Access Profile),它用來控制設(shè)備連接和廣播。GAP 使你的設(shè)備被其他設(shè)備可見,并決定了你的設(shè)備是否可以或者怎樣與合同設(shè)備進(jìn)行交互。例如 Beacon 設(shè)備就只是向外廣播,不支持連接,小米手環(huán)等設(shè)備就可以與中心設(shè)備連接。
2.1 設(shè)備角色
GAP 給設(shè)備定義了若干角色,其中主要的兩個(gè)是:外圍設(shè)備(Peripheral)和中心設(shè)備(Central)。
外圍設(shè)備:這一般就是非常小或者簡單的低功耗設(shè)備,用來提供數(shù)據(jù),并連接到一個(gè)更加相對強(qiáng)大的中心設(shè)備。例如小米手環(huán)。
中心設(shè)備:中心設(shè)備相對比較強(qiáng)大,用來連接其他外圍設(shè)備。例如手機(jī)等。
2.2 廣播數(shù)據(jù)
在 GAP 中外圍設(shè)備通過兩種方式向外廣播數(shù)據(jù):Advertising Data Payload(廣播數(shù)據(jù))和 Scan Response Data Payload(掃描回復(fù)),每種數(shù)據(jù)最長可以包含 31 byte。這里廣播數(shù)據(jù)是必需的,因?yàn)橥庠O(shè)必需不停的向外廣播,讓中心設(shè)備知道它的存在。掃描回復(fù)是可選的,中心設(shè)備可以向外設(shè)請求掃描回復(fù),這里包含一些設(shè)備額外的信息,例如設(shè)備的名字。
2.3 廣播流程
GAP 的廣播工作流程如下圖所示。
從圖中我們可以清晰看出廣播數(shù)據(jù)和掃描回復(fù)數(shù)據(jù)是怎么工作的。外圍設(shè)備會(huì)設(shè)定一個(gè)廣播間隔,每個(gè)廣播間隔中,它會(huì)重新發(fā)送自己的廣播數(shù)據(jù)。廣播間隔越長,越省電,同時(shí)也不太容易掃描到。
2.4 廣播的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
大部分情況下,外設(shè)通過廣播自己來讓中心設(shè)備發(fā)現(xiàn)自己,并建立 GATT 連接,從而進(jìn)行更多的數(shù)據(jù)交換。也有些情況是不需要連接的,只要外設(shè)廣播自己的數(shù)據(jù)即可。用這種方式主要目的是讓外圍設(shè)備,把自己的信息發(fā)送給多個(gè)中心設(shè)備。因?yàn)榛?GATT 連接的方式,只能是一個(gè)外設(shè)連接一個(gè)中心設(shè)備。使用廣播這種方式最典型的應(yīng)用就是蘋果的 iBeacon。廣播工作模式下的網(wǎng)絡(luò)拓?fù)鋱D如下:
3、GATT
GATT 的全名是 Generic Attribute Profile(姑且翻譯成:普通屬性協(xié)議),它定義兩個(gè) BLE 設(shè)備通過叫做 Service 和 Characteristic 的東西進(jìn)行通信。GATT 就是使用了 ATT(Attribute Protocol)協(xié)議,ATT 協(xié)議把 Service, Characteristic 以及對應(yīng)的數(shù)據(jù)保存在一個(gè)查找表中,此查找表使用 16 bit ID 作為每一項(xiàng)的索引。
一旦兩個(gè)設(shè)備建立起了連接,GATT 就開始起作用了,這也意味著,你必需完成前面的 GAP 協(xié)議。這里需要說明的是,GATT 連接,必需先經(jīng)過 GAP 協(xié)議。實(shí)際上,在 Android 開發(fā)中,可以直接使用設(shè)備的 MAC 地址,發(fā)起連接,可以不經(jīng)過掃描的步驟。這并不意味不需要經(jīng)過 GAP,實(shí)際上在芯片級別已經(jīng)給你做好了,藍(lán)牙芯片發(fā)起連接,總是先掃描設(shè)備,掃描到了才會(huì)發(fā)起連接。
GATT 連接需要特別注意的是:GATT 連接是獨(dú)占的。也就是一個(gè) BLE 外設(shè)同時(shí)只能被一個(gè)中心設(shè)備連接。一旦外設(shè)被連接,它就會(huì)馬上停止廣播,這樣它就對其他設(shè)備不可見了。當(dāng)設(shè)備斷開,它又開始廣播。
中心設(shè)備和外設(shè)需要雙向通信的話,唯一的方式就是建立 GATT 連接。
3.1 GATT 連接的網(wǎng)絡(luò)拓?fù)?/p>
下圖展示了 GATT 連接網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。這里很清楚的顯示,一個(gè)外設(shè)只能連接一個(gè)中心設(shè)備,而一個(gè)中心設(shè)備可以連接多個(gè)外設(shè)。
一旦建立起了連接,通信就是雙向的了,對比前面的 GAP 廣播的網(wǎng)絡(luò)拓?fù)?#xff0c;GAP 通信是單向的。如果你要讓兩個(gè)設(shè)備外設(shè)能通信,就只能通過中心設(shè)備中轉(zhuǎn)。
3.2 GATT 通信事務(wù)
GATT 通信的雙方是 C/S 關(guān)系。外設(shè)作為 GATT 服務(wù)端(Server),它維持了 ATT 的查找表以及 service 和 characteristic 的定義。中心設(shè)備是 GATT 客戶端(Client),它向 Server 發(fā)起請求。需要注意的是,所有的通信事件,都是由客戶端(也叫主設(shè)備,Master)發(fā)起,并且接收服務(wù)端(也叫從設(shè)備,Slave)的響應(yīng)。
一旦連接建立,外設(shè)將會(huì)給中心設(shè)備建議一個(gè)連接間隔(Connection Interval),這樣,中心設(shè)備就會(huì)在每個(gè)連接間隔嘗試去重新連接,檢查是否有新的數(shù)據(jù)。但是,這個(gè)連接間隔只是一個(gè)建議,你的中心設(shè)備可能并不會(huì)嚴(yán)格按照這個(gè)間隔來執(zhí)行,例如你的中心設(shè)備正在忙于連接其他的外設(shè),或者中心設(shè)備資源太忙。
下圖展示一個(gè)外設(shè)(GATT 服務(wù)端)和中心設(shè)備(GATT 客戶端)之間的數(shù)據(jù)交換流程,可以看到的是,每次都是主設(shè)備發(fā)起請求:
3.3 GATT 結(jié)構(gòu)
GATT 事務(wù)是建立在嵌套的 Profiles, Services 和 Characteristics 之上的的,如下圖所示:
1、Profile 并不是實(shí)際存在于 BLE 外設(shè)上的,它只是一個(gè)被 Bluetooth SIG 或者外設(shè)設(shè)計(jì)者預(yù)先定義的 Service 的集合。例如心率 Profile(Heart Rate Profile)就是結(jié)合了 Heart Rate Service 和 Device Information Service。所有官方通過 GATT Profile 的列表可以從這里找到。
2、Service 是把數(shù)據(jù)分成一個(gè)個(gè)的獨(dú)立邏輯項(xiàng),它包含一個(gè)或者多個(gè) Characteristic。每個(gè) Service 有一個(gè) UUID 唯一標(biāo)識。 UUID 有 16 bit 的,或者 128 bit 的。16 bit 的 UUID 是官方通過認(rèn)證的,需要花錢購買,128 bit 是自定義的,這個(gè)就可以自己隨便設(shè)置。
官方通過了一些標(biāo)準(zhǔn) Service,完整列表在這里。以 Heart Rate Service 為例,可以看到它的官方通過 16 bit UUID 是 0x180D,包含 3 個(gè) Characteristic:Heart Rate Measurement, Body Sensor Location 和 Heart Rate Control Point,并且定義了只有第一個(gè)是必須的,其它是可選實(shí)現(xiàn)的。
3、Characteristic 是在 GATT 事務(wù)中的最低界別的,Characteristic 是最小的邏輯數(shù)據(jù)單元,當(dāng)然它可能包含一組關(guān)聯(lián)的數(shù)據(jù),例如加速度計(jì)的 X/Y/Z 三軸值。
與 Service 類似,每個(gè) Characteristic 用 16 bit 或者 128 bit 的 UUID 唯一標(biāo)識。你可以免費(fèi)使用 Bluetooth SIG 官方定義的標(biāo)準(zhǔn) Characteristic,使用官方定義的,可以確保 BLE 的軟件和硬件能相互理解。當(dāng)然,你可以自定義 Characteristic,這樣的話,就只有你自己的軟件和外設(shè)能夠相互理解。
舉個(gè)例子,Heart Rate Measurement Characteristic,這是上面提到的 Heart Rate Service 必需實(shí)現(xiàn)的 Characteristic,它的 UUID 是 0x2A37。它的數(shù)據(jù)結(jié)構(gòu)是,開始 8 bit 定義心率數(shù)據(jù)格式,接下來就是對應(yīng)格式的實(shí)際心率數(shù)據(jù)。
實(shí)際上,和 BLE 外設(shè)打交道,主要是通過 Characteristic。你可以從 Characteristic 讀取數(shù)據(jù),也可以往 Characteristic 寫數(shù)據(jù)。這樣就實(shí)現(xiàn)了雙向的通信。所以你可以自己實(shí)現(xiàn)一個(gè)類似串口(UART)的 Sevice,這個(gè) Service 中包含兩個(gè) Characteristic,一個(gè)被配置只讀的通道(RX),另一個(gè)配置為只寫的通道(TX)。
3.4 更多內(nèi)容
Bluetooth SIG 官方文檔
藍(lán)牙核心協(xié)議文檔
Bluetooth Developer Portal
官方通過的 BLE Profile
官方通過的 BLE Service
官方通過的 BLE Characteristic
移動(dòng)開發(fā)資源
Android BLE GUIDE - Android developer 官網(wǎng)的入門文章,里面有實(shí)例代碼和講解視頻。
Application Accelerator Kit - iOS, Android or Windows Phone 移動(dòng)開發(fā)樣例
視頻: Core Bluetooth 101 - WWDC 2012 關(guān)于 BLE 開發(fā)的視頻。
————————————————
版權(quán)聲明:本文為CSDN博主「fqerfcqewfd」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43172830/article/details/83828092
總結(jié)
以上是生活随笔為你收集整理的iOS - GATT Profile 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 001.组织机构代码生成
- 下一篇: 在线相册管理系统