
Aduino(マイコン)などを使った電子工作で、無線通信が必要なときは今までBluetooth(SPP)通信で行っていました。XBeeも気になってはいたのですが割と高価なので手を出さずにいました。が今さらですがXBee ZB(S2C)を入手することができたので勉強も兼ねて使い方や設定した内容などを簡単にまとめておきます。
概要
今回はX-CTUでXBeeの初期設定を行い、2台のXBeeを使用してArduinoとパソコンの双方から簡単な通信確認をするところまでを行いたいと思います。(長くなるのでこの辺で止めておきます)
- パソコンの事前準備
- XBeeの設定
- Arduinoとパソコンの簡単な無前通信確認
までを行います。まぁ最初なので動くかどうかの確認をするところまでです・・。
XBeeには通信モードが二通りあり、一つがATモード(透過モード/
Transparent mode)です。ATモードは単純なシリアル通信となります。そのため有線で行ってしたシリアル通信をほぼそのまま無線化できるということで、可動さえ確認できれば通信までは非常に簡単です。今回はこのATモードでテストします。
もう一つはAPIモードと呼ばれるモードで、APIフレームという決められた構造でデータ通信を行う方法です。APIモードではいろいろメリットがあるのですが、少しハードルが上がるのでまた機会があれば触ってみたいと思います。
準備物
XBee × 2台 USBシリアル変換器 Arduino UNO パソコン(Windows10)
おおきくはこれくらい。USBシリアル変換器はパソコンとXBeeを繋ぐ物です。秋月などでXBee用のUSBシリアルインターフェースが有るので余裕があれば2台分準備しておいた方が便利かと思います。1台でも抜き差しして使用して問題ないです。 持ってなければ汎用のUSBシリアル変換器などで代用することも可能。
あとブレッドボードとかワイヤーなどは適宜揃えておきます。ピッチ変換のソケットもあると便利です。(XBeeの端子ピッチは2mmです)
パソコンへ「X-CTU」をインストールする
XBee本体の設定はパソコンから行います。ですのでまずは使用するパソコンへXBee本体の設定を行うソフト、「X-CTU」をインストールします。
▼X-CTUはここからダウンロード▼
▼ここの中ほど▼(2019/5時点)

「Diagnostics, Utilities and MIBs」の右側にある「▼」マークをクリックして展開します。現時点の最新バージョンは6.4.3のようですね。今回はWindows用の物をダウンロードしてインストールします。
あとXBeeとパソコンを繋ぐために使用するUSBシリアル変換に合わせてWindowsドライバーもインストールしておきます。ここら辺はArduinoIDE使ってたり、過去にUSBシリアル変換を使っていたりすると改めてインストールは不要の場合もあります。
XBeeとパソコンを接続する
ここまで準備ができたらXBeeとパソコンを接続して設定をしていきます。前述しましたが私の場合、XBee用のUSBシリアル変換器を一つしか持っていないため、もう一台のXBeeは汎用USBシリアル変換を使用して接続してます。
▼XBee用の変換器の場合▼

こんな感じでだいたいの変換器はXBeeをのっけてパソコンとつなぐだけです。
▼汎用のUSBシリアル変換の場合▼

方法によりますが、若干煩雑になります・・。今回は2台分を無理にパソコンへ接続しましたが、パソコンでは設定を行うだけなので無理に2台分の接続を同時に行う必要はないです・・。
でパソコンと接続したらX-CTU(パソコン)からXbeeを認識させます。
▼デバイスマネージャー▼

XBeeを認識するとWindowsデバイスマネージャーで「USB Serial Port」として確認ができます。
▼XBeeを認識したら、インストールしたX-CTUを起動▼

起動したら左上の+の「Add devices」もしくは虫眼鏡の「Discover devices」をクリックしてXBeeを認識させます。前者は接続しているXBeeの素性がある程度判明している場合、後者はXBeeの設定が全く不明の場合に使用します。
▼「+Add devices 」をクリックした場合▼

このような画面になるので、XBeeが接続されているCOMポートを選択、ポート設定をXBeeと合わせて「Finish」をクリックします。初めて接続する場合は、COMポートを選択するだけで他は何も触らなくてもO.Kかと思います。
▼虫眼鏡「Discover devices 」をクリックした場合▼

このような画面でポート設定が、いくつか複数選択できるようになってます。どれがつながるかソフト側で判断してくれるみたい。ただ選択項目が多いと接続確認にそれなりの時間がかかるようです・・。
「Finish」をクリックするといろいろダイアログがでますがそのまましばらく待ちます。
▼でうまくパソコンと接続されると▼

接続しているXBee情報が画面左側に表示されます。これでパソコンからXBee本体の設定変更ができるようになりました。設定を変更するためにはこの表示されているXBee情報辺りを適当にクリックします。
でまたしばらく待つと、
▼このような設定項目が右側に表示されます▼

パソコン側XBeeの設定
まずはパソコン側のXBeeの設定を変更していきます。

各項目値を入力して右側にある鉛筆みたいなボタンで書込み(設定変更)を行います。となりの回転矢印ボタンは現在の状態を再読み込みします。項目にある「青三角」マークはデフォルト値以外が書き込まれている場合、「赤三角」マークは設定を変更しているがまだ保存(書き込み)していない状態を表しています。
まずパソコン側XBeeです、
「ID」PAN ID

今回は「7」としています。なんでもいいです。パソコン側とArduino側の2台のXBeeは同じ値を設定します。
「CE」Coordinator Enable

