1. 程式人生 > >【譯】iOS藍芽程式設計指南 -- 核心藍芽概述

【譯】iOS藍芽程式設計指南 -- 核心藍芽概述

隨著穿戴裝置和智慧家居的熱情不斷,app藍芽的開發也很火熱,基於iOS藍芽的開發資料有不少,但是最最值得學習的必然是apple自家的文件啦,我之前的專案基於藍芽4.0,開發過程中用到Core Bluetooth框架,算是我學習的筆記吧!涉及到幾個部分,我打算分開把他們整理出來,本篇文章通過對Core Bluetooth Programming Guide的翻譯,為大家介紹iOS藍芽4.0程式設計的一些術語和概念,後續文章將會簡單介紹下程式碼的流程。本人實力有限,瞭解的深度不是很廣,還請各位看官輕點拍磚!

話不多說說,讓我們進入正題吧:

核心藍芽概述

Core Bluetooth 框架使你的 Mac/iOS app 能夠與低功耗藍芽裝置進行通訊。例如,你的app能夠搜尋,探索低功耗藍芽裝置,並與之互動,如心率監聽器,數字恆溫器,甚至能夠與其它iOS裝置進行互動。

該框架基於BLE4.0規範,直接適用於藍芽低功率裝置的使用。也就是說,該框架隱藏了很多開發規範的底層實現細節,使您更容易開發出與藍芽低功耗裝置進行互動的app。因為該說明中涉及到藍芽框架的一些概念和術語在本說明中已經被廣泛採用,本文將向你介紹這個 Core Bluetooth 框架中的一些關鍵術語和概念。

Central 和 Peripheral 在藍芽互動中的角色

所有涉及藍芽低功耗的互動中有兩個主要的角色:中心Central和外圍裝置Perpheral。根據一些傳統的客戶端-服務端結構,Peripheral通常具有其他裝置所需要的資料,而Central通常通過使用Perpheral

的資訊來實現一些特定的功能。如下圖所示,例如,一個心率監聽器可能含有一些有用的資訊,你的 Mac/iOS app 可能需要以使用者友好的方式顯示使用者的心率。


Alt text

Central 發現並連線廣播中的 Peripheral

Peripheral向外廣播一些廣告包形式的資料,廣告包是一個相對較小的束,可能包含Peripheral提供的有用資訊資料,如外設的名稱和主要功能。例如,一個數字恆溫器可以廣告包含其中的一個房間的即時溫度。在低功耗藍芽中,廣播是Peripheral被獲知的主要方式。

從另一方面說,Central可以掃描和監聽任何對廣播內容感興趣的Peripheral

。如下圖,Central可以請求連線任何已對外廣播內容的Peripheral


Alt text

資料在 Peripheral 中如何構成

連線到Peripheral的目的是為了對它所提供的資料進行探索和互動。在此之前,理解資料在Peripheral中是怎樣構成的將會對我們有所幫助。

Peripheral包含一個或者多個Service以及有關其連線訊號強度的有用資訊。Service是指實現一個函式或者功能的裝置(或者裝置的一部分)的資料採集和相關行為的集合。例如,一個心率監聽器的Service可能包含從監聽心率感測器採集的心率資料。

Service本身由Characteristic或者其他被包含的Service所組成。Characteristic提供了更多有關PeripheralService中的詳細內容。例如,剛才描述的心率service中可以包含一個用來描述該裝置的心率感測器所記錄身體位置的characteristic或者包含傳送測量心率資料的Characteristic。如下圖,表示了一個心率監聽器可能包含的ServiceCharacteristic


Alt text

Central 在 Peripheral 上的資料探索及互動

Central成功與Peripheral建立連線後,就能發現到Peripheral提供的所有的ServiceCharacteristic。(廣播資料可能只包含一部分可見的Service)

Central可以通過讀取或者寫入ServiceCharacteristicvaluePeripheral進行互動。例如,你的 app 可能從數字恆溫器上請求當前的室內溫度,或者為恆溫器提供一個數值以設定室內溫度。

Central,Peripherals 以及 Peripheral資料如何表示

有關低功耗藍芽互動中的主要角色和資料在Core Bluetooth中以簡單明瞭的方式表示。

Central 端的物件

當你使用本地Central和遠端Peripheral進行互動,您將在低功耗藍芽Central側執行操作。除非你是建立一個本地Peripheral裝置,並使它由一個Central端請求響應,大多數的藍芽互動由Central端完成。

本地 Central 和遠端 Peripheral

Central端,本地Central裝置表示為CBCentralManager。這些物件用來管理髮現或連線遠端Peripheral裝置(表示為CBPeripheral),包括掃描,發現和連線廣播中的Peripheral。如下圖所示:


Alt text

遠端 Peripheral 資料表示為 CBService 和CBCharacteristic

當你與遠端Peripheral(表示為CBPeripheral)進行資料互動時,你將處理它的ServiceCharacteristic。在Core Bluetooth框架中,遠端PeripheralService表示為CBService。相類似的,遠端PeripheralServiceCharacteritic表示為CBCharacteristic。如下圖所示:


Alt text

Peripheral 端的物件

OS X v10.9和iOS6以上的Mac/iOS裝置能夠可以設定成低功耗藍芽的Peripheral,為其他Mac/iPhone/iPad 傳輸資料。當你設定好你的裝置使其能夠實現Peripheral的角色,你就可以完成低功耗藍芽互動的Peripheral端功能。

本地 Peripheral 和遠端 Central

Peripheral端,一個Peripheral裝置表示為CBPeripheralManager
。該物件用於管理那些包含本地Peripheral裝置的ServiceCharacteristic資料的Service,通過廣播這些服務的方式釋出到遠端Central裝置(表示為CBCentral)。Peripheral manager物件同樣可以響應遠端Central的讀取和寫入請求。如下圖所示:


Alt text

本地 Peripheral 資料表示為 CBMutableService 和 CBMutableCharacteristic

當你設定好和本地Peripheral(表示為CBPeripheralManager)資料互動,就可以處理ServiceCharacteristic的可變版本。在Core Bluetooth框架中,本地PeripheralService表示為CBMutableService。同樣地,本地PeripheralServiceCharacteristic表示為CBMutableCharacteristic。如下圖所示:


Alt text