7

この問題は、10月にここで議論されました。CoreBluetoothはかなり新しく、それ以降にいくつかの変更が行われた可能性があるため、これは新しい質問です。

2秒ごとにアドバタイズするBLEデバイスがあります。スキャンは以下を使用して開始されます。

[self.CM scanForPeripheralsWithServices:nil options:0]

これは、2秒から4秒後に(centralManager didDiscoverPeripheralコールバックを介して)最も頻繁に返されます。(CMは私のCentralMangerです)

ただし、約30%の時間、スキャンには10〜18秒かかります。近くのデバイスのWiFiとBTは、可能な限りスペクトルをクリアするために無効になっています。スキャンする時間はRSSIとは無関係のようです。これは、iPAd3の隣にある場合は-40dB、別の部屋に約5メートル離れている場合は-70dBです。

[self.CM stopScan]; 

scanWithPeripheralsの前に呼び出されます。これは、非常に長い待機の発生を減らすためです。

接続は確立されていません。特性データまたはサービスデータは要求されていません。広告データで十分です。

便利なTIデモンストレーターアプリがあります。これにより、同様の結果が得られます(stopScan呼び出しを行わないため、実際にはわずかに悪化します)

このStackoverflowの回答に見られるように、CBCentralManagerScanOptionAllowDuplicatesKeyオプションは、検出時間が長くなると思われる場合に使用します。

明らかに、次のステップは、いくつかのより高度なBTスニファ/広告生成ツールを使用して、このCoreBluetooth応答をさらに特徴づけることです。

これはもう1つの有用なSOの質問ですが、応答時間については十分に詳しく説明されていません。

4

2 に答える 2

13

CoreBluetoothは継続的にリッスンしていません。BluetoothクラシックおよびWifiとHWリソースを共有しています。

基本的に、広告パッケージを受け取るには「ラッキー」である必要があります。2つの同期されていないシステムの2つのスライドウィンドウが互いにぶつかる必要があるという点で「ラッキー」。CoreBluetoothが10%の時間BLEウィンドウを開き、正確なタイミングを知らずにアドバタイズメント間隔を設定した場合、アドバタイズメント間隔の10倍かかる/かかる可能性があります。

1つの推奨事項は、最初の30秒間(たとえば20msで、最初のアクティブなCoreBluetoothウィンドウでそれを検出する必要があります)> fast <をアドバタイズしてから、Appleによって指定された間隔に減速することです。2,00秒は適切な数値ではありません。

こちらのガイドラインを参照してください: https ://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

18ページ

アドバタイズ間隔 Bluetoothアクセサリのアドバタイズ間隔は、検出と接続のパフォーマンスに影響を与えるため、慎重に検討する必要があります。バッテリ駆動のアクセサリの場合、そのバッテリリソースも考慮する必要があります。Apple製品によって検出されるためには、Bluetoothアクセサリは、最初に推奨される広告間隔20ミリ秒を少なくとも30秒間使用する必要があります。最初の30秒以内に検出されない場合、アクセサリはバッテリ電力を節約し、アドバタイズ間隔を長くすることを選択する場合があります。Appleは、Apple製品による発見の可能性を高めるために、次のより長い間隔のいずれかを使用することをお勧めします。

645ミリ秒768ミリ秒961ミリ秒1065ミリ秒1294ミリ秒

したがって、バッテリーを節約する必要がある場合は、1294ミリ秒を試してください。

于 2012-12-31T08:51:46.350 に答える
0

これは古いスレッドですが、MacBook Pro(15インチ、2017)のmacOS HighSierra10.13.3でも同じ問題が発生します。問題は、「Apple TV」が常にすばやく表示される傾向がある周辺機器によって異なります。これは、広告時間が短いためと考えられます。一部の周辺機器は、表示されるまでに長い時間がかかるか、まったく表示されないようです。また、アドバタイズメントが遅すぎると、最初にアドバタイズメントを見つけて、その後非常に短い固定時間で応答することによって接続が発生するため、接続も遅くなる可能性があります(ペリフェラルはその時間中にリッスンしています)。

この問題の回避策は、Wi-Fiとハンドオフの両方をオフにすることです。Apple-システム環境設定-一般に移動し、「このMacとiCloudデバイス間のハンドオフを許可する」のチェックを外してハンドオフをオフにします。これにより、スキャンでアドバタイズパケットがより迅速に表示され、接続がより高速になるだけでなく、受信されている信号強度がより強いことを表すより高い(負の値が少ない)RSSIも表示されます。

この問題はiOSには表示されないことに注意してください。これは、BTとWi-Fiの共存サポートが改善されているため、およびHandoff(Airdrop)と通常のBLEの使用との間で発生している可能性があります。この問題は、スキャンおよび接続中のBLEリスニング時間の割合の1つにすぎないようです。接続が確立されると、干渉はそれほど多くないように見えます。一部には、これは、接続後に自動低レベルBLE再試行と接続間隔間の周波数ホッピングが行われるという事実によるものです。スキャンして接続を確立している間(どちらもアドバタイズパケットの表示に依存しています)、3つのBLEアドバタイズメントチャネルを順番に監視する必要がありますが、macOSはそれを行っていないかのように動作します。技術的には、広告チャネルはWi-Fiチャネルと重複しません(を参照)。http://www.argenox.com/a-ble-advertising-primer/)。

于 2018-02-27T09:18:03.573 に答える