XBee3 ZigBee MicroPython 基本サンプル・スクリプトで無線通信実験

MicroPythonの実行が可能なXBee3 ZigBeeモジュールでワイヤレス通信の実験を行ってみました。
XBee 3 ZigBee子機(下図・右側)の内蔵温度センサで測定した温度値をZigBee送信し、Raspberry Piに接続したXBee親機(下図・左側)で受信します。
親機(左側):Raspberry PiへXBeeを接続して製作する。子機で測定した温度情報を受信する。
子機(右側):XBee3内蔵マイコン上で動作するMicroPythonスクリプトで温度を測定し、親機へ送信する。

子機・XBee3 ZigBee の構成・MicroPythonスクリプトの書き込み方法

子機にはXBee3 ZigBeeモジュールを使用します。
MicroPythonのスクリプトを書き込むには、XBee USBエクスプローラとPCなどが必要です。スクリプト書き込み後は、電源を供給するだけで動かすことが出来ます(工作が得意な人であれば、XBee USBエクスプローラは1台だけでよい)。
使用可能なXBeeモジュール:XBee3 シリーズ
必要な機器:XBee USBエクスプローラ (スクリプト書き込み時に必要)、PC(DiGi X-CTUに必要)
必要なソフト:DiGi X-CTU(スクリプト書き込み時に必要)
サンプルスクリプトは、下記に公開しました。
XBee3 ZB用MicroPythonサンプル集
温度送信用サンプル bas04_tx_temp.py
以下に、設定方法、書き込み方法を示します。
Digi MicroPython 設定方法
1. DIGI XCTU (最新版)の「Radio Modules」のアイコン[+](Add a radio Module)で使用するシリアルCOMポートを選択する。 
2. シリアル接続したXBeeモジュールが画面左側のフレームに表示されるので、それを選択する。 
3. 右フレーム「Radio Configuration」にXBee 設定画面が表示されるので、スクロールして、「AP APIEnabe」で[MicroPython REPL [4]]を選択する。 
  [Radio Configuration]
  ▼ UART Interface
   AP APIEnabe
    MicroPython REPL [4]
4. 右フレームの上部の鉛筆アイコン(Write)をクリックする。 
5. XCTUの「Tool」メニューから[MicroPython Terminal]を選択し、接続アイコン(Open)をクリックする。
(Tera Termを使用する場合は、通信設定=9600-8-N-1・フロー制御なし、改行コード=CR、ローカルエコー=無しなどを設定する。) 
サンプル・スクリプトの書き込み方法
1.サンプルスクリプトをメモ帳や秀丸エディタで開き、[Ctrl]+[A]の操作で全選択し、[Ctrl]+[C]でクリップボードにコピーします。
2.XCTU の MicroPython Terminal または TeraTermなどで、[Ctrl]+[F]を操作し、プログラムをXBee3 ZigBeeモジュールへ書き込むモードに設定します。
3.右クリック操作でペーストを行い、クリップボードに保持したサンプルスクリプトを転送します。
4.[Ctrl]+[D]を操作し、コンパイルを実行します。
5.「Automatically run」に対して[Y]を入力すると、起動時やリセット操作時に、自動起動させることが出来ます。
6.[Ctrl]+[R]でフラッシュメモリ内のプログラムを実行します。Automatically runを設定していた場合は、リセット操作[Ctrl]+[D]で実行することも出来ます。

親機 XBee ZigBee Coordinator の構成

