XBee

XBee(ジグビー)は近接無線通信を実現するためのモジュールです。
特徴は低電力で安価なこと。加えて、多くのモジュールが技術基準適合証明を受けています。(用途の被るbluetoothモジュールは技適を受けてないものが多い。受けてても使いづらい動作電圧だったり…。)
この記事では、ArduinoとPCでのシリアル無線通信を実現します。
つまり、Arduino側からSerial.write()したものを、PC側で無線受信できるということです。
要するにPaxPowerGloveのページでやっているパワーグローブ近代化作業の要素技術確認です。
必要なもの
項目 | 説明 |
---|---|
Arduino Fio | XBeeを直接属することができる小型Arduino。 Arduino Uno + XBeeシールドでも可。 |
FTDI USBシリアル変換アダプタ | Arduino Fioを利用するときのみ書き込み用に必要。 必ず3.3V版を使用すること。 そのままではArduino Fioに接続することができないため、別途1×6 2.54mmピッチピンヘッダなどが必要。 |
XBee*2 | 無線接続のために必要。同一Seriesであること。 XBeeにはSeries1とSeries 2(ZB)があり、両者間では通信できません。 Seriesが同一であればアンテナの形状やProか否かは問いません。 |
XBee USBアダプタ(リセットスイッチ付き) | PCとXBeeを接続するために必要。 XBeeエクスプローラUSBなどでも可。 |
micro USB-USBケーブル | 上記とPCを接続するために必要。 |
X-CTU | XBeeの設定ツール。左記からダウンロードしてください。 |
手順のサマリ
PC側のXBeeのDevice TypeをCoordinator(親機)、機器側のXBeeのDevice TypeをRouter(フル機能子機)として設定していきます。
手順
準備
- X-CTUをインストールする。
- XBee*2の裏面のシールに記載されているアドレスをメモする。(0013A200で始まる16桁の文字列)
Arduino側XBeeの設定
- XBee USBアダプターにArduino側XBeeを刺す。 (方向に注意!アダプターにXBeeの形状がシルク印刷されてるので、その方向に刺す。)
- XBee USBアダプターをPCに接続する。
- X-CTUを起動する。
- 「PC Setup」タブをクリックする。
- 「Test/Query」ボタンをクリックする。
- 「OK」と表示されたら次に進む。
- 「Modem Configuration」タブをクリックする。
- 「Read」ボタンをクリックする。
- 「Function Set」欄を「ZIGBEE ROUTER AT」にする。(すでになっている場合は不要)
- 「ID - PAN ID」をクリックして、16進数4桁を入力する。(後で使うのでメモしておいてください)
- 「DL - Destination Address Low」をクリックして、先程メモしたPC側のXBeeのアドレスの下8桁を入力する。
- 「Write」ボタンをクリックする。
PC側XBeeの設定
- XBee USBアダプターをPCから外す。
- XBee USBアダプターからXBeeを外す。
- XBee USB アダプターにPC側XBeeを刺す。
- XBee USBアダプターをPCに接続する。
- X-CTUを起動する。
- 「PC Setup」タブをクリックする。
- 「Test/Query」ボタンをクリックする。
- 「OK」と表示されたら次に進む。
- 「Modem Configuration」タブをクリックする。
- 「Read」ボタンをクリックする。
- 「Function Set」欄を「ZIGBEE COORDINATOR AT」にする。(すでになっている場合は不要)
- 「ID - PAN ID」をクリックして、先ほどと同一の16進数4桁を入力する。
- 「DL - Destination Address Low」をクリックして、先程メモしたPC側のXBeeのアドレスの下8桁を入力する。
- 「Write」ボタンをクリックする。
Arduino Fioの設定
- Arduino FioにXBeeが刺さっていないことを確認する。
- FTDI USBシリアル変換アダプタをPCに接続する。
- Arduino IDEを起動する。
- Arduino Fioの場合は、[ツール]>[マイコンボード]>[Arduino Fio]をクリックする。
- [ファイル]>[スケッチの例]>[Communication]>[ASCIITable]を選択する。
Serial.begin(9600);
をSerial.begin(57600);
に書き換える。while(true) { continue; }
をthisByte = 32;
に書き換える。- FTDI USBシリアル変換アダプタをArduino Fioに接続する。シルク印刷を見ながら同一名称のピンをピンヘッダあるいはジャンプワイヤで接続する。
- スケッチを書き込む。
- FTDI USBシリアル変換アダプタをArduino Fioから外す。
- Arduino側XBeeをArduino Fioに接続する。
動作確認
- Arduino IDEを起動する。
- [ツール]>[シリアルモニター]をクリックする。
- 下部のボーレート選択欄で57600を選択する。
- Arduino Fioに電源を接続する。電源はmini USB端子をPCに接続するか、あるいはバッテリーを接続することで与える。
- XBee USBアダプターのLED、Arduino FioのLEDが激しく点滅し、シリアルモニターにASCII文字が表示されることを確認する。
手順は以上です。お疲れ様でした :)
備考
- 今回はArduino側のDevice TypeをRouter(フル機能子機)として設定しましたが、より省電力で動作させたい場合はをEnd Device(省電力子機)として設定することができます。 ただし、Sleepしてしまうため、若干レスポンスは悪くなるものと思われます。
- Arduino Fioに対してXBee Series1を接続し、RTSとDIO3をショートさせると、FTDI USBシリアル変換アダプタを使用しなくともXBee経由でArduino Fioにスケッチを書き込めるようです。