前言
在最近一段時(shí)間中,經(jīng)常聽(tīng)到有朋友在群里問(wèn)誰(shuí)做過(guò)藍(lán)牙開(kāi)發(fā),如何如何。然而在實(shí)際工作過(guò)程中真的木有這方面的工作經(jīng)歷,倒是留意過(guò)這方面的知識(shí),沒(méi)有進(jìn)入過(guò)實(shí)操,所以記憶不是很深刻。特此整理一下,以備不時(shí)之需。
正文
藍(lán)牙是一種無(wú)限計(jì)數(shù)標(biāo)準(zhǔn),可實(shí)現(xiàn)固定設(shè)備、移動(dòng)設(shè)備和樓宇個(gè)人域網(wǎng)之間的短距離數(shù)據(jù)交換。
大白話就是藍(lán)牙是一種短距離無(wú)線通信技術(shù)。
關(guān)鍵詞說(shuō)明
中心設(shè)備: 用來(lái)掃描周圍藍(lán)牙硬件的設(shè)備。
外部: 被掃描的設(shè)備。
廣播: 外設(shè)不停的散播藍(lán)牙信號(hào),讓中心設(shè)備可以掃描到。
服務(wù): 外設(shè)廣播和運(yùn)行的時(shí)候會(huì)有服務(wù),可以理解成一個(gè)功能模塊,中心設(shè)備可以讀取服務(wù),外設(shè)可以有多個(gè)服務(wù)。每個(gè)服務(wù)又包含了很多字段,這些字段的權(quán)限一般分為 讀read,寫(xiě)write,通知notiy幾種,就是我們連接設(shè)備后具體需要操作的內(nèi)容。
特征: 在服務(wù)中的一個(gè)單位,一個(gè)服務(wù)可以有很多個(gè)特征,特征會(huì)有一個(gè)value,一般讀寫(xiě)的數(shù)據(jù)就是這個(gè)value。
UUID: 區(qū)分不同的服務(wù)和特征,可以理解為服務(wù)和特征的身份證。
CoreBluetooth框架
在iOS中主要使用CoreBluetooth框架實(shí)現(xiàn)藍(lán)牙的開(kāi)發(fā)。通過(guò)CoreBluetooth可以輕松實(shí)現(xiàn)外設(shè)或中心設(shè)備的開(kāi)發(fā)。
CoreBluetooth框架可以分為兩個(gè)模塊:中心設(shè)備(peripheral),外設(shè)(central),它們都各有一套API提供給開(kāi)發(fā)者使用。

上圖的左側(cè)是中心設(shè)備開(kāi)發(fā)相關(guān)的類,我們的一些相關(guān)操作是依靠CBCentralManager來(lái)進(jìn)行的。
-
CBCentralManager: 藍(lán)牙中心設(shè)備管理類,用來(lái)統(tǒng)一調(diào)度中心設(shè)備的開(kāi)發(fā)。 -
CBPeripheral: 藍(lán)牙外設(shè) -
CBService: 藍(lán)牙外設(shè)的服務(wù),可以又0個(gè)或者多個(gè)服務(wù) -
CBCharacteristic: 服務(wù)中的特征,每一個(gè)藍(lán)牙服務(wù)中可以又0個(gè)或多個(gè)特征,特征中包含數(shù)據(jù)信息。 -
CBUUID: 可以理解為服務(wù)或特征的身份證,可以用來(lái)選擇需要的服務(wù)和特征。
上圖中右側(cè)是外設(shè)開(kāi)發(fā)相關(guān)的類
-
CBPeripheralManager: 用于開(kāi)發(fā)藍(lán)牙外設(shè)的中心管理類 -
CBCentral: 藍(lán)牙中心設(shè)備 -
CBMutableService: 外設(shè)開(kāi)發(fā)的時(shí)候可以添加多個(gè)服務(wù),所以這里用CBMutableService來(lái)創(chuàng)建添加服務(wù) -
CBMutableCharacteristic: 每個(gè)服務(wù)中可以有多個(gè)特征,外設(shè)開(kāi)發(fā)給服務(wù)添加特征的時(shí)候使用這個(gè)類 -
CBATTRequest: 讀或者寫(xiě)請(qǐng)求,它的實(shí)例對(duì)象有一個(gè)value屬性,用來(lái)裝在外設(shè)進(jìn)行藍(lán)牙讀取或?qū)懭胝?qǐng)求時(shí)的數(shù)據(jù)。一般在外設(shè)寫(xiě)入或讀取的回調(diào)方法中有這樣一個(gè)參數(shù)。
藍(lán)牙設(shè)備的狀態(tài)
- 待機(jī)狀態(tài)(standby)
- 廣播狀態(tài)(advertising)
- 掃描狀態(tài)(Scanning)
- 發(fā)起連接狀態(tài)(Initiating)
- 已連接(Connected)
開(kāi)發(fā)流程
藍(lán)牙中心模式流程
- 建立中心角色
- 掃描外設(shè)
- 連接外設(shè)
- 掃描外設(shè)中的服務(wù)和特征
4.1 獲取外設(shè)的services
4.2 獲取外設(shè)的特征,獲取特征中的值,以及特征值的描述 - 與外設(shè)做數(shù)據(jù)交互
- 訂閱特征的通知
- 斷開(kāi)連接
藍(lán)牙外設(shè)模式流程
- 啟動(dòng)一個(gè)Peripheral管理對(duì)象;
- 本地Peripheral設(shè)置服務(wù),特性,描述,權(quán)限等等;
- Peripheral發(fā)送廣告;
- 設(shè)置處理訂閱、取消訂閱、讀特征、寫(xiě)特征的委托方法。
注意事件
藍(lán)牙外設(shè)必需為4.0及以上(2.0需要MFI認(rèn)證)
藍(lán)牙第三庫(kù)
再查閱各種資料學(xué)習(xí)藍(lán)牙的時(shí)候,突然發(fā)現(xiàn)了在git上一個(gè)很好的第三方庫(kù),BabyBluetooth。值得去學(xué)習(xí)一下。
簡(jiǎn)介
BabyBluetooth是一個(gè)基于CoreBluetooth框架封裝的輕量級(jí)的開(kāi)源庫(kù),可以很方便的使開(kāi)發(fā)者使用CoreBluetooth,同時(shí)它使用Block替代了CoreBluetooth的代理,減少了藍(lán)牙開(kāi)發(fā)過(guò)程中的代碼量,同時(shí)它支持藍(lán)牙設(shè)備中心模式和外設(shè)模式。
源碼解讀
關(guān)于BabyBluetooth的源碼的閱讀,留待后續(xù)完成。