一個關(guān)于藍(lán)牙4.0的智能硬件Demo詳解

寫這篇詳解是因?yàn)樽罱芏嗳硕荚趩栂嚓P(guān)問題,但是上篇文章iOS-BLE藍(lán)牙開發(fā)持續(xù)更新已經(jīng)過去半年,很多東西已經(jīng)開始遺忘,今天重新拾起,并在Demo中新添了具體功能和詳細(xì)注釋,順便屢一下當(dāng)初設(shè)計的思路,我想用圖片來解釋會更好理解。

首先看一下幾個文件的大概功能,后面在用圖來分析其中的設(shè)計理念。

文件目錄

整個文件主要包含四大塊,每一塊的功能都是獨(dú)立開的,不過當(dāng)中卻又設(shè)計不足的地方,希望各位能夠積極fork,貢獻(xiàn)代碼!

  • QWSDiscovery

這個文件是功能的核心,主要負(fù)責(zé)和系統(tǒng)的CoreBluetooth溝通,比如掃描設(shè)備,連接,斷開等操作。其中維護(hù)了一個設(shè)備列表,使用設(shè)備的uuid來唯一識別。在這個文件中,同時也定義了通知和錯誤類型,方便處理與設(shè)備之間的信息交流。

  • QWSBleHelper

用心的讀者一定發(fā)現(xiàn),在我們的每一個viewController中,只要與藍(lán)牙功能相關(guān),那他一定維護(hù)了一個helper。在這里我稱這個頁面為監(jiān)護(hù)人,智能設(shè)備就像是一個孩子,很多孩子在幼兒園里,我只關(guān)心我的孩子,而這個helper就像幼兒園老師,他負(fù)責(zé)告知我們孩子在校的情況,也可以讓我和孩子直接溝通。

helper中會維護(hù)兩個集合,一個是我關(guān)心的設(shè)備集合,一個是即將斷開的設(shè)備集合。并不是連接成功的設(shè)備就會加入到這個集合中,只有監(jiān)護(hù)人發(fā)出了與這個設(shè)備相關(guān)的請求(比如說,連接,獲取信息等),這個時候,hepler可以判定這個設(shè)備是被監(jiān)護(hù)人關(guān)心的,從而這個設(shè)備有信息更新的時候,他會告知所有監(jiān)護(hù)這個設(shè)備的監(jiān)護(hù)人。

在這里之所以即將斷開的設(shè)備集合是為了,在監(jiān)護(hù)人發(fā)出斷開請求之后,仍然能夠清晰的告知監(jiān)護(hù)人該設(shè)備的狀態(tài)信息,等到真正斷開連接之后通知到每一個監(jiān)護(hù)人。

  • QWSBleHandler

這個文件顧名思義,就是一些代理方法。設(shè)計中是將他加入到helper中,當(dāng)helper收到設(shè)備發(fā)來的信息時,通過代理將信息拆解并封裝模型通知到所有監(jiān)護(hù)人,寫在這里純粹只是為了看起來更加清晰,分擔(dān)一下各個文件的代碼壓力。

  • QWSDevControlService

繼承NSObject,封裝的智能硬件設(shè)備的模型。
對于智能硬件設(shè)備來講,單單一個CBPeripheral(CoreBluetooth里的對象)是遠(yuǎn)遠(yuǎn)不夠的。我們可能需要為他豐富更多的擴(kuò)展信息,比如這個設(shè)備是否自動重連,是否需要斷開后連接,是否認(rèn)證,重連次數(shù),版本號等,當(dāng)然也可以繼承CBPeripheral,但這里我覺得將CBPeripheral作為其一個屬性會比較清晰。

這個對象會維護(hù)自己所有的讀寫操作,不管外界發(fā)來什么指令信息,他都能根據(jù)自己當(dāng)前的狀態(tài),該報錯報錯,該執(zhí)行執(zhí)行,并將結(jié)果反饋給每一個監(jiān)護(hù)人。


