はじめに
前の記事で、ZigBeeワイヤレステクノロジーの主な機能について説明しました。 このパートでは、実際にこのテクノロジーをすぐに使い始める方法について説明します。 これを行うために、ファームウェアを内蔵したETRX357モジュールを選択しました。これにより、ネットワーク機能を操作し、一連のATコマンドを使用してアナログおよびデジタル周辺機器を管理できます。 また、この記事では、ZigBeeネットワークのデバイスの種類とネットワークセキュリティに関する質問について詳しく説明します。 最後に、いくつかのワイヤレスデバイスから温度情報を受信するデータ収集ネットワークを構築します。
1. ETRX357モジュール
選択したハードウェアプラットフォームに精通します。 ETRX357モジュールは 、Silicon LabsのEM357チップに基づいています。 このチップはチップ上のシステムです。2.4GHzの周波数で動作するプロセッサコアCortex-M3 + RFトランシーバーです。
- ETRX357-チップアンテナが統合されたモジュール。 無線信号の最大出力電力は+8 dBmです。
- ETRX357HR-外部アンテナを接続するためのu.FLコネクタ付きのモジュール。 無線信号の最大出力電力は+8 dBmです。
- ETRX357-LRSは、チップアンテナとパワーアンプを内蔵したモジュールです。 無線信号の最大出力電力は+20 dBmです。
- ETRX357HR-LRSは、外部アンテナと内蔵パワーアンプを接続するためのu.FLコネクタを備えたモジュールです。 無線信号の最大出力電力は+20 dBmです。
直接視界条件でのETRX357およびETRX357-LRSモジュールの実験的通信範囲測定:
- ETRX357-約300メートルの距離での信頼できる受信
- ETRX357-LRS-約900メートルの距離で信頼できる受信
以下は、モジュールの主な特性に関する要約表です。
特徴 | 説明 |
---|---|
プロセッサコア | ARM Cortex-M3 |
高周波トランシーバー | 2.4 GHz |
フラッシュ/ RAMボリューム、Kb | 192/12 |
消費電力 | TX: 42 mA @ +8 dBm |
RX: 26.5 mA | |
「夢」: 400 nA | |
動作電圧範囲 | 2.1-3.6 V |
動作温度範囲 | -40 ... + 85°C |
技術的特性に関する詳細情報は、モジュールのドキュメントで入手できます[ 1 ]。
2.内蔵ファームウェア
すべてのモジュールには製造元からのファームウェアが組み込まれています。開始するには、モジュールに電力を供給し、シリアルUARTインターフェイスのTxDおよびRxDラインを接続するだけで十分です。 すべてのコマンドは、条件付きで2つのタイプに分類できます。
- ネットワーク機能を操作します。 例:
- ネットワーキング/既存のネットワークへの接続
- アドレス/グループ/ブロードキャストメッセージの送信
- リモートノードレジスタの読み取り/書き込み
- モジュール周辺機器を操作します。 例:
- I / Oポートを構成する
- RFトランシーバーの電力制御
- シリアルインターフェイスを介した情報メッセージの出力の有効化/無効化
また、標準ファームウェアには一連の機能が含まれており、場合によっては外部のマイクロコントローラーや制御装置がなくても機能します。 コマンドの完全なリストはマニュアル[ 2 ]にありますが、最も頻繁に使用されるもののみを以下にリストします。 データ収集システムを作成するには、このリストのチームが必要です。
チーム | 説明 |
---|---|
AT +パンスキャン | 利用可能なネットワークをスキャンする |
AT + EN | ネットワーキング |
AT + JN | 利用可能なネットワークに接続します |
AT + DASSL | 現在のネットワークを離れる |
AT + DASSR:<デバイスアドレス> | ネットワークを終了するコマンドをリモートデバイスに送信する |
チーム | 説明 |
---|---|
AT + UCAST:<デバイスアドレス> = <メッセージ> | アドレスメッセージを送信する |
AT + MCAST:<最大 リレーカウント>、<グループID>、<メッセージ> | ネットワーキング |
AT + BCAST:<最大 リレーの数>、<メッセージ> | 利用可能なネットワークに接続します |
AT + SCAST:<メッセージ> | データをシンクノードに送信する |
最大メッセージ長 :72バイト。
重要 :グループメッセージはブロードキャストメッセージの特殊なケースであるため、高い反復率で送信しないでください(ドキュメントでは、8秒以内に8グループ/ブロードキャストメッセージしか示していません)。 さらに、グループメッセージがスリープ状態のエンドデバイスによって受け入れられないという事実に注意を払う価値があります。
チーム | 説明 |
---|---|
ATSXX? | SXXレジスタの内容の読み取り |
ATSXX = YYYY | SXXレジスタに書き込むと、値YYYYが登録されます |
ATREMS:<デバイスアドレス>、XX? | リモートホストのSXXレジスタの内容の読み取り |
ATREMS:<デバイスアドレス>、XX = YYYY | YYYY値をリモートノードのSXXレジスタに書き込む |
ビルトインSレジスタへのビット単位のアクセスが可能です。 これを行うには、読み取り/書き込みコマンドで、XXの後に、参照する必要があるビット番号を指定する必要があります。 例:
ATS001? # 1 S00 ATS001=1 # 1 1 S00 ATS1812? # 18 S18 ATREMS:0000,0AE? # 14 S0A 0000
それでは、ZigBeeネットワークの構築プロセスのより詳細な議論に移りましょう。 メザニン無線モジュールとZigBee-USBゲートウェイがインストールされているデバッグボードを使用します。 デバッグボードにはいくつかのアナログセンサーがあり、これについては後で説明します。 それらから読み取り値を取得し、それらを中央データ収集ユニットに送信します。そこで、すべてが処理されます。 ステップごとに、データ収集システムを作成し、プロセスで発生する可能性のある主な問題を分析します。
将来のデータ収集システムについて説明します。
- ZigBee-USBゲートウェイはネットワークコーディネーターであり、PCに接続されています
- ZigBee USBゲートウェイは、データ収集の中心的なハブです
- 2つの無線モジュールが温度および光センサーからデータを収集し、10秒に1回の間隔で中央データ収集ユニットに送信します
- プログラムはPC上で実行され、デジタル化された温度値を摂氏に変換してコンソールに表示します
3. ZigBeeネットワークの作成
AT + ENコマンドについては前述しました。これにより、ネットワークを編成できます。 このコマンドがシリアルインターフェイス経由で送信されたデバイスがネットワークコーディネーターになります。 デフォルトでは、コーディネーターは最適な周波数チャネルを個別に選択し、短いネットワークアドレスと長いネットワークアドレスを生成します。
AT+EN JPAN:24,949D,56370DE37E0DC0FF # 24 - # 949D - # 56370DE37E0DC0FF -
以下は、ZigBeeネットワークの作成プロセスに値が影響するレジスタのリストです。
チャネルマスク-レジスタS00 このマスクは、使用できるチャネルを決定します。 ZigBee技術仕様では16の周波数チャネル(11から26までの番号)が定義されていることを思い出してください。 レジスタは2バイトなので、0/1を設定すると、対応するチャネルの使用を有効または無効にできます。 この設定は、ネットワーク作成時のコーディネーターと、使用可能なネットワークに参加する他のすべてのデバイスの両方で有効です。
例ATS00=0001 # 11 ATS00=FFFF #
トランシーバの出力電力はレジスタS01です。 このパラメータは、ネットワークの作成時または利用可能なネットワークへの接続時に無線モジュールに適用され、デバイスがネットワーク上にある間有効です。 ZigBeeネットワークでの作業中、このパラメーターは変更できません。 これを行う唯一の方法は、ネットワークを離れ、レジスタの値を新しい値に変更し、ネットワークを離れて再接続することです。 レジスタS01に書き込むことができるすべての可能な値は、ドキュメント[2]に示されています。
例ATS01=8 # +8 # ( ETRX357. LRS- # )
- 短い識別子と長い識別子の優先値は、レジスタS02とS03です。 これらのレジスタにはデフォルトで0が書き込まれますが、コーディネーターの場合、ネットワークを編成するときに適切な値が自動的に生成されることを意味します。 他のすべてのデバイスについては、利用可能なネットワークに接続します。 それ以外の場合、レジスタの値が0以外の場合、次の規則が適用されます。
- コーディネーターは、対応する識別子を新しいネットワークに割り当てようとします
- 他のすべてのデバイスは、指定された識別子でネットワークに接続しようとします
コーディネーターにとって重要な点が1つあります。定義済みの識別子を持つネットワークを作成しようとしたときに、同じパラメーターを持つネットワークが既に存在する場合、一致する識別子が自動的に生成されます。
- デバイスタイプ-レジスタS0Aの上位4ビット。 デバイスのタイプは、少し後で検討されます。 ここで、デバイスのタイプはネットワークに接続されたときに決定され、トランシーバーの出力電力を変更すると同様の方法で変更できると言います。
4.ネットワークセキュリティ
ZigBeeネットワークでは、特別なノードであるセキュリティセンターがセキュリティを担当します。 デフォルトのコーディネーターは、セキュリティセンターです。 また、ネットワークが分散トラストセンターモードで作成された場合、トラストセンターは任意のルーター(FFDデバイス)にできます(これについては、この章の最後で説明します)。
トラストセンターの責任:
- 他のデバイスを接続する許可
- 暗号化キーの操作(キーの定期的な更新、キーの更新に関する他のノードへの通知)
ZigBeeネットワークは2つのキーを使用します。
- リンクキー -このキーは、データ交換のためにネットワーク上の2つのデバイス間で安全な接続を確立するために使用されます。 ネットワークへの接続時にデバイスが受信するキーはトラストセンターリンクキーと呼ばれ、デバイスの操作中に取得できる他のすべてのキーはアプリケーション層リンクキーと呼ばれます。 デフォルトでは、セキュリティセンターのリンクキーは、セキュリティホールを表すクリアテキストで送信されます。これは、新しいデバイスをネットワークに接続するときにこのキーを傍受できるためです。
- ネットワークキー -このキーは、ZigBeeスタックのネットワークレベルでデータを暗号化するために使用されます。 セキュリティセンターによって生成され、定期的に更新されます。 単一のZigBeeネットワーク内のすべてのデバイスには、単一のネットワークキーがあります。 その助けにより、すべてのネットワークパケットが暗号化されます。 デフォルトでは、セキュリティセンターはリンクキーを使用して暗号化されたネットワークキーを送信します。
ネットワークを介して送信されるデータの潜在的な侵害を防ぐために、いくつかのオプションを使用できます。
- 非標準の通信チャネル/他の通信プロトコルを介してリンクキーを送信する
- すべてのデバイスで事前にインストールされたキーを使用する
- セキュリティセンター側の接続許可メカニズムを使用します(この方法ではセキュリティ侵害から保護されませんが、他のデバイスは偶然または意図的にネットワークに参加できません)
この記事では、プリインストールされたリンクキーを使用したオプションを検討します。 このアプローチの欠点は、すべてのモジュールに適切な構成を書き込む必要があることです。 しかし、小規模ネットワークでは、これは重要ではありません。 ETRX357モジュールの標準ファームウェアでは、対応する値をレジスタS09に書き込むことでリンクキーを設定できます。 さらに、 S0Aレジスタで次のビットを1に設定する必要があります。
- ビット2-1に設定すると、ノードは、デバイスを再接続するときに、リンクキーを使用して暗号化されたネットワークキーを送信します
- ビット4--//-新しいノードを接続しようとしたとき
- ビット8-1に設定すると、ノードは事前定義されたリンクキーを使用するようになります
ATS09=ABCDEFFEDCBACBAFEDDEFABCBAFEDCFF:password # Link Key # :password - ATS0A8=1 ATS0A4=1 ATS0A2=1
コーディネーターを除くすべてのノードでビット2および4を設定することはオプションの手順です。 このアプローチの利点:
- ノードが接続に使用しようとするネットワークの優先識別子(短いおよび/または長い)を記録する必要はありません。 デバイスは、リンクキーがインストールされているネットワークにのみ接続できます
- リンクキーはクリアテキストで送信されないため、攻撃者はリンクキーを取得できません。
- 他の人のデバイスはネットワークに接続できません
別の興味深い可能性を指摘します。S0Aレジスタでは、9ビットが特別な機能を有効にします-分散トラストセンターのモードでネットワークを作成します。 この動作モードでは、任意のルーター(FFDデバイス)を使用して、新しいデバイスを現在のネットワークに接続できます。 分散型セキュリティセンターモードは、すべてのワイヤレスノードの接続の遅延を回避するために、大規模なネットワークを展開するときに使用されます。 ネットワークの展開後、 AT + BECOMETCコマンドを使用して、セキュリティポリシーを規制するためのセキュリティセンターが選択されます。 この動作モードでネットワークセキュリティを確保するには、プリセットの処理/リンクキーの取得も必要です。 そうしないと、セキュリティセンターが選択されるまで、ZigBeeデバイスはネットワークにシームレスに接続できる可能性があります。
5. ZigBeeデバイスの種類
前の記事では、ZigBeeデバイスの主要なタイプが検討されました。 主な機能を思い出して、エンドデバイスの種類について説明します。
コーディネーター(COO) -ネットワークを編成したデバイス。 ネットワークトラフィックのルーティングプロセスに参加し、トラストセンターの役割を実行します(分散トラストセンターモードの場合を除く)。 スリープモードに移行しないため、このようなデバイスには固定電源が必要です
- ルーター(FFD) -接続時にFFDタイプのデバイス(フル機能のデバイス)。 コーディネーターと同様に、このようなデバイスはネットワークトラフィックのルーティングに関与しており、スリープモードに関するコーディネーターへのすべてのコメントはルーターにも有効です。
リストされたデバイスは、エンドデバイスの親ノードとして機能します。 ルーターまたはコーディネーターの子ノードの最大数は最大32です。親デバイスは、接続されているエンドデバイスのメッセージを受信および保存(*)する責任があります。 次に、エンドデバイスは親を介してネットワークと通信します。 新しいエンドデバイスがネットワークに接続されるたび、または古いエンドが再接続されるたびに、親が定義され、子デバイスの特別なテーブルにエントリが作成されます。 このテーブルには、子ノードの短いアドレスと長いアドレス、およびそのタイプが格納されます。 使用可能なエンドデバイスのタイプを考慮してください。
エンドデバイス(ZED) -ネットワークのトラフィックのルーティング、新しいデバイスの接続などに関与しないデバイス。 このタイプでは、ZigBee技術仕様はスリープモードを提供していません。 したがって、親(*)を記述するときは、ZEDデバイスのメッセージを保存しないことを意味します。 ZEDデバイスのレシーバーは常にオンであり、親ノードはアドレスメッセージを受信するとすぐにアドレスメッセージを宛先に転送すると想定されています。 したがって、これらのデバイスには固定電源も必要です。
スリーピングエンドデバイス(SED) -このタイプのデバイスのネットワーク責任は、以前のタイプに似ています。 唯一の違いは、ZigBee技術仕様で発表されているスリープモードのサポートです。 このようなデバイスは、ほとんどの時間をスリープモードで使用し、長時間バッテリーで動作します。 ここでの「長時間」の定義はアプリケーションによって異なりますが、ワイヤレスZigBeeスイッチの例を考慮すると、1組のディスクバッテリーからのこのようなデバイスの寿命は2〜3年です[3]。 そのようなデバイスは、外部イベント(センサーの読み取り値をデジタル化するためのタイマーからの割り込み、ボタンを押すなど)によって、またはデータパケットを送信する時間になると、スリープモードを終了します。 親ノードからメッセージを受信するために、スリープ中のノードはポーリングメカニズムを使用します。 彼については少し後で説明します。
- モバイルエンドデバイス(MED)はスリーピングエンドデバイス(SED)に類似していますが、それに関するレコードが親ノードの親テーブルに短時間-数秒から数分(スリープエンドデバイスの場合、記録保存時間は最大48日)。 これは、タイプ名に基づいて行われるため、このようなデバイスは、メッセージを送信するときに衝突を引き起こすことなく、部屋/オブジェクト内を移動できます。 複数の親が同じノードに関するレコードを持っている場合、衝突が発生する可能性があります。 このタイプのデバイスは、ZigBee仕様には記載されていませんが、Silicon LabsのZigBeeスタックの実装におけるSEDデバイスの機能の拡張の一種です。
ZigBeeネットワークの例
エンドデバイスは、FFDデバイスを介して常に接続されます。FFDデバイスは、接続時に通信品質の最良のインジケーターを備えていました。 その過程で、ルーターが故障しているか、サービスのために使用されたときに状況が発生することがあります。 この場合、親との再接続を何度か試みた後、エンドデバイスは新しい親ノードの検索を開始します。 この図では、モバイルノードと親の間の接続が破線で示されています。 一定期間後、MEDデバイスは別の親を介してネットワークに参加できます。
ポーリングメカニズム
このメカニズムは、いくつかの目的で使用されます。
したがって、モバイルデバイスとエンドデバイスは、親ノードに保存されているメッセージを受信できます。
- 子デバイスのテーブルから自分に関するレコードが削除されないようにします。
スリープ状態のエンドデバイスのZigBee仕様によると、アドレスメッセージは親によって7.68秒間保存されます。 さらに、SED / MEDデバイスのアドレスメッセージの繰り返し率が指定された値よりも高い場合、メッセージは上書きされます。 したがって、信頼性の高いデータ配信を確保するには、スリープ状態のエンドデバイスが十分な頻度で親ノードに問い合わせる必要があります。 この点で、スリーピングエンドデバイスには、 短い ポーリング間隔と長いポーリング間隔の2つのポーリング間隔があります。
短いポーリング間隔は、トランザクションの成功の確認を待機する場合、たとえばセンサー読み取り値のデータを含むパケットを送信する場合に使用されます。 通常、この間隔は1秒に設定されます。 確認を受信すると、デバイスはスリープモードになり、長いポーリング間隔が使用されます。
長いポーリング間隔は、通常、十分に長い時間(数分から数日)に設定されます。 これにより、スリーピングエンドデバイスは、親の子テーブルのスペースを節約できます。 親は、時間通りに連絡がとれなかった場合、テーブルからエンドデバイスを削除できます。 この場合、その瞬間に寝坊したエンドデバイスは、ネットワークに再接続する必要があります。
ポーリングメカニズムの詳細については、Silicon LabsのZigBeeスタックガイドを参照してください。 ETRX357モジュールの標準ファームウェアでは、親ノードはタイマー/カウンター0からの割り込みによってポーリングされます。
6.データ収集ネットワークの作成
基本的な理論が語られているので、実践に移りましょう。 ETRX357無線モジュールと連携するためにPythonモジュールが使用されます。 使用に関するすべての推奨事項は、添付のREADMEファイルに記載されています。
6.1 ZigBeeデバイスの構成
各ノードに対応する構成を書き込みます。 3つのデバイス(USBゲートウェイと2つのデバッグボード)はすべてコンピューターに接続され、それぞれが適切に構成されました。
- USBゲートウェイの場合、構成ファイルのコーディネーターブランチ(「COO」)が使用されました
- デバッグボード上のモジュールの場合-構成ファイルからのスリーピングエンドデバイス(「SED」)のブランチ
#!/usr/bin/env python3 # coding=utf-8 import rfconf import serial.tools.list_ports def main(): # sensor_nwk.xml configurator = rfconf.ModuleConfigReader("sensor_nwk.xml") supp_nodes = configurator.get_avail_nodes() supp_nodes = dict(enumerate(supp_nodes)) if len(supp_nodes) > 0: print("Configuration XML file support {} nodes:".format(len(supp_nodes))) print(supp_nodes) # "Telegesis" for com in serial.tools.list_ports.comports(): if com.description.split()[0] == "Telegesis": tgmodule = rfconf.ModuleInterface(com.device) usr_choice = int(input("How would you like to configure that node: ")) tgmodule.set_node_type(supp_nodes[usr_choice]) tgmodule.write_config(configurator) else: print("There is nothing to do") if __name__ == "__main__": main()
<rfconfig> <node type="COO"> <!-- Link Key --> <reg name="S09" password="password" overwrite="y" type="string"> 12341234123412341234123412341234 </reg> <!-- --> <reg name="S0A" password="password" overwrite="n" type="hex"> 0114 </reg> <!-- --> <reg name="S01" overwrite="y" type="int"> 3 </reg> <!-- Sink- --> <reg name="S10" overwrite="n" type="hex"> 10 </reg> </node> <node type="SED"> <!-- Link Key --> <reg name="S09" password="password" overwrite="y" type="string"> 12341234123412341234123412341234 </reg> <!-- --> <reg name="S0A" password="password" overwrite="n" type="hex"> 0114 </reg> <!-- --> <reg name="S01" overwrite="y" type="int"> 3 </reg> <!-- Sink- --> <reg name="S10" overwrite="n" type="hex"> 100 </reg> <!-- PB5 --> <reg name="S15" overwrite="n" type="hex"> 2000 </reg> <!-- / --> <reg name="S13" overwrite="y" type="hex"> 00FF7EFB </reg> <reg name="S16" overwrite="y" type="hex"> 00008204 </reg> <!-- S16, --> <reg name="S17" overwrite="y" type="hex"> 00008204 </reg> <!-- / --> <reg name="S18" overwrite="y" type="hex"> 00FD58E7 </reg> <!-- S18, --> <reg name="S19" overwrite="y" type="hex"> 00FD58E7 </reg> <!-- / 7 --> <reg name="S37" overwrite="y" type="int"> 40 </reg> <reg name="S38" overwrite="y" type="hex"> 8110 </reg> <!-- --> <!-- 2 --> <reg name="S28" overwrite="y" type="int"> 0003 </reg> <!-- 0 1 (PA0) --> <reg name="S23" overwrite="y" type="hex"> 0001 </reg> <!-- 2 2 (PA1) --> <reg name="S24" overwrite="y" type="hex"> 0003 </reg> </node> </rfconfig>
スリープ状態のデバイスのセットアップに関するいくつかのコメント。 無線モジュールの消費電力を最小限に抑えるには、未使用の周辺機器(LEDインジケータと光センサーの電源)をすべてオフにする必要があります。 さらに、すべての未使用ピンをプルイン入力または出力用に構成する必要があります。 いくつかの32ビットレジスタがI / Oポートの構成を担当します。
- 出力の方向を決定できるレジスタS13補助レジスタ(Hi-Z、プルアップ付き入力、プッシュプル出力、オープンコレクタ付き出力)
- レジスタS16は、特定の出力を入力(エントリ0)または出力(エントリ1)として設定します。 無線モジュールには、8ピンの3つのポートA、B、Cがあります。 設定は、個別のビットの記録、各出力の個別の変更、またはグループ全体の即時変更として記録できます。 このレジスタは不揮発性ではないため、特定の構成を常に使用する必要がある場合は、レジスタS17に書き込む必要があります。 このレジスタの値は、電源投入時またはリセット時に自動的にレジスタに転送されます。
- レジスタS18は、出力の出力で論理レベルを設定します。 , 0/1 . , 0/1 . S18 S16 . S19 , .
/ AT-[2]. , , , . , S15 13 1 ( PB5). LM61 .
6.2
, , , . . , . / 7 10 . / 7 S37. :
/ 7 S38 . 0110, /, Sink-. , , (S38F) S38 1. , – 8110. [3]. , Sink-.
Sink-
ZigBee (PANID). 0000 . , , , (UART, SPI ..) - . – , ETRX357, , . :
- :
- . ,
- :
- , .
, , ETRX357 — Sink- — . Sink-, 4 S10 . , , Sink, Sink, 8 S10 AT+SSINK Sink-. Sink- , , . , Sink-, . , Sink-, , . , , Sink- .
Sink AT+SCAST :
# Sink AT+SCAST:Hello # ( ) AT+UCAST:CAFE=Hello AT+UCAST:000D6F00024CBCCC=Hello
6.3
0, . - .
2 ( S28 ). , , 2-4, , UART. 0 , , . , UART ( . S11). 4 , . 1 2 ( PA0 PA1). :
# , 0 - 0001 # , 2 - 0003 # 2 ATS28=0003 # 0 1 ATS23=0001 # 2 2 ATS24=0003
:
, 1 , Polling-. , , . 1 . Polling- , .
6.4
, , . GitHub , examples , sensor_nwk.py . , . . . - , .
#!/usr/bin/env python3 # coding=utf-8 import rfconf import serial.threaded class TemperatureReader(rfconf.ETRXModuleReader): TEMP_POS = 2 NODEID_POS = 0 def handle_line(self, data): if not data: # return # : # SDATA: <Long ID>,<GPIO state>,<ADC0>,<ADC1>,<SeqNO>,<VCC> info, *payload = rfconf.response_split(data) if info == "SDATA": nodeid = payload[self.NODEID_POS] temp = int(payload[self.TEMP_POS], 16) # # LM61 temp = (temp / 10 - 600) / 10 print("Node: {} - Temperature: {:.2f}".format(nodeid, temp)) def leave_network(node): LEAVE_NWK_CMD = "AT+DASSL" node.write_command(LEAVE_NWK_CMD) resp = node.read_resp() # AT+DASSL "OK" # , "LeftPAN" if resp[-1] == "OK": msg = "" while not msg: msg = node.readline() print(msg) else: print(resp[-1]) def get_network_info(coordinator): NWK_INFO_POS = 1 GET_NWK_INFO_CMD = "AT+N" coordinator.write_command(GET_NWK_INFO_CMD) resp = coordinator.read_resp() if resp[-1] == "OK": nwk_info = resp[NWK_INFO_POS] *nused, ch, txpower, panid, longid = rfconf.response_split(nwk_info) print("network already created - ", end="") print("ch: {}, PANID: {}, EUI64: {}".format(ch, panid, longid)) def create_network(coordinator): NWK_INFO_POS = 1 NWK_PARAMS_POS = 1 CREATE_NWK_CMD = "AT+EN" coordinator.write_command(CREATE_NWK_CMD) resp = coordinator.read_resp() if resp[-1] == "OK": # nwk_info = resp[NWK_INFO_POS] info, ch, sid, lid = rfconf.response_split(nwk_info) print("network is created - ", end="") print("ch: {}, PANID: {}, EUI64: {}".format(ch, sid, lid)) else: # - , # get_network_info(coordinator) def main(): coo_node = rfconf.ETRXModule("<COMXX (Windows) /dev/<ttyUSBXX> (Linux)>", node_type="COO") reader = TemperatureReader(coo_node) # create_network(coo_node) ser = coo_node.get_serial_interface() reader_thread = serial.threaded.ReaderThread(ser, reader) # with reader_thread as protocol: reader_thread.join() if __name__ == "__main__": main()
7.
, . ZigBee- . , Polling- ~250 . 1 , 4000 (~160 ). , . , .
PS Energy Profiler, Simplicity Studio , EFM32GG-STK3700 Advanced Energy Monitor. Application Note Silicon Labs. , STK3700, . SWO .
- ETRX357
- ETRX357標準ファームウェアATコマンドガイド
- Silicon Labsの電池式ZigBeeスイッチの説明
- デバッグキットETRX3DVKA357の説明
記事一覧
- ワイヤレスZigBeeネットワーク。 パート1 [入門]
- ワイヤレスZigBeeネットワーク。パート2 [ETRX35X無線モジュールの使用]
便利なリンク
- ZigBeeテクノロジービデオ
- ファームウェアETRX357を操作するためのPythonモジュール