前回に引き続き、XBee-ZBメッシュネットワークを構築し、ブロードキャストアドレスにパケットを送信します。ページの最後にはうまく動かないときの対処法(チェックリスト、よくあるトラブル)を書きましたので、参考にしながら読み進めてください。
ネットワークのテスト
いよいよ実験開始です。順番にXBeeモジュールの電源を入れていきます。まずコーディネーター、続いてルーターの順番に電源を入れ、各モジュールとターミナル接続します。このチュートリアルでは、ターミナルモードを使用して3つのモジュールを1台のPC、XCTUアプリケーションに接続します。
ネットワークが正常に構築されたかは、XCTUアプリケーションでネットワークマップを表示して確認します。XCTUアプリケーション右上のネットワークボタンをクリックし、次にスキャンボタンをクリックします。多少時間がかかるかもしれませんが、図1のようなネットワークマップが表示されます。各モジュールの64ビットアドレスや通信経路が分かりやすく表示されています。
マップが表示されたら、通信できるか確認してみましょう。任意のモジュールのターミナルで、「Add Frame」ボタンをクリックし、前回のような送信要求パケットを作成します。「Hello」というメッセージを、ブロードキャストアドレス(=ネットワーク内のすべてのモジュール)に送信するパケットです。
作成したパケットを選択して、「Send selected frame」ボタンをクリックするとパケットが送信されます。他のモジュールのターミナルを見ると、いくつかのパケットが通過していく様子が観察できるでしょう。デフォルトではすべてのパケットが表示されるようになっていますが、フィルタを設定して見たいパケットのみ表示する、あるいは見たくないパケットを表示しないという設定もできます。
パケットをクリックして、データを確認してみましょう。図2にパケットを送った例を示します。
ここではパケットはコーディネーターから送信され、他のモジュールで受信されています。送信した「Hello」というデータは、アスキーコードという16進数のデータに変換されています。アスキーコードで「Hello」は「48 65 6C 6C 6F」です。
ブロードキャストアドレスでの一斉送信は、ネットワーク上のすべてのモジュールに電源制御やスリープへの移行といったコマンドを送信したり、メディアにデータを保存するコマンドを送信したりする際に便利に使えます。
次に、新しく送信要求メッセージを作成し、1つのモジュールだけにデータを送ってみます。図3のように、64ビットアドレスの欄に送信したい相手の64ビットアドレスを入力します。宛先にはルーターのアドレスを、送信データには乱数を入力してみました。
パケットを送信すると、ルーターのターミナルには表示されますが、他のモジュールには表示されません。送信したパケットが「ルーター宛て」だったため、他のモジュールはこのパケットを無視しました。図4には、送信モジュールと受信モジュールのターミナルを並べてみました。
フレームログの左側にある矢印は、右向きの青い矢印がそのモジュールが送信したパケット、左向きの赤い矢印が受信したパケットを意味しています。
これで、ネットワーク上のモジュールからモジュールへ直接パケットを送信する方法と、ブロードキャストアドレスを使ってすべてのモジュールにパケットを送信する方法を紹介しました。あとは同じようにモジュールを増やしたり、パケットを生成したりすれば、メッシュネットワークとして応用可能でしょう。
このチュートリアルではセンサの機能を持つモジュールがありませんでしたが、エンドデバイスをセンサ機能のあるモジュール、PCのキーボードを、データを送信するセンサととらえれば、センサネットワークがどのように動作するかを知ることができるでしょう。
使用したパーツのリスト
このセクションで紹介したチュートリアルを実行するために必要な電子部品を表8にリストアップします。XBeeモジュール3個、USBアダプタ3個、必要に応じてUSBケーブルを用意してください。
項目 | 製品例 | 価格 | 必要数 |
---|---|---|---|
XBee-ZBシリーズ2/2.5/3 | https://www.switch-science.com/catalog/5311/ (https://www.sparkfun.com/products/15126) | ¥2,546- | 3 |
XBee Explorer ドングル | https://www.switch-science.com/catalog/1790/ (https://www.sparkfun.com/products/11697) | ¥3,243- | 1 * |
XBee Explorer USB | https://www.switch-science.com/catalog/1791/ (https://www.sparkfun.com/products/11812) | ¥3,243- | 1 * |
miniUSBケーブル | https://www.switch-science.com/catalog/1034/ (https://www.sparkfun.com/products/11301) | ¥165- | 3 ** |
* これら3種類の組み合わせは何でも構いませんが、合計3つ必要です。
** USBアダプタ1つにつき1本必要です。XBee Explorerドングルには不要です。
イライラ解消?ちょっと変わったUSBケーブル 身の回りの電子機器や今回使用したUSBアダプタ、マイコンボードなどを見渡すと、さまざまな形状のUSBコネクタが使われています。 それは時に、「miniUSBを使いたいのにケーブルがない」といった事態を引き起こします。 そんなイライラを解消するUSBケーブルがあります。 https://www.sparkfun.com/products/12016 片方の先端はUSB Type A(PCについているUSBコネクタに刺さる形状)になっています。反対の先端にはよく使用される標準B、Mini B、Micro Bの3種類のコネクタが並列につながれており、どれでも使えるという代物。 あるいは、こんなケーブルもあります。 https://www.sparkfun.com/products/11579 片方の先端がUSB Type A、反対の先端はACアダプタのコネクタ、JSTタイプのコネクタ、ワニ口クリップが付いていて、USBから電源を取りたいときに便利に使えそうです。 |
うまく動かないときは
XBeeモジュールは多くの機能や設定値があり、設定したのにうまく動かないということがよく発生します。ここでは、よくあるトラブルと解決のヒントをいくつか紹介します。
チェックリスト
〇ケーブル類の配線:
すべてのモジュールに電源が供給されていますか?USBはきちんと接続されていますか?ケーブルを抜き差ししてみると治った、ということも割とよくあります。最近のスマホの付属品などで、「充電専用」で通信ができないUSBケーブルが多く出回っています。当然、USB「接続」には充電専用ケーブルは使えません。PCのOSによってはシリアルポートのCOM番号が何かの拍子に変わってしまうということも起こりますので、確認してみてください。
〇モジュールの向き・位置:
モジュールを変換アダプタに取り付ける際の方向や位置は間違っていませんか?
〇シリアル通信の設定:
XCTU以外のアプリケーションを使用している場合はボーレートなどを確認してください。
〇宛先アドレス:
ATモードを使用してポイント・トゥ・ポイントネットワークを構築している場合、宛先アドレスが「データを送信したい相手」のアドレスになっているか確認してください。
〇ファームウェアのバージョン:
ネットワーク内のすべてのモジュールで同じバージョンを使用するのがベストです。一部のバージョンはほかのバージョンと互換性がない場合があります。
〇ファームウェアの破損:
XBeeモジュールに書き込まれたファームウェアが破損すると、ターミナルアプリケーションで読み取れなくなったり、XCTUに反応しなくなったりします。このような場合にはファームウェアの修復を行います。詳しい方法はhttps://www.instructables.com/Restoring-your-broken-XBee/を参照してください。
〇ATモードで設定が書き込めない:
ATWRコマンドを使用しても設定値が書き換えできない(読み出しをすると変更前の数値が返ってくる)場合は、リセットコマンド「ATRE」を使用して、すべての設定値を工場出荷時の状態に戻します。
よくあるトラブル
より具体的なシチュエーション別に、解決のヒントを示しましょう。
〇ATコマンドが動作しない:
シリーズ2/2.5のモジュールで「+++」コマンドでモジュールが起動しない場合、ATファームウェアがロードされているか確認します。
〇ATモードでエラーが出る:
各モジュールで同じバージョンのファームウェアが書き込まれているか確認します。「ATVR」コマンドで確認できます。
〇設定値が書き換わらない:
設定値を変更した後、書き込み操作をしなければ設定値は消えてしまいます。
〇ATコマンドターミナルで、BackSpaceが使えない:
一度Enterキーを押してコマンドを送信し、もう一度やり直してください。設定値を入力したら確認コマンドで確認するようにしましょう。
〇APIファームウェアが動作しない:
各モジュールで同じバージョンのファームウェアが書き込まれているか確認します。また、各モジュールに電源を入れる順番が重要です。まずコーディネーター、ルーター、エンドデバイスの順に電源を入れます。ネットワークの構築には10分程度時間がかかる場合もあります。
Robert Faludi氏のwebページ(https://www.faludi.com/projects/common-xbee-mistakes/)には、XBeeモジュールのよくある間違いについてまとめられています。特にXBeeに不慣れな時に犯しがちなミスや設定方法、解決方法について数多くまとめられています。
また、Digiインターナショナル社のwebサイトやナレッジベース(https://www.digi.com/support/knowledge-base)にもたくさんの情報があります。過去に同じように悩まされた人がいることや、ナレッジベースやフォーラムを検索したら答えが載っていた、なんてこともよくあることです。
コメントを残す