iOS 低功耗藍(lán)牙4.0開發(fā)指南。

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

詳細(xì)描述:低功耗藍(lán)牙(Low Energy; LE),又視為Bluetooth Smart或藍(lán)牙核心規(guī)格4.0版本。其特點具備節(jié)能、便于采用,是藍(lán)牙技術(shù)專為物聯(lián)網(wǎng)(Internet of Things; IOT)開發(fā)的技術(shù)版本。所以它最主要的特點是低功耗,普及率高?,F(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版本對傳輸速率做了進(jìn)一步他提升,提高了2.5倍,蘋果從iphone6開始使用4.2,最新的藍(lán)牙標(biāo)準(zhǔn)為藍(lán)牙5.0,其中最大的特點連接范圍擴(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。大多時候都是central去連接peripheral的場景。

2.1.2 廣播和連接:

peripheral會發(fā)出廣播,central掃描到廣播后,可以對設(shè)備進(jìn)行連接,發(fā)出connect請求,peripheral接收到請求后,同意連接后,central和peripheral就建立了連接。

2.1.3?連接后的操作:

write,read,notify,indecate, response or not …

indecate和notify的區(qū)別就在于,indecate是一定會收到數(shù)據(jù),notify有可能會丟失數(shù)據(jù)(不會有central收到數(shù)據(jù)的回應(yīng)),write也分為response和noresponse,如果是response,那么write成功回收到peripheral的確認(rèn)消息,但是會降低寫入的速率。

2.1.4 協(xié)議:

每個具體的智能設(shè)備,都約定了一組數(shù)據(jù)格式,這個就是數(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位時候,高字節(jié)在前低字節(jié)在后。

3. iOS藍(lán)牙應(yīng)用的一般開發(fā)流程。


4. 藍(lán)牙的數(shù)據(jù)交互。

write,read,notify,indecate, response or not … 都是容易理解的,indecate和notify對應(yīng)的是長連接,建立indecate后,peripheral可以隨時往central發(fā)送數(shù)據(jù)。

indecate和notify的區(qū)別就在于,indecate是一定會收到數(shù)據(jù),notify有可能會丟失數(shù)據(jù)(不會有central收到數(shù)據(jù)的回應(yīng)),write也分為response和noresponse,如果是response,那么write成功回收到peripheral的確認(rèn)消息,但是會降低寫入的速率。

對于一個charateristic,他的讀寫訂閱的權(quán)限是peripheral決定的,熟悉可以被同時設(shè)置,一般會根據(jù)外設(shè)的功能來決定。

5.藍(lán)牙ota DFU。

藍(lán)牙ota,DFU(Device Firmware Update)指的是藍(lán)牙設(shè)備的固件升級,其實是一整套流程,不同的藍(lán)牙芯片,ota的流程有不同之處,我這里用ti的芯片舉例。步驟為:切系統(tǒng)(bootloader mode),重啟,傳輸數(shù)據(jù),驗證數(shù)據(jù),切系統(tǒng),重啟,完成。

其中數(shù)據(jù)傳輸也會分成很多節(jié)去發(fā)送,沒法送一段數(shù)據(jù),做一次數(shù)據(jù)校驗。

6.ota存在的問題。

每個智能設(shè)備的速率,功耗,存儲都會有很多限制,導(dǎo)致很多設(shè)備會自己去實現(xiàn)ota的功能,自定義流程和數(shù)據(jù)傳輸方式,導(dǎo)致許多設(shè)備都是有自己私有的ota模式和協(xié)議,所以在做開發(fā)的時候,要仔細(xì)閱讀設(shè)備協(xié)議中對ota的描述。

7.如何做自動重連。

只需要在設(shè)備斷開連接的委托方法中,重新調(diào)用gatt.connet或者是centralManager.connet方法就可以了,無論當(dāng)時設(shè)備是否有點,是否在周圍,當(dāng)設(shè)備再次開會或者連接到可連接范圍內(nèi),都會自動被連上。

8.連接失敗處理。

分兩個平臺來說,iOS端也有連接失敗的委托,但是好像幾乎不會發(fā)生這種情況,而對于同款設(shè)備,android常常會出現(xiàn)連接失敗的情況,status != BluetoothGatt.GATT_SUCCESS,android端開發(fā)請不要把連接失敗和斷開連接放在一塊處理,因為斷開連接可以直接嘗試重新連接,而連接失敗后嘗試重新連接,需要加一些延時,并且需要gatt.close,清空一下狀態(tài),否則會把gatt阻塞導(dǎo)致手機(jī)不重啟藍(lán)牙就再也無法連接任何設(shè)備的情況。

9.后臺運行。

iOS后來運行,需要設(shè)備中info.Plist權(quán)限,key:Required background modes ,value: bluetooth-central(手機(jī)作為central) , bluetooth-peripheral。

10.同時連接多個設(shè)備。

使用同一個CBCentralManager,通過進(jìn)入委托的peripheral的identifier區(qū)分不同的設(shè)備,進(jìn)行不同的操作和處理。

11.掃描廣播包。

所有外設(shè),只有在發(fā)出廣播包的情況下,才能被central發(fā)現(xiàn),絕大多數(shù)情況下,外設(shè)被連接后就不會發(fā)出廣播(也有例外),很多人遇到無法找到設(shè)備的問題,大多屬于這種情況。

12.提高藍(lán)牙連接速度。

無論是iOS,還是android,都可以通過已綁定的設(shè)備,在不開啟掃描的情況下進(jìn)行快速連接,iOS需要的參數(shù)是peripheral的identifier,android需要mac地址。但android和iOS還是有一些區(qū)別的,比如iOS不能拿到已綁定的設(shè)備list,但是可以通過UUID去拿到peripheral的實例。而android可以拿到已綁定的設(shè)備list。android綁定過程需要手動調(diào)用createBond的方法,而iOS在連接成功一次后會自動綁定。 android在處理createBond時,常常會應(yīng)為不同手機(jī)平臺,不同設(shè)備,會產(chǎn)生兼容性的問題,這點需要注意。

13.定向掃描。

在掃描時候可以傳入serviceUUID,這樣可以掃描到特定條件的設(shè)備,提高掃描的速度,排除干擾。

14.如何獲取mac地址。

而iOS出于蘋果的安全策略問題,無法直接獲得mac地址,只能得到一個mac地址換算出來的identifier。

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

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

  • 知乎live:一小時藍(lán)牙科普 文字整理版 什么是藍(lán)牙4.0, 藍(lán)牙其他標(biāo)準(zhǔn)又是什么? 低功耗藍(lán)牙(Low Ener...
    YYSheng閱讀 1,636評論 0 2
  • 藍(lán)牙簡介 藍(lán)牙( Bluetooth? ):是一種無線技術(shù)標(biāo)準(zhǔn),可實現(xiàn)固定設(shè)備、移動設(shè)備和樓宇個人域網(wǎng)之間的短距離...
    Chefil閱讀 2,162評論 2 19
  • 這里我們具體說明一下中心模式的應(yīng)用場景。主設(shè)備(手機(jī)去掃描連接外設(shè),發(fā)現(xiàn)外設(shè)服務(wù)和屬性,操作服務(wù)和屬性的應(yīng)用。一般...
    丶逝水流年閱讀 2,402評論 3 4
  • 《布谷鳥的叫聲》 清晨我聽到布谷鳥的叫聲, 剛剛洗過的頭發(fā)還沒有干。 微風(fēng)透過窗紗吹進(jìn)房間里, 我坐在窗邊, 你在...
    卦貓閱讀 850評論 8 13
  • 首屆頒獎典禮已結(jié)束,此刻,你想對貓友和8月的自己說些什么? 想說貓友們你們太厲害了,鼓掌! 然后想對八月份的自己說...
    撿到蜜罐的熊閱讀 220評論 0 0

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