iOS項目中藍牙項目的開發進階(一)

現在有越來越多的項目涉及到Ble的開發,博主也在此領域爬了好幾年的坑,接下來發一系列文章來詳細說下過程和心得,以及一些爬過的坑,僅供參考,博主技術有限,錯誤的地方還請大神指正,共同探討。

iOS 藍牙庫相關基礎知識介紹

   在iOS開發中蘋果提供了CoreBluetooth庫,提供了藍牙開發中的所需的類文件,下面詳細介紹下里面幾個核心的類,也是開發中用到的。
   首先說下蘋果的藍牙,Ble是指blue touch low energy 是藍牙4.0.因爲低功耗而命名的,熟悉蘋果手機的話應該會知道蘋果因爲之前藍牙泄密的原因,修改了手機的藍牙協議,導致蘋果手機之間相互搜索變的不可能,安卓手機可以搜索到蘋果,而蘋果卻搜索不到安卓,這也使安卓和蘋果手機之間利用藍牙通信不可能,詳細的會在接下來的文章中介紹。
 下面說下CoreBluetooth中的幾個重要的類:
 1.CBCentralManager:藍牙中心控制類,包含藍牙連接中狀態協議方法,譬如藍牙狀態(有無打開藍牙)、搜索藍牙、藍牙連接(成功或失敗)、藍牙斷開、信號量等,是基礎的核心類。
 2.CBPeripheral:外設類,是中心外圍的藍牙設備對象,包含設備的基礎屬性,名字,uuid等信息。
 3.CBPeripheralDelegate:設備代理,處理對設備的操作的代理方法,主要包括讀寫Notify等操作的回調,是操作外圍設備的核心類。
 4.CBPeripheralManager:設備的控制,主要可以爲設備設置Service以及Characteristic,可以手動配置特定的服務和特徵值,也可看作可以自定義藍牙協議,例如將手機作爲外設時可以爲自己的手機藍牙設置服務和特徵值。CBCentralManager更適合將自己的軟件作爲中心。
 5.CBService:服務,一個設備包含多個CBService,連接設備後可以調用方法去獲取CBService列表。
 6.CBCharacteristic:特徵,一個CBService包含多個CBCharacteristic,是對設備操作時的基礎對象,例如讀寫Notify等操作,都是對特定CBCharacteristic操作的,大家看CoreBluetooth中的操作方法也可以看到參數都爲CBCharacteristic
 7.CBDescriptor:描述,每個characteristic可以對應一個或多個Description 供用戶描述characteristic的信息或屬性。
 每個設備都會有一些服務,每個服務裏面都會有一些特徵,特徵就是具體鍵值對,提供數據的地方。每個特徵屬性分爲這麼幾種:讀,寫,通知這麼幾種方式。具體枚舉類型如下:

這裏寫圖片描述
這裏寫圖片描述

//objcetive c特徵的定義枚舉
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
};

常用開發模式基本流程

藍牙中心模式流程
1. 建立中心角色
2. 掃描外設(discover)
3. 連接外設(connect)
4. 掃描外設中的服務和特徵(discover)
- 4.1 獲取外設的services
- 4.2 獲取外設的Characteristics,獲取Characteristics的值,獲取Characteristics的Descriptor和Descriptor的值
5. 與外設做數據交互(explore and interact)
6. 訂閱Characteristic的通知
7. 斷開連接(disconnect)

藍牙外設模式流程
- 啓動一個Peripheral管理對象(CBPeripheralManager)
- 本地Peripheral設置服務,特性,描述,權限等等
- Peripheral發送廣告
- 設置處理訂閱、取消訂閱、讀characteristic、寫characteristic的委託方法

藍牙設備狀態
- 待機狀態(standby):設備沒有傳輸和發送數據,並且沒有連接到任何設
- 廣播狀態(Advertiser):週期性廣播狀態
- 掃描狀態(Scanner):主動尋找正在廣播的設備
- 發起鏈接狀態(Initiator):主動向掃描設備發起連接。
- 主設備(Master):作爲主設備連接到其他設備。
- 從設備(Slave):作爲從設備連接到其他設備。

藍牙設備五種工作狀態

  • 準備(standby)
    廣播(advertising)
    監聽掃描(Scanning
    發起連接(Initiating)
    已連接(Connected)

下一篇講述下基本的使用方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章