-
BLE角色
對於一個BLE設備,當和其他藍牙設備通信或者加入一個BLE網絡時,其可能有四個角色:
-
Broadcaster: 又稱為Advertiser,周期性的向周圍設備廣播數據,
-
Observer:又稱為Scanner,可以監聽廣播數據或者搜索周圍設備,
-
Central: 又稱為master,負責掃描設備並發起建立請求,在建立連接后變成master
-
Peripheral: 可稱為slave, 負責廣播的並接收連接請求的設備在建立連接后稱為slave
這些角色是鏈路層定義的,是根據設備是否建立連接來划分分的,可以將這四個類型的設備邏輯的划分為兩組:
-
advertiser和scanner
-
master和slave
advertiser 和 scanner屬於廣播階段的概念,即在建立連接之前設備角色。master 和slave屬於建立連接之后的概念,一旦建立連接,scanner角色變為master,advertiser變為slave。
例如一個心率感應器(Heart rate sensor)和手機連接:
心率感應器HRS(Heart rate sensor)發送廣播數據,當手機掃描時,能發現心率感應器,並與其建立連接,那么建立連接后,心率感應器的角色是slave,而手機的角色是maser。
但是有的設備做法相反,例如小米手機和小米手環,在他們的實現中,則是由手機發送廣播,手環負責掃描周圍設備,來建立連接,這種情況,手機作為slave,而手環作為master。
2. Server 和client
根據應用場景的需求,一個設備可以是master,也可以是slave或者二者兼備。初始化建立連接的設備稱為master,負責廣播的並接收連接請求的設備稱為slave
通過上面的例子可以看到,在建立連接后,支持HRS的手環提供了檢測心率的功能,稱其為server,因為其提供了某種服務,而手機僅僅是將server端的功能獲取並展現出來,稱其為client。於是對於BLE設備,依據是否提供服務,可以將這個設備分為是server還是client。
Server 和client是ATT/GATT層定義的概念,ATT采用的是client/server模式的交互方式,Client從server端請求數據,server將數據發送給client。
Master和slaver是相對連接而言,client和server是獨立於master和slave的概念,每個BLE設備有可能是client或者server或者二者兼備。
舉例如下:
一個支持BLE的燈可以使用手機APP通過BLE協議來控制,手機負責發現燈並主動發起建立連接,燈的角色是Peripheral,手機的角色是Central。
而燈提供了亮度和色彩控制服務,可以使用手機來調節,因此燈是一個服務的提供者(Server)角色,而手機是響應的client。
3. 狀態轉換
BLE定義的角色,可以相互轉換,於是有一個或者多個狀態機(BLE4.0僅支持一個狀態機),每個狀態機可能有五種狀態。
Standby:沒有任何活動,即不發送數據也不接收數據,
Advertising:發送廣播數據
Scanning:監聽廣播數據或者主動掃描周圍設備
Initiating:接到廣播數據后,主動發起連接(CONNECT_REQ),由Scanning的角色發起。
Connection:master和slave建立連接,而后兩個設備在數據通道上通信,而不再使用廣播和掃描的方式。