• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / XBee / XBee無線ネットワーク:XBeeワイヤレスチャットルームを作る

XBee無線ネットワーク:XBeeワイヤレスチャットルームを作る

2020年12月30日 by STEMSHIP コメントを書く

2つのXBeeモジュールのそれぞれに、コーディネーターとルーターの役割を割り当て、単純なポイント・トゥ・ポイントのネットワークを構成します。XBeeモジュールは両方ともATモードで設定します。透過モードを用いてテキストでメッセージをやり取りする、いわゆる「チャット」システムを作ります。

このチュートリアルでは、XBeeモジュール2つ、USBアダプタ2つと、PCを使用します。XBeeモジュールを2つともPCと接続して使いますが、PC1台に2つ接続しても、2台用意してそれぞれに接続をしても実験を進められます。

ここでは、シリーズ2(S2C)のモジュールとシリーズ3のモジュールを各1つ使用して、シリーズごとの作業方法について解説します。どちらか一方のシリーズで統一する場合は、他方の解説のパートは読み飛ばして構いません。両者で異なるのはファームウェアの書き込み方法で、モジュールの設定方法は両者同じです。

XBeeモジュールのファームウェアのロード

最初に、XCTUアプリケーションを使用して各モジュールのファームウェアを書き込みます。2シリーズ、3シリーズのそれぞれの書き込み手順を確認しましょう。

シリーズ2(S2/S2B)まで

S2Bまでのモジュールは、XBeeモジュールの3つの役割に合わせて、別々のファームウェアがあります。書き込むファームウェアによって、ネットワーク上での役割が決まる、ということです。

最初の2桁が役割、最後の2桁がバージョンを表しています。最初の2桁は役割に応じて、次のように割り当てられています。

  • 20XX:コーディネーター、ATモード
  • 21XX:コーディネーター、APIモード
  • 22XX:ルーター、ATモード
  • 23XX:ルーター、APIモード
  • 28XX:エンドデバイス、ATモード
  • 29XX:エンドデバイス、APIモード

シリーズ2(S2C)

一方、S2Cのファームウェアは、ネットワーク上での役割によってではなく、通信プロトコルによって分かれています。同じファームウェアを使用していても、設定によってネットワーク上での役割を変えることができる、ということです。

  • 802.15.4 TH:Point to point(1対1), Point to Multi Pointに使用します
  • DigiMesh 2.4 TH:DigiMeshプロトコルを使用します。
  • ZIGBEE TH Reg :ZigBeeプロトコルを使用する場合に使用します。

コーディネーターにする場合は、CE (Coordinator Enable)をEnableにします。
ルーターにする場合は、CE (Coordinator Enable)をDisabledにします。

シリーズ3以降

シリーズ3のファームウェアは、S2Cと同様に、通信プロトコルによって分かれており、以下の3種類あります。

  • Digi XBee3 802.15.4 TH:シリーズ2/2.5の802.15.4プロトコルを使用するモジュールとシリーズ3のモジュールを併用する場合に使用します。
  • Digi XBee3 DigiMesh2.4:シリーズ2/2.5のDigiMeshプロトコルを使用するモジュールとシリーズ3のモジュールを併用する場合に使用します。
  • Digi XBee3 ZigBee3.0 TH:ZigBeeプロトコルを使用する場合に使用します。

ここでは、ZigBeeプロトコルを使用するので、ZigBee対応のファームウェアを書き込みます。最新バージョンは100B(記事作成時)です。必ずしも最新バージョンにアップデートする必要はありませんが、新しいバージョンのファームウェアでは不具合が修正されていたり、新機能が追加されていたりすることがあります。特に理由がなければアップデートしておくと良いでしょう。

次に、モジュールの役割を決めます。これは、2つの設定値の組み合わせによって決定します。同じ内容を、表1に示します。

まず、「デバイスの役割(CE)」を設定し、ネットワークを形成する(設定値1)か、ネットワークに参加する(設定値0)かのいずれかとします。ネットワークを形成するのはコーディネーター、参加するのはルーターかエンドデバイスです。コーディネーターはこれで設定完了です。

ルーター、エンドデバイスの場合は、次に「スリープモード(SM)」を設定します。ルーターとして使用したいときは無効(設定値0)に、エンドデバイスとして使用したい場合は有効(設定値1)に設定します。

