基本概念
想要進行Ble相關(guān)的開發(fā),我們必須具備一定的基礎(chǔ)知識,當然基礎(chǔ)知識肯定是非常簡單的。
設(shè)備角色
首先要明白的是,這兩種角色的區(qū)分是硬件層面上,而且是成對出現(xiàn)的相對概念:
** 中心設(shè)備(Central device) **:功能相對強大,用來掃描和連接周邊設(shè)備的,例如手機、平板等
** 周邊設(shè)備(Central device) **:功能相對簡單,功耗較小,被中心設(shè)備連接以提供數(shù)據(jù)的,例如手環(huán)、智能體溫計等
其實從最根本上來講,它應(yīng)該是在對建立連接的過程不同角色的一種區(qū)分。我們知道藍牙設(shè)備要想讓別人知道自己的存在,是要不間斷的對外放松廣播的,而另外一方則需要掃描并回復(fù)該廣播包,這樣才能建立連接,在這個過程中,負責廣播的就是peripheral,而負責掃描的是Central。
關(guān)于兩者的連接過程需要注意:
- 中心設(shè)備可以同時連接多個周邊設(shè)備。
- 周邊設(shè)備一旦被連接上,立刻停止廣播,斷開后繼續(xù)廣播
- 任何時候只能一個設(shè)備嘗試連接,排隊連接。
GATT
BLE技術(shù)是基于GATT進行通信的,GATT是一種屬性傳輸協(xié)議,簡單的講可以認為是一種屬性傳輸?shù)膽?yīng)用層協(xié)議。
它的結(jié)構(gòu)非常簡單:

你可以把他看成xml來理解:
- 每個GATT由完成不同功能的Service組成;
- 每個Service由不同的Characteristic組成;
- 每個Characteristic由一個value和一個或者多個Descriptor組成;
- Service、Characteristic相當于標簽(Service相當于他的類別,Characteristic相當于它的名字),而value才真正的包含數(shù)據(jù),Descriptor是對這個value進行的說明和描述,當然我們可以從不同角度來描述和說明,因此可以有多個Descriptor.
這樣子理解可能不夠準確,下面我們來舉一個簡單的例子進行說明:
常見的小米手環(huán)是一個BLE設(shè)備,(假設(shè))它包含三個Service,分別是提供設(shè)備信息的Service、提供步數(shù)的Service、檢測心率的Service;
而設(shè)備信息的service中包含的characteristic包括廠商信息、硬件信息、版本信息等;而心率Service則包括心率characteristic等,而心率characteristic中的value則真正的包含心率的數(shù)據(jù),而descriptor則是對該value的描述說明,比如value的單位啊,描述啊,權(quán)限啊等。
GATT C/S
對GATT有了初步的了解,我們知道GATT是一種典型的C/S模式,既然是C/S那么我們就有必要對Server和client進行區(qū)分。
** GATT server ** vs. ** GATT client **。這兩種角色存在的階段則是建立連接之后,根據(jù)對話地位的不同進行區(qū)分的,很容易理解的是,保有數(shù)據(jù)的那一方我們稱之為GATT server,訪問數(shù)據(jù)的那一方我們稱之為GATT client。
這和我們之前提到的設(shè)備角色是不同層面的概念,有必要加以區(qū)分,我們還是用一個簡單的例子進行說明:
以手機和手表的例子來進行說明,手機和手機建立連接之前,我們都是用手機的藍牙搜索功能去搜索手表的藍牙設(shè)備,這個過程中很明顯手表在進行BLE廣播以便其他設(shè)備知道自己的存在,它在這個過程中就是peripheral的角色,而手機負責掃描的任務(wù),自然扮演的就是Center了;兩者建立了GATT連接后,當手機需要從手表中讀取步數(shù)等傳感器數(shù)據(jù)時,兩者交互的數(shù)據(jù)是保存在手表中的,因此此時手表就是GATT server的角色,自然手機就作為GATT client;而當手表想要從手機讀取短信電話等信息室,數(shù)據(jù)的保佑者又變成了手機,所以此時手機就是server ,而手表則是client。
Service/Characteristic
上面我們已經(jīng)對他們有了感性的理解,接下來我們來一些實用的信息:
- Characteristic是最小的數(shù)據(jù)邏輯單元?,F(xiàn)在不難理解了吧。
- value、descriptor中存儲數(shù)據(jù)的解析由Server的工程師決定,并無規(guī)范,雙發(fā)按照約定開發(fā)。
- Service/Characteristic均有一個唯一的UUID標識,UUID既有16位的也有128位的,我們需要了解的是16位的UUID是經(jīng)過藍牙組織認證的,是需要購買的,當然也有一些通用的16位UUID。
例如Heart Rate服務(wù)的UUID就是0X180D,代碼中表示為0X00001800-0000-1000-8000-00805f9b34fb,其他位為固定的。而128位的UUID則可以自定義。 - GATT連接是獨占的。
作者:小時不識月z
鏈接:http://www.itdecent.cn/p/29a730795294
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。