ここを「Enable[1]」にしておきます。XBeeを2台で接続する場合、一台を「コーディネーター」にしてもう一台を「ルーター」にする必要があります。デフォルト、「Disabled[0]」は「ルーター」となります。左画面にある認識しているXBeeアイコンに大きく「C」や「R」記号が表示されるのでそこでも確認できます。
今回はパソコン側XBeeを「コーディネーター」としてます。
「SH」Serial Number High「SL」Serial Number LOW

自分の製品のシリアルナンバーが確認できます。「SH」は「13A200」でみんな同じ・・。
「SL」は機器唯一の記号です。Arduino側XBeeの設定に記述するため控えておきます。本体の裏側にも記載されてます。ここでは確認するだけ。
「DH」Destination Address High「DL」Destination Address Low

ここに相手側(Arduino側)XBeeのシリアルナンバーを入れます。DHはみんな同じ「13A200」です。「DL」は固有です。
「BD」Baud Rate

ボーレートの設定項目です。デフォルトでは「9600」で特に変更する必要はないですが、今回は「115200」で試してみました。2台のXBee設定は合わせておく必要があります。
これでパソコン側XBeeの設定は完了です。一度、X-CTUを終了させてパソコン側XBee外しておきます。
Arduino側XBeeの設定
次にArduino側XBeeをパソコンに接続し、X-CTUに認識させて設定を行っていきます。パソコンへの認識方法は同じです。変更するところだけ説明です。
「ID」PAN ID

パソコン側XBeeと合わせて「7」にしてます。(なんでもいいです。)
「DH」Destination Address High「DL」Destination Address Low

パソコン側XBeeのシリアルナンバーを入れます。
「BD」Baud Rate

ボーレートはパソコン側XBeeと合わせて「115200」にします。「CE」はルーターとして使用するのでデフォルトの「Disabled[0]」のままでO.Kです。
Arduino側XBeeの設定で変更する箇所はこれだけ。あとはパソコンとArduinoで簡単な無線通信を行ってみます。
Arduinoとパソコンで簡単な無線通信テスト
ArduinoとX-CTUのコンソール画面を使用してXBeeの簡単な無線通信テストを行います。これまでのXBee設定を済ませておけば互いに電源を入れるだけで、XBeeは互いに自動で接続されます。
まず、Arduinoに以下のスケッチ(ソース)を書き込んでおきます。
void setup() { Serial.begin(115200); } void loop() { if (Serial.available() > 3) { char buf[4]; Serial.readBytes(buf, 4); Serial.println(""); Serial.println("Echo back from Arduino to XBee...."); Serial.print("'"); Serial.print(buf); Serial.println("'"); } }
シリアル通信でエコーバックしているだけの簡単なソースです。パソコン側から4byte以上の情報を受信したら、簡単な文字列と受信した情報をそのまま返信するだけのソースです。IDEのシリアルモニターで動作確認してみてもいいかもしれません。
でソースを書き込みしたら、ArduinoとArduino用XBeeを結線します。
▼Arduino×XBeeの結線▼
Arduino 3.3V ⇔ XBee Vcc(1pin) Arduino GND ⇔ XBee GND (10pin) Arduino RX ⇔ XBee Dout(2pin) Arduino TX ⇔ XBee Din (3pin)

通信するだけなら4本をつなぐだけです。XBeeのピッチ変換基板に5v⇒3.3vのレギュレーターが付いているので、ここではArduino5vピンと接続してます。
TX、RXを繋いだ状態ではArduinoへスケッチを書き込めないので注意が必要です。
これでArduino側は準備完了です。
次にパソコン側の作業です。パソコン側XBeeを接続して、X-CTUを立ち上げて認識させます。
▼X-CTUのコンソール画面▼

XBeeを認識させた後に、画面左上の「モニター」のようなボタンをクリックするとコンソール画面が開きます。でその後、「Open」となっているコンセントのようなボタンをクリックします。

パソコンのポートとうまく接続されると「Close」となって準備完了です。「Consol log」画面でキータイプを行うと、その文字を画面に表示すると同時にパソコン側XBeeからその情報を無線送信します。
またこの画面にはパソコン側XBeeが受信した情報も表示します。ASCIIコードの16進数表記も同時に行ってくれるので便利です。
送信情報は「青字」で、受信した情報は「赤字」で表示されます。
▼「abcd」を送信してみる▼

試しに「abcd」をキータイプしてみます。(送信文字は青字です)パソコン側XBeeから情報が送信(パソコン⇒Arduino)されます。
Arduino側では4文字目を受信したら、返信処理を行うようにしているため、「d」を受信した瞬間に返信処理(Arduino⇒パソコン)を行います。パソコン側が受信した場合はコンソール画面には赤字で表示されます。
長々と記載しましたが、無線通信確認はこれで完了です。XBeeのATモード(透過モード)であればシリアル通信がそのまま無線化されるので割と簡単です。
コメント
すみません、arduino側にプログラムをTx、Rxから外してから書き込み、そのあとTxとRxをつけてからXCTUでXBeeを認識させようとしたら、認識されませんでした。
僕の手順がどこかおかしいのだと思いますが、どこを直したらよろしいでしょうか?
よろしくお願いします
arduino側のXBeeにプログラムを書き込むと、PC側から文字を送ることが出来なくなってしまいました。
何が原因となり得るか分かったりしますか?