顕微鏡下のBLE。 パート2
パート3最初の部分では、Bluetooth LE標準が発明された理由を分析し、広告パッケージの形式も調べました。 このパートでは、フォーマットの機能を引き続き調査し、BLEデバイスをスマートフォンに接続するメカニズムを検討します。
BLEモード
まず、BLEデバイスのさまざまな動作モードについて説明します。 最も単純なものから始めましょう。 たとえば、屋外の温度計から電話への一方向のデータ転送には、ビーコン形式があります。 デバイスは、静的またはゆっくり変化する動的データを空中に送信します。 ここで、ユーザーは落とし穴によって警告されます。 Androidメニュー項目([設定] => [BlueTooth])を使用してエーテルをスキャンすると、ビーコンは表示されません。 スキャンの種類がすべてです。 アクティブスキャンとパッシブスキャンがあります。 パッシブスキャンは単にブロードキャストをリッスンし、アクティブスキャンではBLEデバイスに対して追加の要求が行われます。 広告主の動作モードには根本的な違いがあります。
ビーコンには、ヘッダーADV_NONCONN_INDがあります。 これは、それらが添付可能ではなく、すでにパッケージに含まれているもの以外の追加情報を運ばないことを意味します。 追加機能や受信モードがないため、すべてのエネルギーは広告パッケージの送信にのみ使用されます。 これは、BLEデバイスにとって最も経済的なタイプの操作です。 ただし、それらを表示するには、スマートフォンでパッシブスキャンモードの特別なプログラムを使用する必要があります。 原則として、ビーコンパッケージの情報は異なる場合があります。 たとえば、1つのパッケージが保持できる以上の情報を転送する必要があります。 その後、ビーコンによって送信される情報を周期的に変更することができます。
パッシブスキャンの機能は、Androidがビーコンの送信から受信するすべてのデータを、すぐにユーザーアプリケーションに転送することです。 アクティブスキャンでは、ガジェットがスマートフォンからのスキャン要求に応答するまで、アプリケーションはBLEデバイスを認識しません。 これは、デバイスの最も一般的な操作モードです。 その機能を検討してください。 スキャン時に、スマートフォンがアナウンスメントチャネル(ADV_INDまたはADV_SCAN_INDなど)のデバイスからメッセージを受信すると、同じチャネルでリクエストを送信します。 これは空のSCAN_REQコマンドです。
T_IFS(Time Inter Frame Space)(150μs)までに送信する必要があります。 アナウンスデバイスがこの要求を聞くために、各広告パッケージの後に、T_IFSの期間チャネル上で遅延します。 この場合、もちろん、追加のエネルギーが消費されます。 要求を受信すると、デバイスは応答SCAN_RSPで応答します。 この図は、最大応答遅延時間もT_IFSであることを示しています。
そして、ここでユーザーは別の落とし穴に閉じ込められています。 実際、スマートフォンのオペレーティングシステムは、SCAN_RSP応答コマンドを受信した後、デバイスのパラメーターを記憶しています。 彼女はガジェットへのSCAN_REQリクエストを時々繰り返し続けますが、それらは定期的ではありません。 また、ユーザーアプリケーションの要求に応じて、システムはアプリケーションのニーズに関係なく、受信した最新のデータを発行します。 したがって、たとえば位置センサーからデータを更新するには、電話でスキャンプロセスを再開する必要があります。 したがって、ADV_INDおよびADV_SCAN_INDヘッダーを持つデバイスは、ビーコンモードで急速に変化するデータを送信するのにはあまり適していません。 接続手順を実行して、作業チャネルに切り替えることをお勧めします。 以下でこれを検討しますが、ADV_INDデバイスのみがこれを実行できることをすぐに示します。
この章の最後で、SCAN_REQおよびSCAN_RSPコマンドの興味深い機能を明らかにしたいと思います。 実際、応答コマンドSCAN_RSPは空にすることも、有用な情報を含めることもできます。 これは2つの場合に使用されます。 まず、すべての必要な情報が1つのパッケージに収まらない場合。 第二に、彼らがバッテリーの電力を節約したいとき。 このようにします。 広告パッケージ自体はできるだけ短くします。 これには、デバイスのヘッダー、フラグ、およびMACアドレスのみが含まれます。 また、SCAN_REQが要求されると、デバイスはSCAN_RSPフレームでそれ自体に関するすべての追加情報(たとえば、名前、バッテリーレベルなど)を送信します。 電話機のオペレーティングシステムは、すべての情報を1つのブロックにまとめます。
参加モード
BLEプロトコルのすべてのリソースを完全に使用するには、動作周波数で作業する必要があります。 これは、同期動作モードです。 作成方法を検討してください。 スマートフォンがアクティブスキャンのリクエストに応じてSCAN_RSPフレームを受信すると、ガジェットを電話に接続することが可能になります。 通常、参加プロセスはユーザーによって開始されますが、切断された場合はアプリケーションによって開始することもできます。 BLEが作成されたのは、同期モードのためでした。 参加すると、ガジェットと電話の両方が経済的な動作モードになります。 デバイスはアドバタイズ周波数での送信を停止し、他の37のチャネルで動作し始めます。 これがどのように起こるか考えてください。 図面を見てください。
ガジェットをアタッチするユーザーのリクエストに応じて、AndroidはCONNECT_REQパケットを送信します。 T_IFSまでに送信する必要があります。 このパッケージには、スマートフォンがデータ交換のために提供する周波数、間隔、アクセスアドレスに関する完全な情報が含まれています。 このパッケージのデータ形式は次のとおりです。
Wiresharkで彼がどのように見えるかを次の図に示します。 [Link Layer Data]セクションで、新しいアクセスアドレスが0x21431df6であることがわかります。 次に、0x277d0fチェックサムの3バイトが来ます。 次の4つの時間パラメーターを取得するには、対応する係数を掛ける必要があります。
transmitWindowSize = Win-Size * 1.25ミリ秒
transmitWindowOffset = WinOffset * 1.25ミリ秒
connInterval =間隔* 1.25ミリ秒
connSupervisionTimeout =タイムアウト* 10ミリ秒
ChMパートでは、さらなる作業が期待される作業チャネルについて説明します。 また、ホップ部分では、許可されたチャネルをどの間隔で通過しますか。 仕様では、ホップの範囲は5〜16です。
次の図は、動作周波数に切り替えるメカニズムを模式的に示しています。
次に、スマートフォンとデバイスは、動作周波数で同期モードで動作し始めます。 ただし、スマートフォン(マスター)は、動作周波数でガジェット(スレーブ)のパラメーターを変更できます。 これは、ほとんどの場合、別のデバイスが電話に参加したときに発生します。 エネルギーを節約するために、スマートフォンは、1つのウェイクアップセッションで順番にサービスを提供するように、接続されたデバイスとの作業を調整する方が簡単です。 この場合、機能交換手順が使用されます。 参加の手順と多くの点で似ており、自動的に行われるため、考慮しません。
この章の終わりに、プロファイルのトピックに触れます。 データの送受信を体系化するために、サービスがBLE形式に導入されました。 これらは、デバイスが実行できるさまざまなタスクです。 たとえば、サービスとは、バッテリー電圧レベルを報告したり、無線でデバイスを再プログラムしたりする機能です。 原則として、プロファイルは複数のサービスを組み合わせます。 BLEデバイスプロファイルの完全なリストについては、 こちらをご覧ください 。
独自のデバイスを開発するには、NUS(Nordic UART Service)プロファイルを使用するのが最も簡単です。 それを扱うために、nordicには2つのアプリケーションがあります。 1つはnRF UART 2.0です。 別の、そして私の意見ではより便利なのは、nRF Toolboxの一部です。
このアプリケーションには、9個のセルのフィールドがあり、それぞれに任意のコマンドを割り当て、セル自体にアイコンを掛けることができます。 したがって、BLEデバイスを制御するための既製のリモートを取得できます。 たとえば、電子玩具を制御します。
nRFgoStudioを使用する
Nordicには、さまざまなクジラを操作するための汎用ツールがあります-これはnRFgoStudioプログラムです。 他の製品と同様に、メーカーのウェブサイトからダウンロードできます 。 プログラマーを使用してデバイスまたはキットをコンピューターに接続します。 nRFgoStudioを開き、nRF5xプログラミング行をクリックします。 プログラマがプロセッサを見ると、図のようにウィンドウが開きます。
右側には、SoftDeviseのプログラム、Applicationのプログラム、Bootloaderの3つのタブがあるウィンドウがあります。 最初のウィンドウ(Program SoftDevise)では、Nordic-aからプロセッサにスタックをロードできます。2番目のウィンドウはユーザーアプリケーション、3番目のウィンドウはライブローダー(DFU)です。 このサイトには記事がありますが、すでに気軽に取り上げられています。
おわりに
広告パッケージの広告とその形成方法を詳細に分析しなかったことに留意したいと思います。 ペンでこれを行う方法に興味がある人は、 記事を参照してください 。 スタックを使用せずに、よりシンプルな北欧チップnRF24L01で作業する方法を示しています。 これにより、パッケージの構造をより深く理解できます。
さらに、これらの同じパッケージを、スタックをバイパスして、nRF51822 b nRF52832チップ上で形成する方法を学ぶことができます。 これは、スタックを操作するよりもはるかに簡単です。 ただし、スタックがなければ、本番チャネルで作業することはできません。 同期モードを独立して実装することは非常に困難です。 BLEのテーマは非常に広範囲であり、常に進化しています。 したがって、もちろん、このプロトコルのすべての機能を説明することはできませんでした。 しかし、最初の起動では、この情報で十分です。 追加情報については、 こちら 、 こちら 、 こちらをご覧ください 。
ペチェルスキフウラジミール