低功耗藍(lán)牙(BLE) - 屬性(實(shí)例說明)

一、屬性(Attribute)

用過BLE的同學(xué)都知道“屬性”?(簡稱ATT),那么什么是屬性呢?寬泛的講,屬性是一條帶有標(biāo)簽的、可以被尋址的數(shù)據(jù)。

屬性由3部分組成:屬性句柄、屬性類型、屬性值,如圖1所示。

圖1 屬性結(jié)構(gòu)


1、屬性句柄(Attribute Handle)

有效的ATT句柄范圍是0x0001 ~ 0xFFFF。如圖2所示,最左側(cè)一列就是ATT句柄,從0x0001開始。

圖2 通用屬性

2、屬性類型(Attribute Type)

128位通用唯一識別碼(UUID)用來標(biāo)識ATT的類型。為了提高傳輸效率,藍(lán)牙技術(shù)聯(lián)盟(SIG)定義了一個128位的“藍(lán)牙UUID基數(shù)”(00000000-0000-1000-8000-00805F9B34FB),結(jié)合一個16位的數(shù)使用。

例如,圖2中的16位UUID “0x2800”,完整的128位UUID便是00002800-0000-1000-8000-00805F9B34FB。

低功耗藍(lán)牙使用的UUID被分為5組:

0x1800 ~ 0x26FF:服務(wù)類型;

0x2700 ~ 0x27FF:計(jì)量單位;

0x2800 ~ 0x28FF:屬性類型;

0x2900 ~ 0x29FF:特性描述;

0x2A00 ~ 0x7FFF:特性類型;

下面是SIG官網(wǎng)對各組UUID定義的鏈接地址:

服務(wù)類型:https://www.bluetooth.com/specifications/gatt/services

屬性類型:https://www.bluetooth.com/specifications/gatt/declarations

特性描述:https://www.bluetooth.com/specifications/gatt/descriptors

特性類型:https://www.bluetooth.com/specifications/gatt/characteristics

例如,在圖3中

ATT句柄為0x0022的屬性,第2列UUID “0x2800”表示ATT類型是“主服務(wù)”,第4列值為“0x1812”表示服務(wù)類型是“HID服務(wù)”;

ATT句柄為0x0023的屬性,第2列UUID “0x2803”表示ATT類型是“特性聲明”;

ATT句柄為0x0024的屬性,第2列UUID “0x2A4D”表示ATT類型是“報告”;

ATT句柄為0x0025的屬性,第2列UUID “0x2902”表示特性描述是“客戶端特性配置”;


圖3 HID服務(wù)

如果自定義一個服務(wù),一般會指定一個128位的UUID,這個UUID不能和SIG已經(jīng)定義的服務(wù)類型相同。

例如,圖4展示了一個未知服務(wù),包含1個主服務(wù),UUID為“AB5E0001-5A21-4F05-BC7D-AF01F617B664”。

還包含3個特性,第1個特性聲明了UUID為“AB5E0002-5A21-4F05-BC7D-AF01F617B664”的屬性用于接收客戶端發(fā)來的數(shù)據(jù),支持寫入操作(ATT句柄為0x0036的屬性,屬性值的第1個字節(jié)為0x08,即Bit3為1,所以支持寫入操作。參考后面的“特性聲明”部分);

第2個特性聲明了UUID為“AB5E0003-5A21-4F05-BC7D-AF01F617B664”的屬性用于發(fā)送數(shù)據(jù)給客戶端,支持讀取和通知操作(ATT句柄為0x0038的屬性,屬性值的第1個字節(jié)為0x12。Bit1為1,所以支持讀取操作;Bit4為1,所以支持通知操作。參考后面的“特性聲明”部分),從圖中藍(lán)色部分可以看出數(shù)據(jù)長度為20字節(jié);

