iOS BLE開發(fā)中的丟包問題解析
一、背景介紹
在當(dāng)前的BLE開發(fā)過程中,手機(jī)作為中央設(shè)備負(fù)責(zé)主動(dòng)發(fā)起掃描連接,而設(shè)備則作為邊緣設(shè)備存在。在設(shè)備與App交互的過程中,需要發(fā)送指令和傳輸文件。文件的傳輸涉及到將設(shè)備中的文件拆解成數(shù)據(jù)包通過BLE發(fā)送給App。近期,在文件傳輸過程中遇到了嚴(yán)重的丟包問題。

二、問題描述
在設(shè)備與App定義了一套通用協(xié)議后,指令的發(fā)送正常無(wú)誤。但在發(fā)送文件時(shí),App接收的數(shù)據(jù)出現(xiàn)了丟包現(xiàn)象。當(dāng)時(shí)設(shè)置的設(shè)備發(fā)送數(shù)據(jù)到App時(shí),拆分的數(shù)據(jù)包大小為180個(gè)字節(jié),這一大小在iPhone 6s上已接近上限。但在實(shí)際傳輸過程中,App端接收的數(shù)據(jù)仍然會(huì)出現(xiàn)丟包。
三、問題排查與聯(lián)想
在排查過程中,我們?cè)鴳岩蛇^是設(shè)備端沒有正確發(fā)送數(shù)據(jù)。為此,設(shè)備端調(diào)整了發(fā)送邏輯,在每包數(shù)據(jù)發(fā)送后,等待底層發(fā)送成功回調(diào)再發(fā)送下一包數(shù)據(jù)。這種模式下App端接收的數(shù)據(jù)仍然會(huì)丟失。
我回想起之前在做AI語(yǔ)音耳機(jī)時(shí)的經(jīng)驗(yàn)。那時(shí),通過BLE傳輸實(shí)時(shí)音頻及進(jìn)行OTA(固件升級(jí))時(shí),曾因耳機(jī)內(nèi)存不足導(dǎo)致在瘋狂發(fā)送文件數(shù)據(jù)時(shí)內(nèi)存溢出,耳機(jī)崩潰。為解決這一問題,我們不僅對(duì)發(fā)送的數(shù)據(jù)包設(shè)置了合適的長(zhǎng)度,還在發(fā)送過程中加入了延時(shí),給固件足夠的時(shí)間處理數(shù)據(jù)。

四、手機(jī)硬件差異與解決方案
聯(lián)想到不同手機(jī)的藍(lán)牙芯片性能存在差異,我猜測(cè)在固件瘋狂發(fā)送數(shù)據(jù)時(shí),不同手機(jī)的藍(lán)牙芯片處理能力不同,可能導(dǎo)致丟包率不同。為此,我們測(cè)試了iPhone 6s、iPhone X和iPhone 11的丟包情況,發(fā)現(xiàn)后兩臺(tái)設(shè)備的丟包率明顯較低。在Android手機(jī)上也發(fā)現(xiàn)了類似規(guī)律。
基于這些測(cè)試,我們提出了兩個(gè)解決方案:一是降低每個(gè)數(shù)據(jù)包的大?。欢敲總€(gè)數(shù)據(jù)包間隔一定時(shí)間發(fā)送。單一解決方案效果并不理想。最佳方案是結(jié)合兩種措施,將丟包率降至最低。這一方案中的數(shù)據(jù)包大小和發(fā)送間隔是通過測(cè)試得到的平衡值,針對(duì)不同類型的藍(lán)牙芯片可能需要調(diào)整。
五、總結(jié)與反思
造成丟包問題的原因其實(shí)并不復(fù)雜,只是之前固件開發(fā)和App開發(fā)雙方未能從全局角度考慮問題。通過這次問題的排查和解決,我們深刻認(rèn)識(shí)到在跨團(tuán)隊(duì)協(xié)作中,雙方應(yīng)加強(qiáng)溝通,共同面對(duì)問題,才能找到最有效的解決方案。

