現在有越來越多的項目涉及到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)
下一篇講述下基本的使用方法