第3個特性聲明了UUID為“AB5E0004-5A21-4F05-BC7D-AF01F617B664”的屬性用于發(fā)送數(shù)據(jù)給客戶端,支持讀取和通知操作(ATT句柄為0x003B的屬性,屬性值的第1個字節(jié)為0x12。Bit1為1,所以支持讀取操作;Bit4為1,所以支持通知操作。參考后面的“特性聲明”部分),從圖中藍(lán)色部分可以看出數(shù)據(jù)長度為1字節(jié);


圖4 未知服務(wù)

3、屬性值(Attribute Value)

ATT值長度從0字節(jié)到最長512字節(jié),但某些類型的ATT值長度是固定的。例如,圖4中ATT句柄為0x003A的屬性,UUID“0x2902”表示ATT類型是“客戶端特性配置”,該屬性的ATT值就是固定的2個字節(jié)長度(參考后面的“特性描述”部分)。

二、特性(Characteristic)

特性就是把一些屬性組合在一起,歸為一類。例如,圖3中ATT句柄從0x002B到0x002E的4個屬性就組成了一個特性,其行為就是要發(fā)送數(shù)據(jù)給客戶端。

特性包含3個要素:

聲明;

數(shù)值;

描述;

1、特性聲明(Characteristic Declaration)

特性聲明的UUID為0x2803,即ATT類型為特性聲明(0x2803)。


圖5 特性聲明

(1)性質(zhì)(Properties)

長度為8位,確定了特性數(shù)值屬性對操作的支持情況,包括:讀取、寫入、通知、指示、廣播、命令、簽名認(rèn)證。每一位表示一種操作,Bit位為1表示支持該項(xiàng)操作,為0表示不支持,如表1所示。


表1 特性的性質(zhì)

(2)數(shù)值句柄(Value Handle)

與客戶端進(jìn)行數(shù)據(jù)交互的屬性句柄,即實(shí)際用來傳輸數(shù)據(jù)的屬性句柄。

(3)特性UUID(Characteristic UUID)

標(biāo)識特性數(shù)值的類型的UUID。

例如,圖3中ATT句柄為0x002B的屬性就是一個“特性聲明”,第4列ATT值為“1A:2C:00:4D:2A”。其中第1個字節(jié)0x1A(0b00011010),表示性質(zhì)支持讀取、寫入和通知;第2和3字節(jié)組合后即0x002C,表示用來傳遞數(shù)據(jù)的ATT句柄為“0x002C”;第4和5字節(jié)組合后即0x2A4D,表示該特性數(shù)值的類型為“0x2A4D”(Report)。

2、特性數(shù)值

也是一個屬性,屬性類型必須與特性聲明的特性UUID字段一致。

例如,圖3中ATT句柄為0x002C的屬性就是一個“特性數(shù)值”,ATT類型UUID為“0x2A4D”,就是在ATT句柄為0x002B的“特性聲明”的ATT值中指定的。

3、特性描述

“特性描述”的UUID范圍0x2900-0x290F,如表2所示。一個特性可以包含任意多的描述。


表2 特性描述

例如,客戶端特性配置的ATT值長度2個字節(jié),Bit0表示通知是否使能,Bit1表示指示是否使能,其它14個Bit未定義。在圖3中,ATT句柄為0x002D的屬性就是一個“客戶端特性配置”,其ATT值為“0x0001”,就表示通知操作已打開。

三、服務(wù)

一個服務(wù)就描述了一種數(shù)值。例如,電池服務(wù)就描述了電量值是如何傳給客戶端的;設(shè)備信息服務(wù)描述了設(shè)備相關(guān)信息。HID服務(wù)描述了人機(jī)交互設(shè)備是如何交互數(shù)據(jù)的。從圖2、3、4,我們也可以看出服務(wù)包含了一個或多個特性,可以簡單的認(rèn)為服務(wù)就是多個特性的集合。

最后,附上所有UUID列表文件下載通道:

鏈接:https://pan.baidu.com/s/1FykSrJKFZrRA2pnM3Wcmaw(提取碼:q46i),這個列表是飛哥辛辛苦苦從SIG官網(wǎng)提取出來的,方便查閱,希望對大家有幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容