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

文件目錄

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

QWSDiscovery

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

QWSBleHelper

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

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

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

QWSBleHandler

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

QWSDevControlService

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

這個(gè)對象會維護(hù)自己所有的讀寫操作,不管外界發(fā)來什么指令信息友瘤,他都能根據(jù)自己當(dāng)前的狀態(tài)翠肘,該報(bào)錯(cuò)報(bào)錯(cuò),該執(zhí)行執(zhí)行辫秧,并將結(jié)果反饋給每一個(gè)監(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)心這個(gè)設(shè)備才會收到這個(gè)設(shè)備的信息廊移。

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

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

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

最后回顧一下上篇文章的地址:iOS-BLE藍(lán)牙開發(fā)持續(xù)更新

以及這個(gè)說了很久的Demo地址:一個(gè)iOS BLE藍(lán)牙學(xué)習(xí)的Demo

ps:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末覆致,一起剝皮案震驚了整個(gè)濱河市侄旬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篷朵,老刑警劉巖勾怒,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婆排,死亡現(xiàn)場離奇詭異声旺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)段只,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門腮猖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赞枕,你說我怎么就攤上這事澈缺。” “怎么了炕婶?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵姐赡,是天一觀的道長。 經(jīng)常有香客問我柠掂,道長项滑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任涯贞,我火速辦了婚禮枪狂,結(jié)果婚禮上危喉,老公的妹妹穿的比我還像新娘。我一直安慰自己州疾,他們只是感情好辜限,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著严蓖,像睡著了一般薄嫡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谈飒,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天岂座,我揣著相機(jī)與錄音,去河邊找鬼杭措。 笑死费什,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的手素。 我是一名探鬼主播鸳址,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泉懦!你這毒婦竟也來了稿黍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤崩哩,失蹤者是張志新(化名)和其女友劉穎巡球,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邓嘹,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酣栈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汹押。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矿筝。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖棚贾,靈堂內(nèi)的尸體忽然破棺而出窖维,到底是詐尸還是另有隱情,我是刑警寧澤妙痹,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布铸史,位于F島的核電站,受9級特大地震影響怯伊,放射性物質(zhì)發(fā)生泄漏琳轿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望利赋。 院中可真熱鬧水评,春花似錦、人聲如沸媚送。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塘偎。三九已至疗涉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吟秩,已是汗流浹背咱扣。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涵防,地道東北人闹伪。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像壮池,于是被迫代替她去往敵國和親偏瓤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

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