1. 程式人生 > >BLE4.0教程二 藍牙協議之服務與特征值分析

BLE4.0教程二 藍牙協議之服務與特征值分析

cli rac info onf eric ack 而已 訪問 搭建

1.關於服務與特征值的簡述

之前說到藍牙的連接過程,那藍牙連接之後具體是如何傳數據的呢。這裏做一下簡要說明。

藍牙4.0是以參數來進行數據傳輸的,即服務端定好一個參數,客戶端可以對這個參數進行讀,寫,通知等操作,這個東西我們稱之為特征值(characteristic

但一個參數不夠我們用,比如我們這個特征值是電量的值,另一個特征值是設備讀取的溫度值。

那這時候會有多個特征值,並且我們還會對它們分類,分出來的類我們稱之為服務(service)。

一個設備可以有多個服務,每一個服務可以包含多個特征值。為了方便操作,每個特征值都有他的屬性,例如長度(size,權限(permission

),值(value,描述(descriptor),如下圖。

技術分享圖片

2.ATTGATT

技術分享圖片

我們剛才介紹服務與特征值,那具體我們是怎麽去實現的呢.

藍牙4.0版本推出了低功耗規範,引入了兩個核心協議:ATT(Attribute Protocol)GATT(Generic Attribute Protocol).這兩個協議主要目標是BLE,但是也可以運行在傳統藍牙上(BR/EDR)。

ATT主要是規定了"屬性"的定義,GATT則是將這些"屬性"包裝成我們上面所講的服務、特征值等。

那我們是怎麽搭建起來我們的服務的呢?
大概可以概述為,由一個個屬性搭建起來的東西。如下圖,每一個屬性就會告訴使用者說,我是什麽,我帶有什麽,你能對我做什麽,即描述,值,權限

序號

描述

權限

屬性1

我是 服務A的開頭

只讀

服務號0001

屬性2

我是 特征值1的開頭

只讀

特征值1的值放在屬性3裏

特征值1的值類型

特征值1的值權限

屬性3

我是 特征值1的值

/

0

屬性4

我是 特征值1的特殊操作

讀寫

關閉

屬性5

我是 特征值2的開頭

只讀

屬性6

我是 特征值2的值

/

屬性7

我是 特征值2的特殊操作

讀寫

屬性8

我是 服務B的開頭

只讀

服務號0002

上圖是一個簡單的表述,真正的屬性表如下圖。

Handle

Type

Permission

Value

39

0x2800

(GATT Primary Service UUID)

Read

E0:FF(2 bytes)

(0xFFE0 = simple keys service custom UUID)

40

0x2803

(GATT Characteristic Declaration UUID)

Read

10:29:00:E1:FF(5 byte)

(0xFFE1 = Simple keys value custom UUID)

(0x0029 = handle 41)

(0x10 = characteristic properties :notify only)

41

0xFFE1

(simple keys state)

(none)

00(1 byte)

(value indicates states of keys)

42

0x2902

(GATT Client Characteristic Configuration UUID)

Read and Write

00:00(2 byte)

(value indicates whether notifications or indications are enabled)

43

0x2800

(GATT Primary Service UUID)

Read

A1:DD(2 byte)

(0xDDA1 = Other Service custom UUID)

屬性的定義是這樣的

Handle

Type

Permission

Value

Handle: 其實上面那張屬性表,在程序裏只是一個數組而已,所以Handle這個值其實我們是不需要專門去存的,他只是一個索引而已。

Type:屬性的類型,也即UUID ,藍牙標準組織已經對UUID進行了分類。

技術分享圖片

如上表中,服務的Type就是0X2800,所以每到一個服務,就會有一個Type類型為0x2800的屬性出現。

而特征值Declaration 的Type就是0x2803。至於特征值Value的Type可以是用戶自定義的。

Permission:屬性的訪問權限,一般有ReadWrite notifications indications

Value:屬性的值 最長可達512字節

BLE4.0教程二 藍牙協議之服務與特征值分析