表1 シリーズ3の役割ごとの設定値

役割デバイスの役割(CE)スリープモード(SM)
コーディネーター10
ルーター00
エンドデバイス00以外

これらの設定をATモードで行うには、ATコマンド「ATCE」と「ATSM」コマンドを使用します。または、XCTU上でも設定できます。

シリーズ3モジュールはここでもう一つ、ATモードとAPIモードの設定を行います。

これは設定値「API Enable(AE)」によって設定します。ATモードの時は0に、APIモードの時は1に設定します。これも同様に、「ATAP」コマンドか、XCTU上で設定を行います。

先述の通り、各設定は変更した後に書き込み操作を行うまでモジュールには書き込まれません。書き込みボタンのクリックし忘れに注意してください。

コーディネーターのファームウェアの書き込み

XCTUアプリケーションを使用して、1つめのXBeeモジュールをATモードのコーディネーターとしてセットアップします。ここではシリーズ3のモジュールを使用します。

モジュールをPCに接続し、XCTUアプリケーション左上の「Add」もしくは「Discover」ボタンをクリックします。ダイアログに従ってモジュールをXCTUに追加し、設定を読み込みます。

次に、「Update」アイコンをクリックし、図1のようにダイアログでZigBeeファームウェアを選択します。選択したら、ダイアログの「Update」ボタンをクリックします。

図1 ZigBeeプロトコル用ファームウェアの書き込み(シリーズ3)

書き込みが完了したら、先に示した表1にしたがって、デバイスの役割(CE)とスリープモード(SM)を設定します。AT/APIモードの設定は0とします。

ATコマンドとターミナルを使った設定変更の方法も示しておきます。XCTUアプリケーションのウインドウ右上のターミナルアイコンをクリックしてターミナル画面を開きます。

「Open」ボタンをクリックしてセッションを開始し、次のようにコマンドを送ります。

+++
ATCE 1
ATSM 0
ATAP 0
ATWR
ATCN

ルーターのファームウェアの書き込み

続いて、2つめのXBeeモジュールをATモードのルーターとしてセットアップします。こちらはシリーズ2(S2C)のモジュールを使用します。

シリーズ3の場合と同様に、モジュールをPCに接続し、XCTUアプリケーション左上の「Add」もしくは「Discover」ボタンをクリックします。ダイアログに従ってモジュールをXCTUに追加し、設定を読み込みます。

次に、「Update」アイコンをクリックし、図2のようにダイアログでZIGBEE TH Regファームウェアを選択します。選択したら、ダイアログの「Update」ボタンをクリックします。

図2 ZigBeeプロトコル・ルーター用ファームウェアの書き込み(S2C)

ファームウェアの書き込みができたら、各モジュールにお互いを通信相手として設定します。

アドレスの取得

XBeeモジュールは、データを送信するために宛先のモジュールの64ビットアドレス(MACアドレス)を使用することは先に述べた通りです。通信を開始するために、両者のアドレスを記録します。

XBeeモジュールをPCに接続している場合、XCTUアプリケーションから簡単にアドレスを確認できます。シリーズ2とシリーズ3のモジュールを接続した場合、図3のようにアドレスが表示されます。

ここでは、表示されているアドレスを、相手のモジュールの通信相手のアドレスとして設定します。

図3 XCTUで64ビットアドレスを確認する

あるいは、ターミナルからATコマンド「ATSH」と「ATSL」を使用してモジュールのアドレスを確認するという方法でも構いません。

アドレスが記録できたら、コーディネーターからパラメータを設定していきましょう。

コーディネーターの設定

コーディネーター側のモジュールには、「宛先アドレスにルーターの64ビットアドレス」、「ネットワークのPANアドレス」と「ノードID」の3つを設定します。

宛先アドレスには先ほど調べたルーターのアドレスを設定します。

PANアドレスはネットワークを識別するためのアドレスです。同じネットワークに接続するモジュールにはすべて同じアドレスを設定しておきます。値は16進数で0000H~FFFFHの範囲で設定します。

ノードIDはモジュールの名前です。自由に名前を付けられますが、「COORDINATOR」としておくとここでは分かりやすいでしょう。

図4に設定の例を示します。

図4 コーディネーター側モジュールの設定例

なお、ここではXCTUアプリケーションを使用していますが、ターミナルを使って設定しても構いません。その場合、「ATDH」「ATDL」「ATID」コマンドを使用することになります。

ルーターの設定

コーディネーター側のモジュール同様に、宛先アドレス、PANアドレスとノードIDの3つを設定します。

宛先アドレスには先ほど調べたコーディネーターのアドレスを設定します。

PANアドレスはコーディネーター側モジュールと同じ値を指定します。

ノードIDは「ROUTER」としておくと分かりやすいでしょう。

図5に設定の例を示します。

図5 ルーター側モジュールの設定例

チャットを始める

以上で準備が整いました。

設定変更にターミナルを使用していた場合は、「ATCN」コマンドを送って10秒ほど待ち、透過モードに切り替えます。

モジュールに宛先アドレスを設定すると、モジュールはお互いに「チャット」のように通信を開始します。

内容を見るには、いずれかのモジュールをクリックして「ターミナル接続」を開きます。もう一方のモジュールをクリックして、そちらの「ターミナル接続」も開きます。

続いて、各ターミナルの「Open」ボタンをクリックします。一見何も通信が行われていないように見えますが、モジュールはお互いに相手からのデータを受信待ちしています。

コンソール左側のカラムに、キーボードから何か入力してみてください。

うまく設定できていれば、片方に入力したテキストがもう一方の画面に表示されます。お互いに送受信ができるか確認してみましょう。

図6に、結果の一例を示します。

このターミナル機能は、そのモジュールが「受信したデータ」を赤色、「送信したデータ」を青色で表示してくれるので、非常にわかりやすくなっています。

図6 チャットに成功

ここで、片方のモジュールをPCから取り外し、別のPC(XBeeモジュールに電源を供給できればなんでも可)に接続して同じ事を試してみましょう。コーディネーターとルーターのどちらを取り外しても構いません。

同じように動作したでしょうか。最初にPCから行った設定はXBeeモジュールの不揮発メモリ(電源を切っても内容が消えないメモリ)に記録されているので、一度設定してしまえばそれ以降毎回設定を書き込む必要がありません。

ポイント・トゥ・ポイント通信の使い道
センサネットワークを作るうえで、ポイント・トゥ・ポイントネットワークは果たしてどの程度実用に耐えるのでしょうか。
常に安定した電源が供給されて電波も十分に届くような用途にはポイント・トゥ・ポイントネットワークで容易にネットワークを形成できるでしょう。

一方で、どちらかのモジュールの電源が切れたり、電波が届かなくなったりしてしまうとネットワークが停止してしまいます。
XBeeモジュールを複数台使用する場合には、メッシュトポロジを使用しておくことで、一部のルーターと通信できなかった場合には別のルーターを経由して通信を行う、ということができます。
より安定したセンサネットワークを構築するならば、メッシュトポロジを使用するのが良いでしょう。

さらにステップアップ

チャットの例から発展して、3つめのXBeeモジュールをネットワークに追加してみましょう。

一例を示すと、新たに追加するモジュールをルーターに設定し、宛先アドレスをすでにあるルーターに設定します。

USBポートやPCが足りないときは
XBeeネットワークの実験を行う際に、PCのUSBポートが足りない場合や、ポート同士が近すぎてアダプタを並べて挿せない場合、PCを2台3台と使用できない場合には、電源付きのUSBハブやモバイルバッテリーやスマホの充電器等を使用して動作させることもできます。
ただし、動作させられないハブやモバイルバッテリーもありますので、まずは手持ちがあれば試してみると良いでしょう。

※モバイルバッテリー等は流れる電流の大小により充電中・充電完了を判断しています。XBeeモジュールは消費電流が(スマホ等と比べて)小さいため充電完了とみなして電流の供給を止められる可能性があります。充電電流の小さいワイヤレスイヤホンの充電に対応したモードのあるバッテリーならば使用可能なはずです。

Filed Under: XBee 関連タグ:XBee

Reader Interactions

コメントを残す コメントをキャンセル

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2025年5月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
262728293031  
« 10月    

Copyright © 2025 · STEMSHIP.COM