2016-12-27 103 views
0

我是BLE的新手,並希望您能夠指引我採用正確的實施方法。通過BLE傳輸大數據塊的最佳方法

我正在研究外圍設備(電池供電)持續聚合傳感器讀數的應用。 在移動端應用程序中會出現一個「同步」按鈕,按下按鈕後,我想將所有在外設中累積的傳感器讀數傳輸到移動應用程序。 同步之間的最大持續時間可能是幾天,因此累積的數據可能達到20千字節的大小。

現在,我想知道什麼是執行從外設到中央應用程序的數據傳輸的最佳方法。 我想過創建一個特徵數組,其中每個特徵將包含固定數量的樣本(例如,表示1小時的讀數)。

然後,一旦同步,我會:

  1. 閱讀特性計數(多少1小時細胞)。
  2. 然後逐個閱讀特徵(1小時)。

但是,我不知道這是否是一種有效的方法?

  1. 我不確定這是否是最「高效」的方式,我可以 使用。
  2. 我不確定特徵讀取是否可行,或者我需要使用指示來代替。

這裏的任何幫助將不勝感激:)

在此先感謝,莫蒂。

回答

3

我只是簡單地使用通知。

使用您寫入的某個特性來觸發傳輸開始。

然後有另一個特點,你只需通過發送20個字節的數據流。大多數用於BLE片上系統的SDK都有一些方法來控制數據流,所以你不會發送得太快。通常通過在準備好接受下一個通知時觸發回叫。

爲了知道數據的大小被髮送,例如,您可以讓第一個通知包含大小,和他們的其餘數據。

這是最花時間和功率高效的方式,因爲可以有每個連接的時間間隔,如果你做了很多的比較發送多少條信息,而不是讀取通常需要每兩個往返。不要使用適應症,因爲他們還需要每次適應症基本上兩次往返。無論如何,它們也毫無用處。

你可能通過交換更大的MTU(這將導致較低的L2CAP/ATT頭開銷)增加速度也有些%。

+0

埃米爾嗨, 非常感謝 - 這是非常有幫助的。 我有兩個後續問題 - 希望它確定:) 您寫道 - 「每個連接間隔可以發送多個通知」,是否存在對特徵數量的限制讀取操作我可以在單個連接間隔? 我只是試圖瞭解通知是否「更快」,僅僅是因爲它們不需要應用程序級ACK,或者對於協議固有的READ操作可能存在其他限制。 – MotiC

+0

只限制ACK的應用程序是限制 - 一次只能有一個GATT操作的規則。 – Emil

相關問題