通過本次經(jīng)驗(yàn)的總結(jié),我們也意識(shí)到在未來的開發(fā)過程中,應(yīng)更加注重設(shè)備的性能差異,以及數(shù)據(jù)傳輸時(shí)的穩(wěn)定性。加強(qiáng)團(tuán)隊(duì)間的協(xié)作與溝通,避免因信息不暢導(dǎo)致的問題延誤。如何學(xué)習(xí)iOS BLE 4.0
一、背景及準(zhǔn)備
自iOS 6系統(tǒng)之后,蘋果開始支持BLE 4.0,隨后的iPhone 4s、iPod 5以及iPad 3等機(jī)型都內(nèi)嵌了BLE 4.0硬件。對(duì)于開發(fā)者而言,要想開發(fā)BLE 4.0的App,首先需要確保你的開發(fā)環(huán)境符合蘋果的要求。值得一提的是,蘋果在BLE 4.0之后,對(duì)外部連接設(shè)備的MFI認(rèn)證要求有所放寬。你的外設(shè)必須配備藍(lán)牙4.0模塊。
二、開發(fā)框架及基礎(chǔ)
要開始開發(fā)BLE 4.0的App,你需要在項(xiàng)目中導(dǎo)入CoreBluetooth.framework框架。在需要使用到藍(lán)牙的文件里,你需要導(dǎo)入相關(guān)的頭文件,如import

接下來,你需要在藍(lán)牙類里實(shí)現(xiàn)兩個(gè)協(xié)議:CBCentralManagerDelegate和CBPeripheralDelegate。為了進(jìn)行藍(lán)牙操作,你需要?jiǎng)?chuàng)建兩個(gè)實(shí)例對(duì)象:CBCentralManager和CBPeripheral。其中,CBCentralManager主要用于掃描外設(shè)、連接外設(shè)及處理外設(shè)斷開的情況,而CBPeripheral則用于在成功連接外設(shè)后進(jìn)行一系列操作,如讀取服務(wù)號(hào)、特征值號(hào)以及對(duì)這些特征值進(jìn)行讀寫操作。
三、IOS與外設(shè)聯(lián)機(jī)流程
1. IOS的藍(lán)牙中心管理器開始掃描廣播包,掃描時(shí)長(zhǎng)可通過定時(shí)器控制,并可以設(shè)定掃描的具體條件。
2. 外設(shè)開始廣播,廣播時(shí)長(zhǎng)可設(shè)定。
3. IOS發(fā)現(xiàn)廣播包后請(qǐng)求連接外設(shè)。連接過程由底層自動(dòng)實(shí)現(xiàn),開發(fā)者無(wú)需編寫代碼。外設(shè)接收到連接請(qǐng)求后,如果同意接收,會(huì)發(fā)送連接請(qǐng)求確認(rèn)包。IOS收到該包后,兩邊設(shè)備完成連接。

4. 連接成功后,IOS可以讀取外設(shè)的相關(guān)信息,如服務(wù)號(hào)、特征值號(hào)、硬件信息及電池電量等。
5. 在連接過程中,如果設(shè)備斷開連接,需要重新連接。這取決于硬件和IOS程序?qū)τ谶B接斷開的處理代碼。
6. 外設(shè)和IOS端也可以主動(dòng)發(fā)起斷開連接的請(qǐng)求。
四、Android BLE數(shù)據(jù)接收
近期,我參與了移動(dòng)APP(安卓)設(shè)計(jì)大賽。我負(fù)責(zé)Android上位機(jī)的開發(fā),主要聚焦于低功耗藍(lán)牙BLE的開發(fā)。在開發(fā)過程中,我深入研究了谷歌官方提供的demo及其他網(wǎng)友基于官方demo的修改版本。

剛開始接觸時(shí),廣播、跳轉(zhuǎn)的代碼看起來有些復(fù)雜,但經(jīng)過三四天的努力,我逐漸理解了官方的demo。主要是通過修改官方demo的代碼,獲得所需的結(jié)果。簡(jiǎn)單來說,就是理解并修改代碼,實(shí)現(xiàn)Android設(shè)備通過BLE接收數(shù)據(jù)的功能。探索藍(lán)牙低能耗設(shè)備之旅:Activity掃描與驗(yàn)證之旅
=========================
一、開啟BLE設(shè)備掃描之旅
在數(shù)字化世界中,藍(lán)牙低能耗(BLE)技術(shù)已成為移動(dòng)設(shè)備不可或缺的一部分。為了與這些設(shè)備順暢交流,首先得確認(rèn)我們的設(shè)備是否支持BLE技術(shù)。這并非一個(gè)簡(jiǎn)單的過程,因?yàn)樗婕暗綄?duì)設(shè)備功能的深入了解和驗(yàn)證。尤其是針對(duì)Android系統(tǒng),谷歌在Android 4.3版本才開始正式支持BLE技術(shù)。這是一個(gè)重要的里程碑,標(biāo)志著移動(dòng)技術(shù)與BLE技術(shù)的融合邁出了重要的一步。實(shí)際的工作和測(cè)試過程中充滿了挑戰(zhàn)。由于長(zhǎng)時(shí)間缺少一個(gè)合適的測(cè)試設(shè)備,我們?cè)诔绦蛐薷暮鬅o(wú)法進(jìn)行有效的測(cè)試,這無(wú)疑給我們的工作帶來了不小的困擾。接下來,我們將詳細(xì)解讀如何掃描BLE設(shè)備。
二、檢查設(shè)備兼容性

