1

私は Bluetooth を初めて使用しますが、BLE 周辺機器に接続してデータを特性に書き込む Android クライアントで 1 か月ほど作業しています。

私の BLE ペリフェラルは nrf52832 (Nordic) デバイスで、BLE_SM (セキュリティ マネージャー) サンプル プロジェクトを読み込んで、ボンディング/ペアリングを使用して安全な通信を行うことができます。

私の Android コードは周辺機器に正常にペアリング/結合されますが、周辺機器がアドバタイズを停止することがわかります。これが正常なのか、タイプ REMOTE_USER_TERMINATED_CONNECTION の gap.onDisconnection イベントを受信したためなのかはわかりません。

関係なく、私は拘束されているので、デバイスをスキャンする必要がなくなり、単に呼び出すことができると思うかもしれませんがdevice.connectGatt()、それは機能せず、私のコールバックは GATT STATE_DISCONNECTED イベントを取得します。Nordic から以下を貼り付けた別の投稿 (チュートリアル)を読みました。

以前からアドレスを知っていても、アドバタイズしていない周辺機器に接続することはできません。これは、アドバタイズメントの送信後、周辺機器が受信機の電源を一定時間だけオンにするためです。この時間は、接続要求とスキャン要求をリッスンするために使用されます。

これが事実である場合、周辺機器の継続的なアドバタイジングを停止することはできないようです。これは、周辺機器の消費電力を削減しようとしている場合には役に立ちません。

4

1 に答える 1

2

The citation is 100% true. Connection setup has nothing to do with if the device is bonded or not (assuming you don't use directed advertising). If the peripheral is neither connected nor advertising, the radio is completely off and therefore a central can't connect.

If you want to minimize power consumption, make sure you don't advertise when you don't need to. Depending on your use case, can you have anything triggering advertising? For example a button or a sensor event?

If you need to advertise all the time, you can try use a longer advertising interval to save battery, but this will increase discovery and connection setup time.

于 2019-02-18T00:16:22.347 に答える