はじめに
OpenBlocks AファミリのA6は、設置場所を問わない、小型で堅牢な設計になっています。省メンテナンス性と高い運用継続性を備えているため、センサーデバイスや計測器の観測・制御・中継、ネットワークインフラ系サービスの導入・運用、データロギング、M2M、HEMS/BEMSなどの用途に最適です。
こういった用途では、A6に集めた各計測機器からのデータを外部と通信する際に、ZigBee[1] を用いる事例が多くなってきました。今回はそのZigBeeネットワークの構築方法を紹介します。
使用機器
今回の環境構築には、OpenBlocks AファミリのA6を使います。OSはDebian GNU/Linux 6.0(squeeze) 、ファームウェアのバージョンはkernel-image-2.6.31-5です。ストレージは内蔵せず、RAMディスクモードで運用します。
ZigBeeモジュールはDigi社 のXBee ZB(XB24-Z7CIT-004 revJ)です。これをストロベリー・リナックス のXBeeエクスプローラUSB(XBEE-BB)に差し込み、USBケーブルでA6に接続します。
写真1 の左がXBeeをXBeeエクスプローラUSBに差し込んだ状態、中央がXBeeのピン側、右がXBeeエクスプローラUSBです。XBeeのピン側の型番に続いて印刷された(0013A200で始まる)16桁のシリアル番号は、設定に必要なので記録しておいてください。
写真1 XBee ZBとXBeeエクスプローラUSB
以上の機器を2組使います。
本稿のゴールは、図1 のネットワーク構成図のように接続し、シリアルデバイスとして互いに近距離無線通信ができるのを確認することです。A6はネットワークとシリアルコンソールから操作できます。前者が不要ならLANから外します。設定や動作確認などに使うWindows PCが2台(ノートPCが少なくとも1台)必要になるので、こちらも用意してください。
図1 ネットワーク構成図
ファームウェアの書き込みと動作確認
ZigBeeネットワークのデバイスタイプには、コーディネータ、ルータ、エンドデバイスがあります[2] 。ネットワークにはコーディネータが1つだけ存在します。XBeeの工場出荷時のファームウェアはルータ用なので、Digi社のWindows用ソフトウェアX-CTUで、コーディネータ用のファームウェアを書き込む必要があります。
X-CTUのインストール
Digi社のページ からX-CTUのインストーラをダウンロードして、PCにインストールします。インストールの途中の質問「Would you like to check Digi's website for firmware updates?(Recommended) 」には「はい(Y) 」と答えてください。
ファームウェアの書き込み
XBeeをPCに接続してから、X-CTUを起動します。[ PC Settings]タブをクリックして、[ Com Port Setup]の[Select Com Port]でXBeeのポートを選び、[ Test/Query]ボタンを押します。
成功すると、図2 のようにダイアログボックスが開きます。失敗した場合には、ポートやボーレートなどの値を確認してください。
図2 接続テスト
テストが成功したら、[ Modem Configuration]タブをクリックして[Modem Parameter and Firmware]の[Read]ボタンを押すと、「 ZIGBEE ROUTER AT」の設定が表示されます。
[Function Set]欄で「ZIGBEE COORDINATOR AT」を選び、[ Parameter View]の[Show Defaults]ボタンを押します。[ Write]ボタンを押すとファームウェアの書き込みが始まります(図3 ) 。
図3 ファームウェアの書き込み
ターミナルでの通信テスト
コーディネータの準備ができたので、通信テストをしてみましょう。もう1台のXBeeをノートPCに接続してから、それ用にX-CTUを起動し、[ Read]ボタンを押します。
両方のX-CTUの[Terminal]タブをクリックして文字を入力します。図4 は、左側のTerminalに入力した文字列が、右側に表示されている画面です。コーディネータとルータをPCに接続しただけで、通信できるようになりました。
図4 ターミナルでの通信テスト(左:送信側画面、右:受信側画面)
レンジテスト
XBeeの実際の通信距離は、レンジテストで確認できます。[ Modem Configuration]タブをクリックし、[ Addressing]の「DH - Destination Address High」欄に相手のシリアル番号(写真1中央パーツに印字)の上位8桁の値を、「 DL - Destination Address Low」欄に下位8桁の値を入力します。
[ZigBee Addressing]の「CI - ZigBee Cluster ID」を「12」に変更します。CIを12に変更しないとレンジテストができないので注意してください[3] 。[ Write]ボタンを押して、設定を保存します。もう一方のXBeeも同様に設定してください。
[Range Test]タブをクリックして、[ Start]ボタンを押します。Goodの値が増えてゆけば通信できています(図5 ) 。
図5 レンジテスト
次にノートPCを持って、XBee間の距離を変えながら移動します。XBeeエクスプローラUSB(写真1右)のLEDで通信状態がわかります。両方のRSが点灯し、レンジテストを実行している側のTXとRXが点滅します。通信できなくなるとRSが消灯します。もちろん、ノートPCでレンジテストを実行して移動してもよいです。
レンジテストが終了したら、CIをデフォルト値「11」に変更します(あとで説明するATコマンドでは、ATCIで変更できます) 。さもないと、レンジテスト以外の通信ができません。
A6によるZigBeeネットワーク
いよいよ、A6でのXBeeの操作に移ります。Tera Termなどでシリアルコンソールの準備をして、2台のA6の電源を入れます。XBeeを接続して、dmesgを実行した結果を図6 に示します。下から3行目を読むと、デバイスファイルが/dev/ttyUSB0だとわかります。
図6 dmesgの表示結果
usb 1-1: new full speed USB device using ehci_marvell and address 2
usb 1-1: configuration #1 chosen from 1 choice
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
usb 1-1: Detected FT232RL
usb 1-1: Number of endpoints 2
usb 1-1: Endpoint 1 MaxPacketSize 64
usb 1-1: Endpoint 2 MaxPacketSize 64
usb 1-1: Setting MaxPacketSize 64
usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver
送受信の確認
図7 の上側が、catコマンドでA6のCPUコアの温度情報を送信した画面です。下側には受信結果が表示されています。このとき、送信側のXBeeエクスプローラUSBにあるLEDのTXと、受信側のRXが点滅します。
図7 送受信(上:送信側画面、下:受信側画面)
コーディネータとルータをA6に接続しただけで、通信できるようになりました。
minicomパッケージのインストール
A6でXBeeを設定・運用するために、minicomパッケージをインストールします。インターネットに接続できるようネットワークの設定をしてください。利用可能なパッケージのリストを更新してから、minicomパッケージをインストールします(図8 ) 。minicomパッケージのバージョンは2.4-3です。
図8 minicomパッケージのインストール
# aptitude update
# aptitude install minicom
minicomの設定
minicomコマンドを実行し、ctrl-[A][Z]キーを入力すると、Minicom Command Summary画面が表示されます。この画面で[O]キーを押してconfigurationメニューを表示します(図9 ) 。
図9 minicomのconfigurationメニュー
表1 は、設定の変更個所とその値です。Add linefeedは表示される文字列が改行されるように、Local echoは入力した文字が表示されるようにYesに変更します。
表1 minicomの設定変更個所とその値
Serial port setup
Serial Device /dev/ttyUSB0
Bps/Par/Bits 9600 8N1
Hardware Flow Control No
Modem and dialing
Init string 空白
Reset string 空白
Screen and keyboard
Add linefeed Yes
Local echo Yes
設定を変更したら、Save setup as dflを選んで保存します。保存先は/root/.minirc.dflです。configurationメニューを抜けて、ctrl-[A][Z][X]キーを入力し、minicomを終了します。
A6はRAMディスクモードで動いていますので、ルートファイルシステムの変更をフラッシュROMに保存します(図10 ) 。さもないと、次回起動時に変更が失われますので注意してください。
もう1台のA6も同様に設定します。
図10 フラッシュROMへの保存
# /usr/sbin/flashcfg -S
minicomでの通信テスト
2台のA6それぞれでminicomを起動し、一方の画面に文字を入力してみましょう。図11 は、上側のminicomに入力した文字列が、下側に表示されている画面です。PCで行ったときと同じことがA6でもできることが確認できました。
図11 minicomでの通信テスト(上:送信側画面、下:受信側画面)
ATコマンドによる設定
A6からXBeeを操作する例として、ボーレートを変更してみます。まず、ATコマンドモードに入るために[+]キーを3回続けて1秒以内に押してください。成功するとOKが表示されます(図12 ) 。ATコマンドについては、Product Manual[4] をご覧ください。
現在のボーレートは図12にあるように、atbd[enter]を入力すると表示されます。「 3」は9600を意味します。これを115200に変更するために、atbd 7[enter]を入力します。設定を保存するには、atwr[enter]を入力します。
図12 XBee ZBのボーレートの変更
ATコマンドモードを抜けるには、atcn[enter]を入力するか、10秒間待ちます。minicomのボーレートも115200に変更します。設定方法は、前述の「minicomの設定」をお読みください。もう1台のA6も同様に操作し、XBeeとminicomのボーレートを115200に変更します。
ファイル転送
通信の例として、ファイルを転送してみます。受信側のminicomで、ctrl-[A][Z][R]キーを押し、Downloadメニューでzmodemを選ぶと受信待ちになります。
送信側で、ctrl-[A][Z][S]キーを押し、Uploadメニューでzmodemを選びます。「 Select one or more files for upload」メニューで送信するファイル名に矢印キーで移動し、[space]を押し、[O]キーを押すと送信が始まります(図13 ) 。
図13 ファイル転送(上:送信側画面、下:受信側画面)
さいごに
今回は、XBeeを使ってZigBeeネットワークを構築する方法を説明しました。例ではA6どうしをZigBeeネットワークで接続する単純なものでしたが、ZigBeeに対応したデバイスには温度・湿度などのセンサー、デバイス制御を行う機器など、さまざまなタイプがありますので、ぜひ読者のみなさまのアイデアを実現するための素材として活用してみてください。
Aファミリの使用例については、引き続きWebサイト の事例/活用例や技術情報の中で紹介していきますのでご期待ください。