1.什么是藍(lán)牙4.0,藍(lán)牙其它標(biāo)準(zhǔn)又是什么?

專注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)婁煩免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
詳細(xì)描述:低功耗藍(lán)牙(Low Energy; LE),又視為Bluetooth Smart或藍(lán)牙核心規(guī)格4.0版本。其特點(diǎn)具備節(jié)能、便于采用,是藍(lán)牙技術(shù)專為物聯(lián)網(wǎng)(Internet of Things; IOT)開發(fā)的技術(shù)版本。所以它最主要的特點(diǎn)是低功耗,普及率高。現(xiàn)在所說的藍(lán)牙設(shè)備,大部分都是在說4.0設(shè)備,ble也特指4.0設(shè)備。 在4.0之前重要的版本有 2.1版本-基本速率/增強(qiáng)數(shù)據(jù)率(BR/EDR) 和 3.0 高速藍(lán)牙 版本,這些統(tǒng)稱為經(jīng)典藍(lán)牙。4.0還有4.1和4.2的小版本,其中4.2版本對(duì)傳輸速率做了進(jìn)一步他提升,提高了2.5倍,蘋果從iphone6開始使用4.2,最新的藍(lán)牙標(biāo)準(zhǔn)為藍(lán)牙5.0,其中最大的特點(diǎn)連接范圍擴(kuò)大了4倍,速度又提高了2倍,無連接數(shù)據(jù)廣播能力提高了8倍,增加了藍(lán)牙組網(wǎng)的能力。
2.藍(lán)牙開發(fā)必須知道的概念。
2.1.1 central和peripheral:
藍(lán)牙應(yīng)用開發(fā)中,存在兩種角色,分別是central和peripheral(p?’r?f?r?l) ,中文就是中心和外設(shè)。比如手機(jī)去連接智能設(shè)備,那手機(jī)就是central,智能設(shè)備就是peripheral。大多時(shí)候都是central去連接peripheral的場(chǎng)景。
2.1.2 廣播和連接:
peripheral會(huì)發(fā)出廣播,central掃描到廣播后,可以對(duì)設(shè)備進(jìn)行連接,發(fā)出connect請(qǐng)求,peripheral接收到請(qǐng)求后,同意連接后,central和peripheral就建立了連接。
2.1.3?連接后的操作:
write,read,notify,indecate, response or not …
indecate和notify的區(qū)別就在于,indecate是一定會(huì)收到數(shù)據(jù),notify有可能會(huì)丟失數(shù)據(jù)(不會(huì)有central收到數(shù)據(jù)的回應(yīng)),write也分為response和noresponse,如果是response,那么write成功回收到peripheral的確認(rèn)消息,但是會(huì)降低寫入的速率。
2.1.4 協(xié)議:
每個(gè)具體的智能設(shè)備,都約定了一組數(shù)據(jù)格式,這個(gè)就是數(shù)據(jù)協(xié)議,例如手環(huán)中獲取到數(shù)據(jù)0X001023,其中第2位到第5位表示步數(shù),那么就2310就是步數(shù)的16進(jìn)制的數(shù)據(jù),轉(zhuǎn)換成10進(jìn)制就是8976步,需要注意的是,設(shè)備端都是小端模式,所以取4位時(shí)候,高字節(jié)在前低字節(jié)在后。
3. iOS藍(lán)牙應(yīng)用的一般開發(fā)流程。
4. 藍(lán)牙的數(shù)據(jù)交互。
write,read,notify,indecate, response or not … 都是容易理解的,indecate和notify對(duì)應(yīng)的是長連接,建立indecate后,peripheral可以隨時(shí)往central發(fā)送數(shù)據(jù)。
indecate和notify的區(qū)別就在于,indecate是一定會(huì)收到數(shù)據(jù),notify有可能會(huì)丟失數(shù)據(jù)(不會(huì)有central收到數(shù)據(jù)的回應(yīng)),write也分為response和noresponse,如果是response,那么write成功回收到peripheral的確認(rèn)消息,但是會(huì)降低寫入的速率。
對(duì)于一個(gè)charateristic,他的讀寫訂閱的權(quán)限是peripheral決定的,熟悉可以被同時(shí)設(shè)置,一般會(huì)根據(jù)外設(shè)的功能來決定。
5.藍(lán)牙ota DFU。
藍(lán)牙ota,DFU(Device Firmware Update)指的是藍(lán)牙設(shè)備的固件升級(jí),其實(shí)是一整套流程,不同的藍(lán)牙芯片,ota的流程有不同之處,我這里用ti的芯片舉例。步驟為:切系統(tǒng)(bootloader mode),重啟,傳輸數(shù)據(jù),驗(yàn)證數(shù)據(jù),切系統(tǒng),重啟,完成。
其中數(shù)據(jù)傳輸也會(huì)分成很多節(jié)去發(fā)送,沒法送一段數(shù)據(jù),做一次數(shù)據(jù)校驗(yàn)。
6.ota存在的問題。
每個(gè)智能設(shè)備的速率,功耗,存儲(chǔ)都會(huì)有很多限制,導(dǎo)致很多設(shè)備會(huì)自己去實(shí)現(xiàn)ota的功能,自定義流程和數(shù)據(jù)傳輸方式,導(dǎo)致許多設(shè)備都是有自己私有的ota模式和協(xié)議,所以在做開發(fā)的時(shí)候,要仔細(xì)閱讀設(shè)備協(xié)議中對(duì)ota的描述。
7.如何做自動(dòng)重連。
只需要在設(shè)備斷開連接的委托方法中,重新調(diào)用gatt.connet或者是centralManager.connet方法就可以了,無論當(dāng)時(shí)設(shè)備是否有點(diǎn),是否在周圍,當(dāng)設(shè)備再次開會(huì)或者連接到可連接范圍內(nèi),都會(huì)自動(dòng)被連上。
8.連接失敗處理。
分兩個(gè)平臺(tái)來說,iOS端也有連接失敗的委托,但是好像幾乎不會(huì)發(fā)生這種情況,而對(duì)于同款設(shè)備,android常常會(huì)出現(xiàn)連接失敗的情況,status != BluetoothGatt.GATT_SUCCESS,android端開發(fā)請(qǐng)不要把連接失敗和斷開連接放在一塊處理,因?yàn)閿嚅_連接可以直接嘗試重新連接,而連接失敗后嘗試重新連接,需要加一些延時(shí),并且需要gatt.close,清空一下狀態(tài),否則會(huì)把gatt阻塞導(dǎo)致手機(jī)不重啟藍(lán)牙就再也無法連接任何設(shè)備的情況 。
9.后臺(tái)運(yùn)行。
iOS后來運(yùn)行,需要設(shè)備中info.Plist權(quán)限,key:Required background modes ,value: bluetooth-central(手機(jī)作為central) , bluetooth-peripheral。
10.同時(shí)連接多個(gè)設(shè)備。
使用同一個(gè)CBCentralManager,通過進(jìn)入委托的peripheral的identifier區(qū)分不同的設(shè)備,進(jìn)行不同的操作和處理。
11.掃描廣播包。
所有外設(shè),只有在發(fā)出廣播包的情況下,才能被central發(fā)現(xiàn),絕大多數(shù)情況下,外設(shè)被連接后就不會(huì)發(fā)出廣播(也有例外),很多人遇到無法找到設(shè)備的問題,大多屬于這種情況。
12.提高藍(lán)牙連接速度。
無論是iOS,還是android,都可以通過已綁定的設(shè)備,在不開啟掃描的情況下進(jìn)行快速連接,iOS需要的參數(shù)是peripheral的identifier,android需要mac地址。但android和iOS還是有一些區(qū)別的,比如iOS不能拿到已綁定的設(shè)備list,但是可以通過UUID去拿到peripheral的實(shí)例。而android可以拿到已綁定的設(shè)備list。android綁定過程需要手動(dòng)調(diào)用createBond的方法,而iOS在連接成功一次后會(huì)自動(dòng)綁定。 android在處理createBond時(shí),常常會(huì)應(yīng)為不同手機(jī)平臺(tái),不同設(shè)備,會(huì)產(chǎn)生兼容性的問題,這點(diǎn)需要注意。
13.定向掃描。
在掃描時(shí)候可以傳入serviceUUID,這樣可以掃描到特定條件的設(shè)備,提高掃描的速度,排除干擾。
14.如何獲取mac地址。
而iOS出于蘋果的安全策略問題,無法直接獲得mac地址,只能得到一個(gè)mac地址換算出來的identifier。
在iOS藍(lán)牙開發(fā)當(dāng)中,現(xiàn)在的主流是使用藍(lán)牙4.0,使用CoreBluetooth來進(jìn)行開發(fā),藍(lán)牙4.0的好處就不多說了,大家自行g(shù)oogle,HID也是一種藍(lán)牙協(xié)議,單向傳輸數(shù)據(jù),主要是做藍(lán)牙鍵盤用的,比如羅技的藍(lán)牙鍵盤k480。
那么我們可以像藍(lán)牙4.0一樣直接獲取HID的設(shè)備信息,跟發(fā)送的數(shù)據(jù)嗎?很可惜,這是不行的,HID是系統(tǒng)層的,我們?cè)趹?yīng)用層是沒辦法獲取到她的任何數(shù)據(jù)跟信息的 參考這里 .
答案是:有兩種方法
1.使用IOKIT庫是可以拿到的,但是這個(gè)庫比較底層,而且使用了這個(gè)庫的話,發(fā)布apple store 會(huì)被拒(只是搜索到有人這么說,樓主并沒有驗(yàn)證真實(shí)性);
2.另外一種是在樓主玩弄公司的藍(lán)牙鍵盤時(shí)想到的,鍵盤上有音樂控制鍵,可以控制iPhone的音樂播放,讓我想到了apple耳機(jī)的線控,那么會(huì)不會(huì)兩種控制的方法是一樣的呢?話不多說,趕快驗(yàn)證一下;
4.使用AVAudioPlayer獲取鍵值
首先我們需要成為第一響應(yīng)者,而且開始接受遠(yuǎn)程控制事件
然后初始化播放器
設(shè)置事件監(jiān)聽
最后播放器開始播放之后,操作耳機(jī)線控或者藍(lán)牙鍵上的音樂控制,就可以獲得相應(yīng)的值,然后做你想執(zhí)行的操作,但是event.subtype只有十個(gè)鍵值,這也算是一個(gè)小小的限制吧,以上!
我的目標(biāo)是世界和平!
參考資料點(diǎn)擊這里
talk is cheap, show me the code
總結(jié)一下藍(lán)牙開發(fā)相關(guān)的知識(shí)點(diǎn)和注意事項(xiàng),做個(gè)筆記,也希望你們能少踩坑
(公司部分藍(lán)牙項(xiàng)目為混編項(xiàng)目,藍(lán)牙相關(guān)處理均采用了Objective-C,故本文????均采用OC,Swift處理相同)
藍(lán)牙4.0包含兩個(gè)藍(lán)牙標(biāo)準(zhǔn),它是一個(gè)是 雙模 的標(biāo)準(zhǔn),它包含 傳統(tǒng)藍(lán)牙部分(也稱經(jīng)典藍(lán)牙) 和 低功耗藍(lán)牙部分(BLE) , 二者適用于不同的應(yīng)用場(chǎng)景和應(yīng)用條件。他們的特點(diǎn)如下
所以藍(lán)牙4.0是集成了傳統(tǒng)藍(lán)牙和低功耗藍(lán)牙兩個(gè)標(biāo)準(zhǔn)的,并不只是低功耗藍(lán)牙
藍(lán)牙4.0支持兩種部署方式: 雙模式 和 單模式 ,雙模同時(shí)支持經(jīng)典藍(lán)牙和低功耗藍(lán)牙,而單模則只支持其中一種。
二者更多細(xì)節(jié)詳見: 傳統(tǒng)藍(lán)牙和低功耗藍(lán)牙的區(qū)別
iOS中藍(lán)牙相關(guān)功能都封裝進(jìn)了 CoreBluetooth 類中,其中有幾個(gè)常見的參數(shù)和概念
具體API參考 CoreBluetooth藍(lán)牙開發(fā)
保存到數(shù)組中的設(shè)備可通過 UUID 來進(jìn)行區(qū)分。從 iOS7之后蘋果不提供外設(shè)的mac地址,外設(shè)的唯一標(biāo)識(shí)換成了由mac封裝加密后的UUID,需要注意的是不同的手機(jī)獲取同一個(gè)外設(shè)的UUID是不同的,所以在不同手機(jī)之間UUID不是唯一的,但在本機(jī)上可以作為唯一標(biāo)識(shí)(特殊情況手機(jī)刷機(jī)后也會(huì)改變UUID)。
如何獲取Mac地址
一般使用場(chǎng)景是根據(jù)Mac地址區(qū)分某個(gè)外設(shè)
注意點(diǎn):
寫入數(shù)據(jù)時(shí)可能會(huì)遇到需要分包發(fā)送的情況,我們可以通過下面的API或許當(dāng)前特征支持的最大的單條寫入長度
maxLength 一般取決于藍(lán)牙模塊內(nèi)部接收 緩沖區(qū) 的大小,很多硬件設(shè)備這個(gè)緩沖區(qū)的大小是 20 字節(jié), 這個(gè)大小也和特征的寫入權(quán)限有關(guān),像具有寫入權(quán)限 withResponse 類的特征其大小一般為 512 字節(jié),當(dāng)然這些都是取決于設(shè)備測(cè)的設(shè)置;
當(dāng)我們單次發(fā)送的數(shù)據(jù)字節(jié)長度大于 maxLength 時(shí),我們就需要采用分包的方式來發(fā)送數(shù)據(jù)了,
分包發(fā)送的邏輯類似于下面
這邊延時(shí)主要是設(shè)備側(cè)的接收模塊接收數(shù)據(jù)以及處理能力有限
外圍設(shè)備測(cè)和中心設(shè)備(大部分情況下是手機(jī))保持藍(lán)牙連接的狀態(tài)下,如果長時(shí)間不產(chǎn)生交互,藍(lán)牙就會(huì)斷開,所以為了保持兩者持續(xù)的連接狀態(tài),需要做保活處理,也就是需要持續(xù)的發(fā)送心跳包(watchdog)。相應(yīng)的處理是使用一個(gè)定時(shí)器定時(shí)向設(shè)備側(cè)發(fā)送符合設(shè)備協(xié)議格式的心跳包。
斷開連接很簡(jiǎn)單,只需要調(diào)用 [self.centralManager cancelPeripheralConnection:peripheral] 傳入需要斷開連接的設(shè)備對(duì)象就行了。斷開連接時(shí)會(huì)自動(dòng)調(diào)用 centralManager:didDisconnectPeripheral:error: 代理方法。
按照之前的慣例,當(dāng)error為nil時(shí)表示斷開成功,error不為nil時(shí)斷開失敗。這種理解是錯(cuò)誤的。
當(dāng)你調(diào)用 cancelPeripheralConnection: 方法(主動(dòng)斷開)斷開連接時(shí)error為nil ; 沒有調(diào)用這個(gè)方法(異常斷開)而斷開時(shí)error返回的是異常斷開的原因。也可以理解為主動(dòng)調(diào)用斷開連接方法一定會(huì)斷開
接下來就是斷開重連的問題了,對(duì)藍(lán)牙功能進(jìn)行封裝時(shí)肯定少不了斷開重連。首先斷開時(shí)可通過上面的代理方法的error是否為nil判斷是否是異常斷開,一般情況下異常斷開時(shí)是需要重連的
原因就是當(dāng)設(shè)備斷開連接后 peripheral.services 為nil了,當(dāng)然 service.characteristics 也是nil,所以需要在斷開連接時(shí)把保存這個(gè)設(shè)備對(duì)應(yīng)的服務(wù)和特征全部清除,然后在連接成功時(shí)重新過一遍發(fā)現(xiàn)服務(wù)和發(fā)現(xiàn)特征的流程就好了。
iOS7 開始,Apple加入了Beacon圍欄檢測(cè)的API, ( iBeacon-維基百科 ), 其工作方式是,配備有低功耗藍(lán)牙(BLE)通信功能的設(shè)備使用 BLE 技術(shù)向周圍發(fā)送自己特有的 ID,接收到該 ID 的應(yīng)用軟件會(huì)根據(jù)該 ID 采取一些行動(dòng)。比如,在店鋪里設(shè)置 iBeacon 通信模塊的話,便可讓 iPhone 和 iPad 上運(yùn)行一資訊告知服務(wù)器,或者由服務(wù)器向顧客發(fā)送折扣券及進(jìn)店積分, 或者公司的手機(jī)打卡,只要手機(jī)靠近打卡器一定范圍,手機(jī)測(cè)就向打開器發(fā)送打卡信息,從而自動(dòng)打卡。這種場(chǎng)景還有很多。 其中一個(gè)最重要的功能就是App的喚醒功能(殺死后也能喚醒)
舉一個(gè)我們的例子,我們的產(chǎn)品業(yè)務(wù)場(chǎng)景就是在進(jìn)入車輛以后,需要使用藍(lán)牙連接我們的后裝車載設(shè)備以采集車輛信息和駕駛行為行程等,這里有一個(gè)問題就是在App被殺死的情況下如何喚醒App, 因?yàn)椴豢赡芤笥脩裘看味贾鲃?dòng)去打開App,這樣體驗(yàn)太差。我們的做法是通過iBeacon,當(dāng)我們的車輛點(diǎn)火以后,設(shè)備測(cè)通電,發(fā)出 iBeacon廣播 ,App實(shí)現(xiàn)監(jiān)聽iBeacon相關(guān)功能后就可以喚醒我們App,然后在相應(yīng)的回調(diào)的處理一些事情,比如通過藍(lán)牙連接設(shè)備。這里的前提條件是我們的硬件設(shè)備測(cè)包含iBeacon模塊,具有iBeacon功能,而且對(duì)iBeacon的廣播頻率也有一定的要求,長了可能喚醒的功能會(huì)不穩(wěn)定,官方建議的好像是100ms,頻率超高越耗電,但可以讓手機(jī)或其它監(jiān)聽設(shè)備越快地發(fā)現(xiàn)iBeacon。標(biāo)準(zhǔn)的BLE廣播距離是100m,這使Beacon在室內(nèi)位置跟蹤場(chǎng)景下的效果更理想。
關(guān)于iBeacon更多的使用及介紹請(qǐng)參考
蘋果核 - iOS端近場(chǎng)圍欄檢測(cè)(一) ——iBeacon
iBeacon技術(shù)初探
1 AirDrop (UIActivityViewController類)
功能:實(shí)現(xiàn)iOS設(shè)備間的文件和數(shù)據(jù)分享。AirDrop使用藍(lán)牙來掃描周圍的設(shè)備,當(dāng)兩臺(tái)設(shè)備通過藍(lán)牙建立起了連接,考慮到更快速的數(shù)據(jù)傳輸,它就會(huì)創(chuàng)建點(diǎn)對(duì)點(diǎn)的WiFi網(wǎng)絡(luò)來連接兩部iOS 設(shè)備。但并不意味著為了使用AirDrop而需要把設(shè)備連接至WiFi網(wǎng)絡(luò)。
傳輸方式:藍(lán)牙、WiFi
支持系統(tǒng):iOS
2 GameKit 框架
功能:GameKit主要是完成iOS設(shè)備間聯(lián)網(wǎng)的相關(guān)功能,包括藍(lán)牙和Internet兩種方式。
傳輸方式:藍(lán)牙、WiFi
支持系統(tǒng):iOS
3 MultipeerConnectivity 框架
功能:利用Multipeer Connectivity框架,即使在沒有連接到WiFi(WLAN)或移動(dòng)網(wǎng)絡(luò)(xG)的情況下,距離較近的Apple設(shè)備(iMac/iPad/iPhone)之間可基于藍(lán)牙和WiFi(P2P WiFi)技術(shù)進(jìn)行發(fā)現(xiàn)和連接實(shí)現(xiàn)近場(chǎng)通信。
傳輸方式:藍(lán)牙、WiFi
支持系統(tǒng):iOS
4 ExternalAccessory 框架
功能:External Accessory Framework提供了配件連接iOS設(shè)備的通道。開發(fā)者可以通過它來開發(fā)連接配件的app。配件可以通過30pin、藍(lán)牙、USB的方式連接iOS設(shè)備。
傳輸方式:藍(lán)牙、WiFi
支持系統(tǒng):iOS
5 CoreBluetooth 框架
功能:藍(lán)牙4.0協(xié)議之間信息傳輸,支持iOS和Android設(shè)備。
傳輸方式:藍(lán)牙
支持系統(tǒng):iOS、Android
6 Socket
功能:通過TCP或UDP進(jìn)行相同局域網(wǎng)內(nèi)信息傳輸,支持iOS和Android設(shè)備。
傳輸方式:WiFi
支持系統(tǒng):iOS、Android
7 Bonjour
功能:Bonjour是一種能夠自動(dòng)查詢接入網(wǎng)絡(luò)中的設(shè)備或應(yīng)用程序的協(xié)議。Bonjour 抽象掉 ip 和 port 的概念,讓我們聚焦于更容易為人類思維理解的 service。通過 Bonjour,一個(gè)應(yīng)用程序 publish 一個(gè)網(wǎng)絡(luò)服務(wù) service,然后網(wǎng)絡(luò)中的其他程序就能自動(dòng)發(fā)現(xiàn)這個(gè) service,從而可以向這個(gè) service 查詢其 ip 和 port,然后通過獲得的 ip 和 port 建立 socket 鏈接進(jìn)行通信,支持iOS和Android設(shè)備。
傳輸方式:WiFi
支持系統(tǒng):iOS、Android
8 AllJoyn
功能:AllJoyn,由高通公司主導(dǎo)的高創(chuàng)新中心的開源項(xiàng)目開發(fā)的,主要用于近距離無線傳輸,通過WiFi或藍(lán)牙技術(shù),定位和點(diǎn)對(duì)點(diǎn)文件傳輸。支持平臺(tái):RTOS、Arduino、Linux、Android、iOS、Windows、Mac。
傳輸方式:藍(lán)牙、WiFi
支持系統(tǒng):RTOS、Arduino、Linux、Android、iOS、Windows、Mac
嗨大家好,我是iOS開發(fā)一枚大帥比,過去的幾年項(xiàng)目涉及到藍(lán)牙比較多,抽空之余,把使用的小知識(shí)點(diǎn)歸納起來,一是方便自己對(duì)知識(shí)做很好的總結(jié)和復(fù)習(xí),二是希望能幫助到瑯琊開發(fā)的朋友們。
現(xiàn)在的互聯(lián)網(wǎng)時(shí)代,智能硬件設(shè)備越來越多樣化,這些設(shè)備中,有多是通過手機(jī)來控制硬件設(shè)備,來達(dá)到控制的效果,這中間少不了要使用到藍(lán)牙功能,通過藍(lán)牙來通信來控制設(shè)備。也就是我們說的“設(shè)備中心和外設(shè)的故事”。
藍(lán)牙版本介紹:
每個(gè)人對(duì)于藍(lán)牙都不陌生,近距離數(shù)據(jù)傳輸,方便;可是當(dāng)你的業(yè)務(wù)需求需要你第一次接觸藍(lán)牙開發(fā)的時(shí)候,卻會(huì)發(fā)現(xiàn)你對(duì)它并不了解;首先,藍(lán)牙發(fā)展至今經(jīng)歷了8個(gè)版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。那么在1.x~3.0之間的我們稱之為傳統(tǒng)藍(lán)牙,4.x開始的藍(lán)牙我們稱之為低功耗藍(lán)牙也就是藍(lán)牙ble,當(dāng)然4.x版本的藍(lán)牙也是向下兼容的。android手機(jī)必須系統(tǒng)版本4.3及以上才支持BLE API。低功耗藍(lán)牙較傳統(tǒng)藍(lán)牙,傳輸速度更快,覆蓋范圍更廣,安全性更高,延遲更短,耗電極低等等優(yōu)點(diǎn)。(現(xiàn)在的穿戴設(shè)備都是使用BLE藍(lán)牙技術(shù)的)
傳統(tǒng)藍(lán)牙與低功耗藍(lán)牙通信方式也有所不同,傳統(tǒng)的一般通過socket方式,而低功耗藍(lán)牙是通過Gatt協(xié)議來實(shí)現(xiàn)。
本文章目的便是介紹BLE 4.0的使用以及相關(guān)問題的解決,本文采用簡(jiǎn)要模式介紹BLE4.0的核心類的使用以及藍(lán)牙開發(fā)的簡(jiǎn)介,如需了解藍(lán)牙知識(shí)的詳細(xì)知識(shí)點(diǎn),百度可搜索其他大神的文章進(jìn)行學(xué)習(xí),下文通用BLE代為藍(lán)牙4.0。
BLE的兩種模式分為CBCentralMannager 中心模式 和CBPeripheralManager 外設(shè)模式,在這里主要和大家分享 CBCentralMannager 中心模式的開發(fā)和使用。
說明:Service,Characteristic是每個(gè)硬件設(shè)備出廠設(shè)定的設(shè)備服務(wù)和特征值,用UUID作為唯一標(biāo)識(shí)符。UUID為這種格式:0000ffe1-0000-1000-8000-00805f9b34fb。比如有3個(gè)Service,那么就有三個(gè)不同的UUID與Service對(duì)應(yīng)。這些UUID都寫在硬件里,我們通過BLE提供的API可以讀取到,一個(gè)BLE終端可以包含多個(gè)Service, 一個(gè)Service可以包含多個(gè)Characteristic,一個(gè)Characteristic包含一個(gè)value和多個(gè)Descriptor,一個(gè)Descriptor包含一個(gè)Value。Characteristic是比較重要的,是手機(jī)與BLE終端交換數(shù)據(jù)的關(guān)鍵,讀取設(shè)置數(shù)據(jù)等操作都是操作Characteristic的相關(guān)屬性。說白了,我們可以把每個(gè)服務(wù)特征值看成是我們網(wǎng)絡(luò)請(qǐng)求的api接口,我們和藍(lán)牙的交互,是要連接到對(duì)應(yīng)的service和對(duì)應(yīng)的Characteristic才可以正確讀取到和硬件文檔以及出廠定制好的服務(wù)和數(shù)據(jù)。
1、導(dǎo)入:#import CoreBluetooth/CoreBluetooth.h
2、遵守CBCentralManagerDelegate,CBPeripheralDelegate協(xié)議
3、初始化中心Manager,創(chuàng)建中心角色
4、檢查當(dāng)前設(shè)備中心的藍(lán)牙狀態(tài)
5、開始掃描
6、發(fā)現(xiàn)外設(shè)
7、連接外設(shè)
? 連接狀態(tài)
8、掃描外設(shè)服務(wù)Service
9、掃描service特征值
10、給特征值寫數(shù)據(jù)(就是發(fā)送指令)
11、訂閱特征值通知(訂閱后可收到回應(yīng)的數(shù)據(jù))
12、根據(jù)特征值讀取數(shù)據(jù)(注:應(yīng)把之前發(fā)送數(shù)據(jù)和訂閱通知的peripheral和characteristic定義為全局屬性)
*該處即為接收到外設(shè)發(fā)送的數(shù)據(jù)的方法
到這里,整個(gè)藍(lán)牙使用的核心流程就基本介紹完了,鑒于寫博客文章太累,太耗時(shí),我決定先睡覺去,回頭把文章慢慢細(xì)化一下,查漏補(bǔ)缺,格式可能也不是很完美,請(qǐng)讀者們見諒,多提寶貴意見,喜歡的老鐵們,可以點(diǎn)下喜歡或者收藏!
本人github地址: shLuckySeven
歡迎去點(diǎn)star
Xcode設(shè)置如圖:
在實(shí)踐中,主要的開發(fā)流程有以下:
藍(lán)牙相關(guān)解釋
本文要介紹的CoreBluetooth,專門用于與BLE設(shè)備通訊。并且現(xiàn)在很多藍(lán)牙設(shè)備都支持4.0,4.0以其低功耗著稱,所以一般也叫BLE(Bluetoothlow energy),所以也是在iOS比較推薦的一種開發(fā)方法。
Central(中心設(shè)備);
Peripheral(外圍設(shè)備);
advertising(廣告);
Services(服務(wù));
Characteristic(特征)
CoreBluetooth介紹
在CoreBluetooth中有兩個(gè)主要的部分,Central和Peripheral,CBPeripheralManager 作為周邊設(shè)備。CBCentralManager作為中心設(shè)備。所有可用的iOS設(shè)備可以作為周邊(Peripheral)也可以作為中央(Central),但不可以同時(shí)既是周邊也是中央。
周邊設(shè)備(Peripheral)設(shè)備是廣播設(shè)備的數(shù)據(jù),中央設(shè)備(Central)是管理并且使用這些數(shù)據(jù)的設(shè)備。
也就是說周邊(Peripheral)向周圍發(fā)送廣播,告訴周圍的中央設(shè)備(Central)它(周邊(Peripheral)這里有數(shù)據(jù),并且說明了能提供的服務(wù)和特征值(連接之后才能獲取),
其實(shí)藍(lán)牙傳值相當(dāng)于網(wǎng)絡(luò)接口,硬件的service的UUID加上characteristic的UUID,
打一個(gè)比喻:service的UUID相當(dāng)于主地址,characteristic的UUID相當(dāng)于短鏈接,短鏈接必須是主地址的分支,拼在一起的是接口,你和硬件設(shè)定的藍(lán)牙傳輸格式類似于json,雙方可識(shí)別的數(shù)據(jù),因?yàn)樗{(lán)牙只能支持16進(jìn)制,而且每次傳輸只能20個(gè)字節(jié),所以要把信息流轉(zhuǎn)成雙方可識(shí)別的16進(jìn)制
文章題目:ios藍(lán)牙4.0開發(fā),ios 藍(lán)牙30
文章URL:http://chinadenli.net/article36/dsihhsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、、App開發(fā)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)