為了確保應(yīng)用程序能在目標(biāo)設(shè)備上順利運(yùn)行,首要任務(wù)就是驗(yàn)證設(shè)備是否具備運(yùn)行BLE應(yīng)用的基本條件。這一過程主要關(guān)注設(shè)備的硬件和軟件配置,特別是操作系統(tǒng)版本。對(duì)于Android系統(tǒng)來說,版本兼容性是一個(gè)不可忽視的問題。我們需要確保設(shè)備運(yùn)行的Android版本支持BLE技術(shù)。在Android 4.3及之后的版本中,谷歌開始支持BLE技術(shù)。對(duì)于開發(fā)者而言,了解并確認(rèn)設(shè)備的兼容性是開發(fā)過程中的關(guān)鍵步驟。
三、深入探索BLE技術(shù)
一旦確定了設(shè)備的兼容性,接下來的步驟就是深入了解BLE技術(shù)本身。這涉及到對(duì)BLE工作原理、通信協(xié)議以及與其他設(shè)備的交互方式等方面的研究。在這個(gè)過程中,我們需要熟悉藍(lán)牙設(shè)備的各種特性和功能,以便更好地實(shí)現(xiàn)應(yīng)用程序與設(shè)備的無(wú)縫對(duì)接。這不僅要求我們具備扎實(shí)的技術(shù)基礎(chǔ),還需要我們不斷學(xué)習(xí)和探索新的技術(shù)趨勢(shì)。
四、實(shí)施設(shè)備掃描
在了解了設(shè)備的兼容性和BLE技術(shù)的基本原理后,我們就可以開始實(shí)施設(shè)備掃描了。這個(gè)過程涉及到使用特定的工具和軟件來搜索附近的BLE設(shè)備,并獲取它們的相關(guān)信息。通過掃描,我們可以找到可用的設(shè)備并建立連接,從而實(shí)現(xiàn)數(shù)據(jù)的傳輸和交互。這個(gè)過程需要我們對(duì)設(shè)備的硬件和軟件都有深入的了解,以確保掃描過程的順利進(jìn)行。

五、測(cè)試與優(yōu)化
最后一步是測(cè)試和優(yōu)化。盡管我們已經(jīng)完成了設(shè)備掃描和連接的過程,但在實(shí)際的應(yīng)用場(chǎng)景中,還需要對(duì)應(yīng)用程序進(jìn)行測(cè)試以確保其穩(wěn)定性和性能。由于缺乏合適的測(cè)試設(shè)備,我們?cè)诔绦蛐薷暮鬅o(wú)法進(jìn)行有效的測(cè)試,這成為我們面臨的一大挑戰(zhàn)。為了解決這個(gè)問題,我們需要尋找更多的測(cè)試設(shè)備,并在實(shí)際的使用場(chǎng)景中測(cè)試我們的應(yīng)用程序,以確保其能在各種環(huán)境下都能穩(wěn)定運(yùn)行。這個(gè)過程雖然充滿挑戰(zhàn),但只有通過不斷的測(cè)試和優(yōu)化,我們才能開發(fā)出更加優(yōu)秀的產(chǎn)品。
掃描BLE設(shè)備并驗(yàn)證其兼容性是一個(gè)復(fù)雜而又必要的過程。通過深入了解設(shè)備的特性和BLE技術(shù)的基本原理,我們可以更好地實(shí)現(xiàn)應(yīng)用程序與設(shè)備的無(wú)縫對(duì)接。這個(gè)過程充滿了挑戰(zhàn)和困難,需要我們不斷學(xué)習(xí)和探索新的技術(shù)趨勢(shì)。通過不斷的努力和實(shí)踐,我們將能夠開發(fā)出更加優(yōu)秀的產(chǎn)品,為用戶提供更好的體驗(yàn)。