XBee と BeagleBone Black でワイヤレス温度センシング (ソフト編)

電子工作
スポンサーリンク

ワイヤレスで温度を計測する方法のソフト編です.

XBee の設定およびホスト側のソフトについて説明します.

流れとしては,次のようになります.

  1. XBee をパソコンに接続して設定 (ホスト側,センサ側).
  2. ホストのシリアル通信の準備.
  3. ホストで受信スクリプトを実行.

では,早速内容に入ります.

スポンサーリンク

XBee の設定

まず,XBee の設定をする準備までを説明します.

  1. 販売元の Digi の WEB ページから Next Generation XCTU をダウンロードしインストール.
  2. XBee USB インターフェースボードキットに XBee モジュールを載せたあと,パソコンに接続.
  3. XCTU を起動.
  4. インターフェースボードに対応する USB Serial Port を選択.
    XBee USB 接続


  5. 左上の「+」ボタンをクリック.
    XBee-デバイス探索


  6. XBee モジュールがパソコンに認識されると左側にデバイスが表示されます.そしてそれをクリック下あと,右上の歯車ボタンを押すと,右側にデバイスの情報およびデバイスを設定するためのボタンが現れます.
    XBee デバイス認識


以降は,ホスト側とセンサ用で異なりますので,それぞれについて説明します.この設定を行うことで,センサ側の XBee は定期的に A/D 変換の結果や I/O の状態をホスト側の XBee に送信するようになります.

ホスト側 XBee の設定

まずファームを書き換えたあと,設定を行います.

  1. 右側の IC が記載されたボタンをクリック.
    XBee ファームの書き換え


  2. ファームの選択画面が現れますので,「XB24-ZB」→「ZigBee Router API」→「*** (Newest)」の順にクリック.

    XBee ファームの選択
    (※図は文面と合っていません…)


続いて設定です.

  1. 次の3項目を指定します.
    ID PAN ID
    ネットワークを識別する ID の設定.なんでもかまいませんが,ネットワークで接続する XBee 全てで共通にする必要があります.
    NI Node Identifier
    デバイスを識別するための文字列の設定.指定しておくと,デバイスを識別しやすいです.
    AP API Enable
    通信のモードの設定.2 を指定して通信時のエスケープをが有効化しておきます.これにより,ホスト側のソフトが作りやすくなります.

    また,「SH Serial Number High」と「SL Serial Number Low」をメモしておきます.あとで,センサー側の XBee の設定をするときに使います.

    XBee Router の設定 (1)



  2. 設定が完了したら,上の鉛筆ボタンを押して,設定内容を XBee に書き込みます.

以上でホスト側の XBee の設定は完了です.

センサ側 XBee の設定

ホスト側と同じく,ファームを書き換えたあと,設定を行います.

ファームの書き換え手順はホスト側に記載したのと同じです.ファームは,「XB24-ZB」→「ZigBee End Device API」→「*** (Newest)」を選択します.End Device を選択することにより消費電力を大幅に節約できる Sleep 機能が使えるようになります.

続いて設定です.

  1. 次の10項目を指定します.
    ID PAN ID
    ネットワークを識別する ID の設定.ホスト側の XBee と同じものを指定します.
    DH Destination Address High
    送信先のアドレスの設定.ホスト側の XBee の「SH Serial Number High」の内容を指定します.
    DL Destination Address Low
    送信先のアドレスの設定.ホスト側の XBee の「SL Serial Number Low」の内容を指定します.
    NI Node Identifier
    デバイスを識別するための文字列の設定.指定しておくと,デバイスを識別しやすいです.
    PL Power Level
    送信電力の大きさの設定.とりあえず Medium を指定しておきます.室内であれば問題無く通信できると思います.電池の持ちに影響しますので,慣れてきたら通信が成立する範囲でなるべく小さくするのがお勧めです.
    ST Time before Sleep
    スリープモードに入るまでの待ち時間の設定.0x3E8 (= 1000ms = 1秒) を指定します.これによって,センサの A/D 値を送信した後,1秒後にスリープモードに入るようになります.
    SP Cyclic Sleep Period
    スリープモードに入った後,起きるまでの時間の設定.0x7D0 (10ms * 2000 = 20秒) を指定します.これによって,20秒毎にセンサの A/D 値を送信するようになります.
    D3 AD3/DIO3 Configuration
    DIO3 端子の設定.ADC を指定します.
    D5 DIO5/Assoc Configuration
    DIO5 端子の設定.Digital Input を指定します.(低電圧検出機能を使わない場合不要です)
    IR IO Sampling Rate
    端子のサンプリング周期の設定.0x3E8 (= 1000ms = 1秒) を指定します.これによって,1度サンプリングをしたらスリープに入るようになります.

    XBee End Device の設定 (1)


    XBee End Device の設定 (2)


  2. 設定が完了したら,上の鉛筆ボタンを押して,設定内容を XBee に書き込みます.

以上でセンサ側の XBee の設定は完了です.

ホスト側のシリアル通信の準備

デフォルトでは,BeagleBone Black の UART 機能は OFF になっているので,以下の作業で有効化してやります.

  1. ttyO4_armhf.com-00A0.dtbo [キャッシュ] を /lib/firmware に保存.
  2. /etc/rc.local に以下の行を追加.
  3. 再起動.
  4. /dev/ttyO4 が存在していれば準備完了.
  5. ホスト側のソフトの実行

    以下の内容を「xbee_lm60biz.rb」という名前で BeagleBone Black に保存します.

    保存したスクリプトを実行してしばらく待つと,下記のように送信元の XBee アドレスと計測した温度が表示されます.

    この例の場合,センサノードが 2つあるため,それらから交互にデータを受信できていることがわかります.

    あとは,適宜スクリプトを改造してやれば色々なことができると思います.例えば,値を RRDtool に突っ込んでやれば下記のようなグラフが簡単に作れます.(私の場合,SNMP + Cacti の組み合わせで作っています)

    温度グラフ

    応用編

    電波が届きにくい場合,中継用の XBee モジュールを配置することで,センサ側の送信電力を抑えたまま通信距離を伸ばすことができます.この場合,中継用の XBee モジュールは,ホスト側の XBee モジュールと同じ設定を書き込んでやって,電源 ON してやれば必要に応じて勝手に使われるようになります.(A/C アダプタ等から電源を取るような回路にし,送信電力を大きめにしてやると良いです)

    例えば,下の図は XCTU で表示したネットワークトポロジですが,ホストとセンサが直接通信を行わず中継用のノードを介して行っていることが分かります.中継用のノードを追加した後,ホストやセンサの設定を一切変えなくても,自然にこのようなトポロジに変化します.

    XBee ネットワーク

    センサノードや中継用のノードを手軽にどんどん増やしてネットワークを拡張できるのは XBee の強みの一つですね.

    参考文献

    XBee®/XBee-PRO® ZB RF Modules [キャッシュ]
    XBee モジュールのマニュアルです.各種設定や,API モードの通信フレームフォーマットを理解するのに参照しました.

コメント

  1. […] これでハードは完成です.ソフト編に続く. […]