iOS學(xué)習(xí)筆記之藍(lán)牙開(kāi)發(fā)

前言

在最近一段時(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ā)者使用。

CoreBluetooth.jpg

上圖的左側(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)

  1. 待機(jī)狀態(tài)(standby)
  2. 廣播狀態(tài)(advertising)
  3. 掃描狀態(tài)(Scanning)
  4. 發(fā)起連接狀態(tài)(Initiating)
  5. 已連接(Connected)

開(kāi)發(fā)流程

藍(lán)牙中心模式流程

  1. 建立中心角色
  2. 掃描外設(shè)
  3. 連接外設(shè)
  4. 掃描外設(shè)中的服務(wù)和特征
    4.1 獲取外設(shè)的services
    4.2 獲取外設(shè)的特征,獲取特征中的值,以及特征值的描述
  5. 與外設(shè)做數(shù)據(jù)交互
  6. 訂閱特征的通知
  7. 斷開(kāi)連接

藍(lán)牙外設(shè)模式流程

  1. 啟動(dòng)一個(gè)Peripheral管理對(duì)象;
  2. 本地Peripheral設(shè)置服務(wù),特性,描述,權(quán)限等等;
  3. Peripheral發(fā)送廣告;
  4. 設(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ù)完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容