iOS藍芽4.0(BLE)開發(一)

weixin_34146805發表於2017-07-04

    本文是參考了網上眾多資料總結。
    做iOS開發也有很長時間了一直沒有時間和機會做藍芽方面的開發。2016年由於工作需要,開始接觸藍芽開發,剛開始做的時候在網上搜尋各種文章,網上雖然關於這方面的東西也有很多,但是講解的比較詳細的少之又少。

一、iOS和藍芽相關的框架

  • GameKit.framework 多用於遊戲開發,僅限於iOS裝置之間的連線。
  • MultipeerConnectivity.framework 這個就是iOS裝置之間互相傳檔案用的。
  • ExternalAccessory.framework 這個框架可以用於和第三方藍芽進行互動,但是必須是MFI(make for iPhone、iPad、iPod等裝置),但是這種裝置需要經過蘋果的認證,而且比較困難,所以用的相當少。
  • CoreBluetooth.framework 主要用於和第三方藍芽的互動,這個不需要蘋果的認證,但是必須是藍芽4.0以上的裝置,藍芽4.0也叫BLE(Bluetooth Low Energy)所以一般都稱之為BlE開發,從iPhone4s及其以後的裝置都是支援BLE,這是我們主講的。

一般情況下現在所說的iOS藍芽開發也都是BLE開發。我們現在所做的智慧家居,智慧手環,類似的這些東西基本都是使用的這種方式與iPhone連線的。

二、CoreBluetooth框架簡介

1. 兩個核心概念

CBCentral :中心裝置。一般為主動發起連線的裝置就是中心裝置。
CBPeripheral :外圍裝置。比如你用你手機的APP去連線你的智慧手環,此時,你的手機叫中心裝置,手環就叫外部裝置。一般為被連線的裝置。又比如,如果是電腦發起連線來連線你的手機,那麼此時你的手機就變成了外設,所以說手機可以作為中心裝置,也可以作為外部裝置。

2. 其他概念

服務:每一個外部裝置都會擁有若干個服務,比如說你的智慧手環可能會擁有一個管理你心率的服務,還有一個管理你跑步情況的服務。這些服務是你的硬體工程師設定的,作為我們在開發的時候只需要知道有哪些服務就可以了,每一個服務都會有一個唯一的UUID,就是一個字串,用於辨別區分是哪個服務(外部裝置也會有其對應的一個UUID),如果你連線到這個裝置的話,你是可以搜尋到這些服務的。
特徵:每一個服務裡邊都會有若干個特徵,我們就是通過這些特徵值來與裝置進行互動的,還拿手環的例子來說,比如在它的管理你跑步情況的服務中可能有兩個特徵值,一個特徵是讀取手環內你跑步的資料,一個特徵是用於你的APP傳送資料給這個服務,進行一些設定什麼的,同樣每個服務中的特徵也是由你的硬體工程師設定好的,你只需要用就好了,當然這些特徵值也會有其對應的一個唯一的UUID。
特徵的屬性:這些個特徵的屬性也是不盡相同有的是用來讀資料的,有的是用來訂閱通知的,有的是用來傳送資料的,這些屬性同樣也都是設定好的,我們只需要知道哪一個特徵是什麼屬性就好了。這些屬性種類有一個列舉:

typedef NS_OPTIONS(NSUInteger, CBCharacteristicProperties) {
    CBCharacteristicPropertyBroadcast                                               = 0x01,
    CBCharacteristicPropertyRead                                                    = 0x02,
    CBCharacteristicPropertyWriteWithoutResponse                                    = 0x04,
    CBCharacteristicPropertyWrite                                                   = 0x08,
    CBCharacteristicPropertyNotify                                                  = 0x10,
    CBCharacteristicPropertyIndicate                                                = 0x20,
    CBCharacteristicPropertyAuthenticatedSignedWrites                               = 0x40,
    CBCharacteristicPropertyExtendedProperties                                      = 0x80,
    CBCharacteristicPropertyNotifyEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0)     = 0x100,
    CBCharacteristicPropertyIndicateEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0)   = 0x200
};
3. CoreBluetooth框架其實就包含了兩種場景:

場景一:手機作為中心裝置
場景二:手機作為外圍裝置
這兩種場景分別有一組相應的API和類。如圖所示:


1880214-d1af0f15698107bc.png
Core Bluetooth Object Model

如果我們現在要開發一個智慧手環,那麼我們的手機就充當了中心裝置的角色所以將會使用左邊的這組類;
反之如果我們要將我們的手機作為外圍裝置來開發,那麼就會使用右邊的這組。一般情況下我們使用左邊的這組會相應的多一點。

三、CoreBluetooth框架的基本使用流程

1. 中心裝置

建立中心裝置的物件——>搜尋外部裝置——>連線目標外部裝置——>掃描到外設中的服務——>獲取到其中的特徵——>通過這些特徵於裝置做資料的互動——>互動完畢斷開連線

2. 外圍裝置

建立外部裝置物件——>設定自己的服務,特徵,許可權等——>釋出廣告——>設定訂閱以及讀寫特徵的委託方法

相關文章