
今回はXBeeの便利な機能のひとつであるI/Oラインパッシング(I/O line passing)について解説します。XBeeのI/Oラインパッシングは、比較的簡単にI/Oピンの状態を無線で他のXBee直接伝送し、他のXBeeで同じI/Oピンの状態を同期させる機能です。これにより、ハードウェアを追加することなく、離れた場所にあるXBeeのI/Oピンの状態を制御することが可能になります。
I/OラインパッシングがサポートされているXBeeとファームウェアを以下の表にまとめます。
I/OラインパッシングがサポートされているXBeeとファームウェア
XBee S1 | XBee S2 | XBee S2C | XBee 3 | |
802.15.4 | 〇 | - | 〇 | 〇 |
Zigbee | - | × | × | × |
DigiMesh | × | - | 〇 | 〇 |
以下にXBee3のI/O line passing が表示されているConfigurationの一部を示します。

DIO0を用いた場合を例にI/Oラインパッシングを実行するために必要なパラメータを以下に列挙します。
1.送信側と受信側XBeeの設定
(1)送信側XBee
・D0 AD0/DIO0/Commissioning Button Configuration
デフォルトではCommissioning Button[1]に設定されています。ADC入力やデジタル入力及びデジタル出力(Low or High)の設定が可能です。I/Oラインパッシングを実行するためにはADC入力やデジタル入力設定します。
・IC Digital I/O Change Detectiom
変化検出のために監視するデジタル入力ピンを設定するビットフィールドです。有効なデジタル入力ピンで変化が検出されると、デジタルI/Oサンプルが受信側XBeeに送信されます。各ビットが以下のように対応しています。
ビット0がDIO0~ビット14がDIO14
I/Oラインパッシングを実行するためには強いようするDIOに対尾するビットを1に設定します。
(2)受信側XBee
・D0 AD0/DIO0/Commissioning Button Configuration
I/Oラインパッシングを実行するためにはデジタル出力(Low or High)を力設定します。
・IA I/O Input Address
デフォルトではFFFFFFFFFFFFFFFFに設定され、I/Oラインの受け渡しを無効になっています。802.15.4ファームウェアの場合にI/Oラインパッシングを有効にするためにはIAに送信側のXBeeの16ビットアドレスMYを入力します。又は、このデバイス宛てのI/Oパケットの受信をブロードキャストにする場合は、IAを0xFFFFに設定します。DigiMeshファームウェアの場合はIAに送信側のXBeeの64ビットアドレスを入力します。又は、802.15.4ファームウェアと同様にブロードキャストにする場合は、IAを0xFFFFに設定します。
・T0 D0 Output Timeout
デフォルトでは0に設定されています。出力タイムアウト値の設定を行います。I/Oラインの通過により出力がデフォルト以外のレベルに設定されると、タイマーが開始され、タイマーが時間切れになると出力がデフォルトレベルに戻ります。有効なI/Oパケットを受信するとタイマーはリセットされます。0に設定するとタイムアウトは発生しません。
2.I/Oラインパッシング種類
(1) デジタルラインパッシング
送信側のXBeeモジュールのデジタルI/Oピンの状態が変化すると、その変化が無線で他のXBeeモジュールに伝送され、受信側のXBeeモジュールの対応するd絵ジタルI/Oピンの状態が同じように変化します。デジタルI/Oラインは送信側XBeeと受信側XBeeのペアでマッピングされています。送信側デバイスでデジタル入力として設定されたピンは、受信側デバイスの対応するデジタル出力ピンに影響を与えます。例えば、D5 を入力としてサンプリングする送信側XbeeデバイスはD5をDigital input [3] に設定し、受信側XBeeのD5 が出力として設定されているため、Digital Out, Low [4]または Digital Out, High [5]に設定します。
また、各デジタルピンには、関連付けられたタイムアウト値があります。デジタル出力ピンに影響を与える I/O サンプルを受信すると、タイムアウト期間が経過すると、ピンは設定された状態に戻ります。ピン D0 ~ D9 の場合、関連付けられたタイムアウトコマンドは T0 (D0 タイムアウト) ~ T9 (D9 タイムアウト) です。
デジタルラインパッシングには2種類のモードがあります。これについては次回の記事で詳しく解説します。
(2)アナログラインパッシング
デジタルラインパッシングと同様に、アナログラインパッシングは、あるデバイスのアナログI/Oサポートを別のデバイスのPWM出力としてペアリングします。ADC入力で測定された電圧をシミュレートできる2つのPWM出力ピンがあります。ADC入力は、対応するPWM出力とは異なるピンにあることに注意してください。つまり、AD0とAD1に対応するピン番号は20番と19番ですが、PWM0とPWM1それぞれに対応するピンは6番と7番です。AD0はPWM0に、AD1はPWM1にそれぞれ対応します。
アナログラインパッシングのタイムアウト値はPT(PWM出力タイムアウト)で設定でき、これは両方のPWM出力ピンに影響します。PWM出力ピンに影響を与えるI/Oサンプルを受信すると、PTタイムアウト期間が経過すると、設定された状態に戻ります。
また、M0(PWM0デューティサイクル)及びM1(PWM1デューティサイクル)コマンドを使用してPWM出力レベルを明示的に設定できます。例えば、M0はPWM0のデューティサイクルを設定することができます。PWM周期は64μsで、この周期内で0から0x3FF(10進数で1023)の間で設定可能です。具体的にはM0=0(0% PWM)、0x1FF(50% PWM)、0x3FF(100% PWM)です。但し、アナログラインパッシングが有効で送信元がAD値を送ってきた場合は、M0の値は無視され、送信されたAD値をPWMデューティとして出力されます。
3.用途
I/Oラインパッシングを利用することで、例えば、以下のような応用が考えられます。
・遠隔監視:センサーの状態を遠隔地で監視する。
・リモート制御:スイッチの状態を遠隔地で制御する。
・アラームシステム:アラームの状態を遠隔地に伝達する。
ここで解説したように、XBee3の場合はI/Oラインパッシングは802.15.4とDigiMeshファームウェアで使用できます。802.15.4ファームウェアはノード間が直接通信するため、遅延が数10ms程度と比較的少ないことが特徴です。
一方、DigiMesh ファームウェアはメッシュ型ネットワークであり、ノード同士が経路を動的に見つけて中継します。そのため、送信元と受信先が離れていても中継ノードを介して到達可能です。しかし、中継経路を取る場合やスリープ設定によっては数百ms〜数秒になることもあります。従って、ネットワークが単純で低遅延やリアルタイム性を重視する場合は802.15.4ファームウェアの使用が推奨されます。