圖解說明

1.智能設(shè)備與移動端的關(guān)系

Paste_Image.png

我們的Discovery在最頂層,不會參與與設(shè)備的直接交互,所有的收發(fā)數(shù)據(jù)都是經(jīng)過系統(tǒng)的框架實(shí)現(xiàn)。

2.監(jiān)護(hù)人與孩子的關(guān)系

Paste_Image.png

圖中的連線很多,可能很迷糊,同一種顏色的連線代表數(shù)據(jù)交互,看helper里關(guān)心的設(shè)備,可以明顯理解,只有關(guān)心這個設(shè)備才會收到這個設(shè)備的信息。

每一個viewController維護(hù)一個helper,通過NSNotificationCenter廣播所有操作的結(jié)果,并告知每一個關(guān)心這個設(shè)備的viewController。

簡言之,就是監(jiān)護(hù)人接不接受這個通知,或者老師發(fā)不發(fā)送這個消息給監(jiān)護(hù)人。有一點(diǎn)需要明白的是,不管監(jiān)護(hù)人想不想收到這個設(shè)備的消息,這個設(shè)備都是會廣播自己的信息的,只是helper會判斷這個孩子是不是你的~

以上就是這個Demo的設(shè)計思路,當(dāng)然Demo中仍有很多不足,之所以不敢稱之為kit,是因?yàn)樗_實(shí)沒有達(dá)到kit的封裝能力與效果,畢竟這只是一個Demo,他只是簡單體現(xiàn)了一個設(shè)計思路,并不能達(dá)到通用的效果,因?yàn)樵谥悄苡布@一塊,每個產(chǎn)品的協(xié)議,屬性都會有所差異,不可能做到通用的效果。希望和大家有更深入的交流與學(xué)習(xí)!

最后回顧一下上篇文章的地址:iOS-BLE藍(lán)牙開發(fā)持續(xù)更新
以及這個說了很久的Demo地址:一個iOS BLE藍(lán)牙學(xué)習(xí)的Demo

在這里也順便介紹一下近期看到的一篇關(guān)于BLE開發(fā)的kit(MPBluetoothKit iOS藍(lán)牙框架),作者很詳細(xì)的將系統(tǒng)的CoreBluetooth的代理都用block實(shí)現(xiàn)了,看起來更加清晰與實(shí)用,也希望各位能夠多多關(guān)注,共同學(xué)習(xí)。

進(jìn)一步交流 QQ群:361736344
本站文章如無其他特殊說明,均為原創(chuàng),轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 文件目錄 整個文件主要包含四大塊,每一塊的功能都是獨(dú)立開的,不過當(dāng)中卻又設(shè)計不足的地方,希望各位能夠積極fork,...
    jensen1in閱讀 360評論 0 0
  • 藍(lán)牙簡介 藍(lán)牙( Bluetooth? ):是一種無線技術(shù)標(biāo)準(zhǔn),可實(shí)現(xiàn)固定設(shè)備、移動設(shè)備和樓宇個人域網(wǎng)之間的短距離...
    Chefil閱讀 2,077評論 2 19
  • 為期8天的澳大利亞之旅在2017年的11月28日0點(diǎn)25分終于落下了帷幕。雖然目前的我還在調(diào)整時差和生活工...
    我愛呆萌佩閱讀 1,106評論 3 6
  • 我想問一下,可不可以跟我談戀愛? 我想問下,要不要讓我做你的女朋友? 我想問下,一起走余下的人生可好? 我想問下,...
    神經(jīng)病的病閱讀 78評論 0 0
  • 生活中我們常常羨慕這樣一種人,工作上高效杰出,生活中也生活得異常瀟灑和多姿多彩,他們仿佛有一種魔力,吸附著光芒,同...
    FAN星點(diǎn)點(diǎn)閱讀 341評論 0 0