0

私はBLEを初めて使用しており、適切な実装方法を教えていただければ幸いです。大規模なデータチャンクをBLE経由で転送するための最善のアプローチ

私は周辺機器(電池式)が連続してセンサーの読みを集計するアプリケーションに取り組んでいます。 モバイルサイドアプリケーションでは、ボタンを押すと「同期」ボタンが表示されます。周辺機器に蓄積されたすべてのセンサーの読み取り値をモバイルアプリケーションに転送したいと思います。 同期の最長時間は数日であるため、蓄積されたデータは20Kバイトのサイズに達する可能性があります。

ここで、周辺機器から中央アプリケーションへのデータ転送を行うための最良の方法は何でしょうか。 私は、各特性が固定量のサンプル(例えば、1時間の測定値を表す)を含む特性のアレイを作成することを考えました。

その後、同期時に、私はします:

  1. は特性が(どのように多くの1hours細胞)カウント読みます。
  2. 次に特性(1時間セル)を1つずつ読みます。

しかし、これが有効なアプローチであるかどうかわかりません。

  1. これが最も効率的な方法であるかどうかはわかりませんが、 を使用してください。
  2. Characteristic READが行く方法であるかどうかわからない、または多分 代わりに表示を使用する必要があります。

ここにすべてのヘルプは高く評価されます:)事前に

おかげで、モティを。

答えて

3

私は単に通知を使用します。

転送開始をトリガーするために何かを書く特性を使用します。

次に、一度に20バイトを送信するだけでデータをストリームするという別の特徴があります。 BLE system-on-a-chipのほとんどのSDKは、データの流れを制御してあまりにも速く送信しないようにするための方法を持っています。通常は、次の通知を受け取る準備ができたときにコールバックをトリガします。

送信されるデータのサイズを知るために、たとえば、最初の通知にサイズが含まれ、残りのデータにデータが含まれるようにすることができます。

接続間隔ごとに多くの通知が送信されるため、これは最も時間がかかり、電力効率が良い方法です。代わりに通常は2回の往復が必要です。表示ごとに基本的に2回の往復を必要とするため、表示を使用しないでください。とにかく彼らはまた役に立たない。

さらに大きいMTUを交換することで、速度をいくらか増やすこともできます(L2CAP/ATTヘッダーのオーバーヘッドが低くなります)。

+0

こんにちはEmil、 ありがとうございます - 非常に役に立ちます。 私は2つのフォローアップの質問があります - それはOKです:) あなたは "接続間隔ごとに多くの通知を送ることができます"という特性の数に制限があります。 ? 通知がアプリケーションレベルのACKを必要としないか、またはプロトコルに固有のREADアクションに他の制限がある可能性があるため、単に「高速」であるかどうかを理解しようとしています。 – MotiC

+0

制限であるACKを制限するのはアプリケーションだけです。また、一度に1つのGATT操作しか実行できないというルールがあります。 – Emil

関連する問題