親機は、Raspberry PiへXBee USBエクスプローラ経由でXBeeモジュールを接続して製作します。
XBeeモジュールには、最新のXBee3 ZigBeeシリーズ、従来のXBee ZB S2Cシリーズ、S2シリーズが利用できます。
使用可能なXBeeモジュール:XBee3 シリーズ、XBee ZB S2Cシリーズ、S2シリーズ
必要な機器:Raspberry Piとその周辺機器、XBee USBエクスプローラ
必要なソフト:後述(ダウンロード)
構成: [Raspberry Pi]—-[XBee USB エクスプローラ]—-[親機XBee]-  –  –  -[子機XBee3]
XBee3とS2Cシリーズの場合は、後述のZigBeeモード設定ツール「xbee_zb_mode」を使って、Coordinator APIモードに設定します。S2シリーズの場合は、X-CTUを使ってCoordinator API用のファームウェアを書き込みます。
また、筆者が作成したXBee テスト用ツール「xbee_test」を使って、子機が送信した温度情報を受信する実験を行います。
Raspberry Pi用のプログラムを下記のコマンドでダウンロードし、コンパイルしてください。
Raspberry Pi用プログラムのダウンロード
pi@raspberrypi:~ $ git clone -b raspi https://github.com/bokunimowakaru/xbeeCoord.git
pi@raspberrypi:~ $ cd xbeeCoord/tools/
pi@raspberrypi:~/xbeeCoord/tools $ make
ZigBeeモード設定ツール「xbee_zb_mode」を起動し、XBee Coordinator APIモードに設定して下さい。下記の実行例の引数「B0」は、XBee USBエクスプローラのUSBシリアルポートです。ポートが「/dev/ttyUSB0」の場合は「B0」、「ttyUSB1」の場合は「B1」といった具合に指定してください。(ttyUSBポートが不明な場合は、マウスやキーボード以外のUSB機器を外し、Raspberry Piを再起動してから、「~/xbeeCoord/tools/xbee_zb_mode」を入力してください。)
実行後、「10」と「Enter」を入力すれば、設定できます。設定時にエラーが出た場合は、やり直してください。
ZigBeeモード設定ツールxbee_zb_mode
pi@raspberrypi:~/xbeeCoord/tools $ ./xbee_zb_mode B0
CONNECTED 0(0x00):176(0xB0)
ZIGBEE Device Type Switcher for XBee ZB S2C / XBee3 Series
00:Coordinator AT,  01:Router AT,  02:End Devic
e AT
10:Coordinator API, 11:Router API, 12:End Device API
Mode =10
設定が完了したら、XBee テスト用ツール「xbee_test」を起動してください。末尾の「B0」は「ttyUSB0」の場合です。
XBee テスト用ツールxbee_testを起動する
pi@raspberrypi:~ $ cd ~/xbeeCoord/tools
pi@raspberrypi:~/xbeeCoord/tools $ ./xbee_test B0
ここで重要な作業「ペアリング」を行います。
xbee_testは、XBeeモジュールを常時ペアリングが可能なモードに設定します。このため、通常は自動的にペアリングが行われ、xbee_testに「recieved IDNT」が表示されます。しかし、周囲に他のZigBeeが動作していた場合、他のネットワークに参加してしまうことがあります。この場合、子機のコミッショニングボタンを4回、押して、初期化して再実行する、または親機と同じPAN IDを子機に設定するなどが必要になることがあります。
ペアリング後に、子機XBee3から温度情報が送られてくると、「recieved UART」に続き、温度値と電源電圧値が表示されます。下記の例では、温度19.0℃、電源電圧3.302Vが得られました。
--------------------
recieved UART
--------------------
from   :0013A200 xxxxxxxx
status :02 broadcast packet
length :10 (0x0A)
data   : 19.0, 3.302
AT>

XBee3 MicroPythonで受信する

受信用のMicroPythonサンプル・スクリプトも準備しました。
(受信の確認には、子機XBee3をX-CTUのMicroPython Terminalに接続しておく必要があります。)
データ受信用サンプル bas05_rx.py
デバイス検索用サンプル bas06_rx_disc.py
親機となるRaspberry Piから送信を行うにはXBee テスト用ツール「xbee_test」から「tx=HELLO」のように「tx=」に続いて文字列を入力してください。
by
ボクにもわかるRaspberry Pi
https://bokunimo.net/raspi/
ボクにもわかるXbee
https://bokunimo.net/xbee/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です