小引
隨著穿戴設備和智能家居的熱情不斷,app藍牙的開發也很火熱,基于iOS藍牙的開發資料有不少,但是最最值得學習的必然是apple自家的文檔啦,我之前的項目基于藍牙4.0,開發過程中用到Core Bluetooth
框架,算是我學習的筆記吧!涉及到幾個部分,我打算分開把他們整理出來,本篇文章通過對Core Bluetooth Programming Guide的翻譯,為大家介紹iOS藍牙4.0編程的一些術語和概念,后續文章將會簡單介紹下代碼的流程。本人實力有限,了解的深度不是很廣,還請各位看官輕點拍磚!
話不多說說,讓我們進入正題吧:
注:本文譯自Core Bluetooth Programming Guide
核心藍牙概述
Core Bluetooth
框架使你的 Mac/iOS app 能夠與低功耗藍牙設備進行通訊。例如,你的app能夠搜尋,探索低功耗藍牙設備,并與之互動,如心率監聽器,數字恒溫器,甚至能夠與其它iOS設備進行交互。
該框架基于BLE4.0規范,直接適用于藍牙低功率設備的使用。也就是說,該框架隱藏了很多開發規范的底層實現細節,使您更容易開發出與藍牙低功耗設備進行交互的app。因為該說明中涉及到藍牙框架的一些概念和術語在本說明中已經被廣泛采用,本文將向你介紹這個 Core Bluetooth
框架中的一些關鍵術語和概念。
Central 和 Peripheral 在藍牙交互中的角色
所有涉及藍牙低功耗的交互中有兩個主要的角色:中心Central
和外圍設備Perpheral
。根據一些傳統的客戶端-服務端
結構,Peripheral
通常具有其他設備所需要的數據,而Central
通常通過使用Perpheral
的信息來實現一些特定的功能。如下圖所示,例如,一個心率監聽器可能含有一些有用的信息,你的 Mac/iOS app 可能需要以用戶友好的方式顯示用戶的心率。
Central 發現并連接廣播中的 Peripheral
Peripheral
向外廣播一些廣告包形式的數據,廣告包是一個相對較小的束,可能包含Peripheral
提供的有用信息資料,如外設的名稱和主要功能。例如,一個數字恒溫器可以廣告包含其中的一個房間的即時溫度。在低功耗藍牙中,廣播是Peripheral
被獲知的主要方式。
從另一方面說,Central
可以掃描和監聽任何對廣播內容感興趣的Peripheral
。如下圖,Central
可以請求連接任何已對外廣播內容的Peripheral
。
數據在 Peripheral 中如何構成
連接到Peripheral
的目的是為了對它所提供的數據進行探索和交互。在此之前,理解數據在Peripheral
中是怎樣構成的將會對我們有所幫助。
Peripheral
包含一個或者多個Service
以及有關其連接信號強度的有用信息。Service
是指實現一個函數或者功能的設備(或者設備的一部分)的數據采集和相關行為的集合。例如,一個心率監聽器的Service
可能包含從監聽心率傳感器采集的心率數據。
而Service
本身由Characteristic
或者其他被包含的Service
所組成。Characteristic
提供了更多有關Peripheral
的Service
中的詳細內容。例如,剛才描述的心率service
中可以包含一個用來描述該設備的心率傳感器所記錄身體位置的characteristic
或者包含發送測量心率數據的Characteristic
。如下圖,表示了一個心率監聽器可能包含的Service
和Characteristic
。
Central 在 Peripheral 上的數據探索及交互
在Central
成功與Peripheral
建立連接后,就能發現到Peripheral
提供的所有的Service
和Characteristic
。(廣播數據可能只包含一部分可見的Service
)
Central
可以通過讀取或者寫入Service
中Characteristic
的value
與Peripheral
進行交互。例如,你的 app 可能從數字恒溫器上請求當前的室內溫度,或者為恒溫器提供一個數值以設置室內溫度。
Central,Peripherals 以及 Peripheral數據如何表示
有關低功耗藍牙交互中的主要角色和數據在Core Bluetooth
中以簡單明了的方式表示。
Central 端的對象
當你使用本地Central
和遠程Peripheral
進行交互,您將在低功耗藍牙Central
側執行操作。除非你是建立一個本地Peripheral
設備,并使它由一個Central
端請求響應,大多數的藍牙交互由Central
端完成。
本地 Central 和遠程 Peripheral
在Central
端,本地Central
設備表示為CBCentralManager。這些對象用來管理發現或連接遠程Peripheral
設備(表示為CBPeripheral),包括掃描,發現和連接廣播中的Peripheral
。如下圖所示:
遠程 Peripheral 數據表示為 CBService 和CBCharacteristic
當你與遠程Peripheral
(表示為CBPeripheral
)進行數據交互時,你將處理它的Service
和Characteristic
。在Core Bluetooth
框架中,遠程Peripheral
的Service
表示為CBService
。相類似的,遠程Peripheral
中Service
的Characteritic
表示為CBCharacteristic
。如下圖所示:
Peripheral 端的對象
OS X v10.9和iOS6以上的Mac/iOS設備能夠可以設置成低功耗藍牙的Peripheral
,為其他Mac/iPhone/iPad 傳輸數據。當你設置好你的設備使其能夠實現Peripheral
的角色,你就可以完成低功耗藍牙交互的Peripheral
端功能。
本地 Peripheral 和遠程 Central
在Peripheral
端,一個Peripheral
設備表示為CBPeripheralManager
。該對象用于管理那些包含本地Peripheral
設備的Service
和Characteristic
數據的Service
,通過廣播這些服務的方式發布到遠程Central
設備(表示為CBCentral
)。Peripheral manager
對象同樣可以響應遠程Central
的讀取和寫入請求。如下圖所示:
本地 Peripheral 數據表示為 CBMutableService 和 CBMutableCharacteristic
當你設置好和本地Peripheral
(表示為CBPeripheralManager
)數據交互,就可以處理Service
和Characteristic
的可變版本。在Core Bluetooth
框架中,本地Peripheral
的Service
表示為CBMutableService
。同樣地,本地Peripheral
中Service
的Characteristic
表示為CBMutableCharacteristic
。如下圖所示: