ArduinoでSTEM教育​ 応用編:XBee(ZigBee)で無線通信

ArduinoでSTEM教育​ 応用編:XBee(ZigBee)で無線通信

長距離通信を行う場合、Bluetoothは電波が届かないので、WiFiやZigBeeを使用します。XBeeモジュールを使用すると、手軽に環境を構築できます。Arduino2台を1対1でZigBee通信する方法について紹介します。

XBeeとZigBeeについて

 XBeeは米Digi社の商標で、各種無線通信規格に対応したモジュールが販売されています。よく使用される通信規格は、WiFiとZigBeeです。ZigBeeは聞いたことがないかもしれませんが、電気的な基礎仕様はIEEE802.15.4で規格化されており、それより上位の層はZigBeeアライアンスが使用策定を行っています。
 WiFiはアクセスポイントを経由して、インターネットに接続することを主な目的としていることに対して、ZigBeeやBluetoothは機器間を接続して情報を相互通信することを目的としています。そのため、 ZigBeeやBluetoothは 通信速度でWiFiに劣るものの、低消費電力という点で優れています。ZigBeeはBluetoothと同じ2.4GHz帯を使用しており、通信速度はBluetoothに劣りますが、通信距離はBluetoothが10m程度なのに対して、ZigBeeは1km程度まで届きます。

XBeeの種類

今回使用するのは「XBee S2C/ワイヤアンテナ型」ですが、XBee S2Cはアンテナの種類が3つあります。

  • PCBアンテナ型
  • ワイヤアンテナ型
  • U.FLアンテナ型

ワイヤアンテナ型は、基板にアンテナが埋め込まれているため、アンテナに指向性があります。ワイヤアンテナ型は、基板から短いアンテナが伸びており、指向性が無く、遠くまで電波を飛ばすことができます。U.FLアンテナ型は、別売りの太くて大きなアンテナ「 XBee用外部アンテナU.FLコネクタ型 」を取り付けて使用します。

ここで注意が必要なのが技適です。XBee S2Cは技適認証取得済みなので、日本国内で使用可能です。ただし、U.FLアンテナ型は先述のアンテナとセットで認証を得ているため、セットで使用する必要があります。もし、自作のアンテナを取り付けたり、他製品のアンテナを取り付けて使用すると、違法になる恐れがありますのでご注意ください。

使用する部品

Arduinoを2台使用して、1対1でZigBee通信します。今回は、1台目のプッシュスイッチを押すと、2台目のLEDが点灯するものを作成します。

回路構成

LEDとプッシュスイッチの使用方法については、「ArduinoでSTEM教育​ 基礎編:プッシュスイッチ」に記載していますので、ここでの説明は割愛させていただきます。

XBeeの設定

1. XCTUのインストール

XBee製品の設定を変更するために、XCTUをインストールします。このソフトは、米Digi社で公開されています。ダウンロードリンクがわかりにくいのですが、下記リンク先の「Diagnostics…」をクリックで展開して、DOWNLOAD XCTUから対象OSのソフトをインストールしてください。

XCTUのリンク先:https://www.digi.com/support/productdetail?pid=3352

2.XBeeの設定

①XCTUを起動すると下記の画面が出ます。 まずは、XBeeエクスプローラUSB にXBeeを挿して、パソコンのUSBポートに接続して下さい。そして、左上のプラスマークのアイコン「Add devices」をクリックして下さい。

②パソコンに接続されたXBeeデバイスを検索するため、接続したポートを選択して、「Finish」をクリックします。すると、検索が始まりますので数秒待って下さい。 デバイスが見つかると、ウィンドウ左側に表示されます。これをクリックすると、デバイスの詳細情報を表示することができます。

③ここで下記の設定を書き換える必要があります。

  • ID PAN ID
  • DH Destination Address High
  • DL Destination Address Low
  • CE Coordinator Enable

「ID PAN ID」は、2台のXBeeで共通の値を使用します。ここでは初期設定の3332をそのまま使います。
「DH Destination Address High」は、接続相手のXBeeの「SH Serial Number High」の値を入力します。同様に、「DL Destination Address Low」も接続相手の「SL Serial Number Low」を入力します。
「CE Coordinator Enable」は、コーディネータの許可設定です。 コーディネータとは、ネットワーク内に必ず1台だけ存在し、ネットワークの立ち上げ機能を持っています。今回の場合は、どちらのXBeeをコーディネータ「Coordinator[1]」に設定しても構いません。もう1台はエンドポイント「Disable[0]」に設定して下さい。

以上を入力したら、最後に鉛筆マークの「Write」をクリックしてXBeeに書き込みます。完了すると、ウィンドウ左側のアイコンに「C」や「E」が表示されていると思います。これは、CoordinatorとEndpointを意味します。

XBeeシールドの設定

XBeeの設定が完了したら、シールドに差し込んでArduinoと接続します。ここで、注意が必要なのがジャンパーの位置です。今回の部品の組み合わせの場合は、下記の写真で示すとおり、「0」はXB_TXとDIGITALをジャンパーで接続、「1」はXB_RXとDIGITALをジャンパーで接続します。

プログラム

 プログラムは以下の通りですが、Arduinoに書き込むときに注意が必要です。書き込む前に、XBeeシールドのジャンパーを取り外してください。もしくは、XBeeをArduinoから取り外してください。ジャンパを外さないまま書き込もうとすると、書き込みエラーが発生します。
 書き込みが完了したら、ジャンパーをもとに戻します。コーディネータ側のArduinoの電源を入れ、続けてエンドポイント側のArduinoの電源を入れると1対1接続が完了します。

①スイッチ側のプログラム

スイッチは、2番ピンでプルアップ入力に設定します。スイッチを押すとLOWが入力され、シリアル通信で’A’を出力します。この記述は、XBeeを使用せずにシリアルモニタに出力する場合と同じです。

②LED側のプログラム

LEDは、3番ピンで出力に設定します。スイッチ側からデータが送られてきたかどうかは、Serial.available関数で判断します。Serial.available関数は、シリアルバッファにあるデータのバイト数が戻り値です。したがって、この戻り値が0より大きければ、データが送られてきたことを意味します。そして、なんのデータが送られてきたかは、Serial.read関数で読み込みます。読み込んだ値が’A’の場合は、LEDの3番ピンをHIGH出力にして点灯させます。

まとめ

Arduinoを2台使用して、1対1でXBee(ZigBee通信)で無線通信する方法を紹介しました。通信相手のアドレスをXCTUで書き込み設定しさえすれば、あとはシリアルモニタに出力する要領で、プログラムを書くだけで通信ができました。海外サイトを見ていると、もっと安価なモジュールを使って無線通信をしていますが、 日本では 技適認証取得 が必要なことを覚えておいて下さい。

Arduino応用編カテゴリの最新記事