3

2つのBluetoothデバイス間でデータを交換する必要があります。その1つはAndroidデバイスです。簡単にするために、他のデバイスは、健康追跡ツールが生成するデータと同様のデータを生成するbluezを実行する汎用Linuxデバイスであると仮定できます。Bluetooth経由で確実に通信する方法はありますか?

このシナリオは、Bluetooth Low Energyの簡単な使用例です。私が現在実行している問題は、通信が信頼性がなければならないという事実(TCPが信頼できる方法で信頼できる)から来ている。これが意味する:

  • ない破損
  • データの順序は、損失がリンク層で防止されるが
  • 全く重複
  • ないファントムパケット
  • を保存しないことが必要である

    • 全く損失を低エネルギーで作業しているときは、明示的に保存されていないと思われます(指標を使用するとおそらくこれが達成されます)。

      Bluetoothで多くの作業をしていない私は現在、オプションの量がかなり減っていますが、同時にオプションは法案にうまく収まらないようです。

      2つのBluetoothデバイス間の信頼性の高い通信を設定するための「ベストプラクティス」はありますか? Bluetooth低エネルギーソリューションが望ましいでしょうが、必須ではありません。

    答えて

    2

    あなたのBluetooth接続が確実に設定されたら、したがって、データの消失や破損について心配する必要はありません。

    あなたが心配していることは、あなたの側で簡単に処理できます。あなたはBluetoothAdapterBroadcastReceiverを設定している間、適切な接続と切断のコールバックを取得します。

    接続が切断された場合は、接続を再開しなければならない場合があります。正しく確立されたら、データを再送信することができます。

    あなたの目的はまだわかりませんが、ここで言及する必要があるのは、接続を長時間保持している場合は、私はBluetooth通信をお勧めしません。一部のデバイスは、連続送信がないとしばらくすると接続を自動的に切断します。

    +0

    私は、喪失や破損がBLEの問題ではないと考えました。私が列挙した他の要件はどうですか?仕様書には、パケットの順序が保持されることを確認するものは何もありません。また、重複やファントムパケットを防止したい場合は、これらの要件を自分で実装する必要がありますか? – ASM88

    +0

    'パケットの順番は保存されます.' - 私は仕様も見つけられませんでしたが、どちらの注文にも問題は見つかりませんでした。 '重複とファントムパケットを防ぐ' - 通常のケースでは、データの損失や破損の可能性はないので、重複パケット戦略を実装する必要はありません。 –

    +1

    それは私が自分の研究で見つけたものです。正確には私が望んでいたものではありませんでしたが、私はまだこの答えを受け入れています。 – ASM88

    1

    AndroidはBluetoothをサポートしていますが、ストリームからの受信データのみを送信できます。 Googleのサンプルプロジェクトは、https://github.com/googlesamples/android-BluetoothChatです。このサンプルの唯一の欠点は、Handlerを使用してBluetoothイベントについてニニングすることです。私は少し変更して別のスレッドを使用し、設定したインターフェースのメソッドを呼び出して、プロジェクトを見てみましょう:https://github.com/AlexShutov/LEDLights。これは通常のBluetoothで、BLEではなく、助けてくれることを願っています。

    1

    AndroidのBLEスタックはリンク層の仕様と同じくらい良好です。したがって、一方向には「応答なしで書き込み」を使用し、もう一方の方向には通知を使用できます。あなたの周辺機器が入ってくる書き込みを落とさないようにしてください。

    0

    BLEは24ビットCRCを使用します。 BLEを使用して送信されるデータの量は非常に堅牢で、破損の可能性は非常に低いです(TCP CRCは16ビット、イーサネットCRCは32ビットです(http://www.evanjones.ca/tcp-and-ethernet-checksums-fail.htmlを参照)。

    有線ネットワークでの発注の問題は、同じ宛先に異なるルートでパケットをルーティングした結果です(If TCP is connection oriented why do packets follow different paths?参照)。これは部分的にスライディングウインドウ応答プロトコルの使用によるものである。これは、いくつかのパケットが確認応答される前に送信されることを可能にする.BLEにはルーティングはなく、確認応答スキームは停止および待機ARQ方式(2ビット遅延確認応答)、これは、確認応答されずに新しいパケットを送信することができないことを意味する。これらの2つの要因は、アウト・オブ・オーダー・トランスミッションが起こりそうもない可能性があります。

    関連する問題