このページでは 赤外線リモコン信号を送信してテレビや照明、エアコンなどの家電を自動制御を行うための XBee ZigBee の END DEVICE の製作方法に関する情報を掲載しています。送信だけでなく赤外線リモコンの受信にも対応したArduinoベースの子機については「乾電池で動く無線リモート赤外線リモコン」を参照してください。
赤外線リモコンの発光信号の生成にPICマイコン(PIC 12F683)を使用しています。PICにソフトを書き込む場合はPIC Kit 2などのライターが必要です。
ここではブレッドボードもしくは秋月で売られている「片面ガラス・ユニバーサル基板(ブレッドボード配線パターンタイプ)」を使用して製作します。
下図は赤外線リモコン送信デバイスの製作例です。左側にXBee、右側に赤外線リモコン信号を生成するためのPICマイコンが実装されています。赤外線LEDは右下(E行29列目)にあります。また下部の中央に1000uFのコンデンサを配置しています。ここまで大きい必要は無いかもしれません。XBeeの送受信中に赤外線を発光したり、照度センサ(J行30列目)や温度センサ(D行20列目)の測定を行うことを想定しているので電圧変動を減らすために贅沢目になっています。用途に合わせて調整してください。
乾電池での動作を想定しているので、XBeeの13番ピンON信号がHレベルの時だけPICが動作するようにしています。ZigBee Routerとして動作しているときはXBeeからON信号がHレベルを維持し続けますので、PICも動作し続けます。電力を抑えたい場合は、X-CTUを使用してXBeeをEND DEVICEに書き換え、CYCLIC SLEEP を設定します。CYCLIC SLEEPの詳しい情報は「XBee ZigBee スリープ方法 CYCLIC SLEEP」を参照してください。
なお、XBeeの3番ピン(DIN)に接続している「テスト用ログデータ」はPICが受け取ったシリアルデータをテキストに変換して応答するテストのための配線です。この情報を送信するために消費電力を増大させてしまうので、テスト後に切断します。
左上のプッシュスイッチ(基板1行J列目)はコミッション用の参加設定スイッチです。親機とのペアリングに使用します。ブレッドボード配線パターン基板へはGNDとXBeeの20番ピンに接続する対角の2端子のみをハンダ付けし、残る2端子は折り曲げて基板に差し込まないようにします。また、ボタン付近にある背面のマイナス電源ライン(-)パターン1行目と3行目間をカッターなどで切断しておく必要があります。(XBeeの20番ピンがGNDに接続されないように)。ブレッドボードではパターンの切断が出来ないので、プッシュスイッチの足を内側に折り曲げて挿さらないようにします。
XBeeを低消費電力で動作させるためには、購入時のZigBee Routerの状態からZigBee End Deviceに変更する必要があります。(Routerのままでも動作はします。)
End Deviceへの変更するにはX-CTUを使用してファームウェアを書き換えます。X-CTUの「Function Set」のファームウェアの種類の部分で「ZIGBEE END DEVICE AT」を選択します。X-CTUの使い方やファームウェアの変更方法「XBee ZigBee 基本編 ワイヤレス通信を始めよう」を参照してください。
一度、End Deviceに設定すると、XBeeはCYCLIC SLEEPモードで動作するようになりますので、以降はX-CTUとXBeeとの通信を行う直前にXBeeのリセットを押して、すばやくX-CTUを操作する必要があります。これは、CYCLIC SLEEPモードではXBeeの電源がOFF状態になる期間が発生するためです。また、XBeeをリセットすることで一定の時間だけXBeeを強制的に起動させることが出来ます。起動している期間はX-CTUのST値(Time before Sleep)で設定することが出来ます。初期値は5秒ですが慣れれば500ms(01F4)あたりに設定しても接続することが出来ます。
XBeeの設定はX-CTUを使用しなくても、シリアルやXBee親機からのATコマンドでも設定することが出来ます。しかし、普段はスリープとなっているEND DEVICEにATコマンドで設定するのは難しい場合がありますので、したがって、End Deviceの各種設定については、XBeeに予めX-CTUで設定しておくことをお勧めします。
以下に赤外線リモコン送信デバイスにおける XBee ZigBee End Device のCYCLIC SLEEP設定例を示します。
AT
name
| 初期
| 例
| 説明
| SM
| Sleep Mode
| 0x04 | Cyclic 0x04 | Cyclic No Sleep(00)/Pin Hibernate(01)/Cyclic Sleep(04)/Cyclic Sleep Pin-Wake(05)の切り換え。Cyclic Sleep wakes on timer expiration.
| ST
| Time before Sleep
| 0x1388 | 5000[ms] 0x01F4 | 500[ms] シリアルやRFの通信終了後、省電力モードに移行するまでの待ち時間[ms]。 | SP
| Sleep Period
| 0x0020 | 32x10[ms] 0x01F4 | 5秒 ZigBeeデータ通信のための省電力モードの持続時間x10[ms]。RouterとCoordinatorは情報の最大保持期間。設定範囲は0020(320ms)〜0AF0(28sec)。 | SN
| Sleep Number
| 0x0001 | 毎回起動 0x0001 | 毎回起動 外部CPUを起動するまでの起動カウンタ。SP後に通信データが無い場合は省電力モードになり、それがSN回続くと外部On/Sleep pinへON信号(H)を出力する。(SP×SNの間隔で起動) | SO
| Sleep Options
| 0x00 | オフ 0x00 | オフ 0x02 - Wake for ST time on each cyclic wake (after sleeping for SP*SN) | 0x04 - Enable extended cyclic sleep (SP毎にポーリングしない) DH
| Destination Address High
| 0x00000000
| 0x0013A200
| 親機(宛先)の上位アドレスを指定する
| DL
| Destination Address Low
| 0x0000FFFF
| 0xXXXXXXXX
| 親機(宛先)の下位アドレスを指定する
| D1
| AD1/DIO1 Config.
| 0x02
| アナログ入力に設定
| D2
| AD2/DIO2 Config.
| 0x02
| アナログ入力に設定
| PR
| Pull-up Resistor
| 0x1FFF
| 0x1FF9
| DIOポート1〜2のプルアップを禁止
| |
なお、前述のとおりEND DEVICEをX-CTUで読み込み/書き込みしようとすると、通信エラーが発生する場合があります。その場合は、リセットボタンを押してからST時間内にRead/Writeすると成功します。ST時間を500msよりも短く設定してしまった場合は「Always Update Firmware」をチェックしてFirmwareの書き込みを行うことで初期状態に戻すことが出来ます。Firmwareの書き込みにはFTDI製のUSB変換ICを使用します。また、書き込み後にチェックを外すのを忘れないようにします。
本機のPIC用のソフトウェアは「こちら:ir4xbee.zip」からダウンロードしてPIC Kit 2などのPICライタでマイコンへ書き込みます。
赤外線リモコン信号をPICへ送るにはPICの6番ピンにシリアルデータ(9600 baud 8bit - Nonパリティ - STOP 1 bit)を入力します。シリアルデータは[ESC][I][R]に続いて信号長(バイト数)、信号データの順に送信します。信号長と信号データはバイナリです。
赤外線リモコン信号用のシリアルデータ(9600 8-N-1) Byte 1 |Byte 2 |Byte 3 |Byte 4 |Byte 5 |Byte 6 |.....|Byte 10 --------+--------+--------+--------+--------+--------+ +----- ESC(1B) |I(49) |R(52) |len(06) |d[0] |d[1] |.....|d[5] |
1〜3バイト目は赤外線リモコン送信の識別子で固定{0x1B,0x49,0x52}です。4バイト目のリモコンコード長はバイト数で表します。したがって、8ビット単位のリモコン信号しか対応していません。また、4バイト目の上位2ビットはリモコン信号のフォーマットを示します。SHARPやPanasonicの機器にはAEHA(家製協)フォーマットを指定します。AEHAは0なので信号長を4バイト目にそのまま入力します。NECフォーマットやSIRCフォーマットの場合は、それぞれ信号長に0x40または0x80を加算してから入力します。
予めPICのEEPROMにリモコンコードのプリセット値を記録しておくこともできます。この場合はプリセット番号(0〜15)に0xC0を加算して4バイト目に入力します。
EEPROMに予め記録しておくプリセット信号は上記のシリアル信号フォーマットの4バイト目からの情報です。プリセット数は最大16件で、1つのプリセット信号は最大15バイトです。EEPROMのアドレスは16バイト毎にプリセット番号0〜15番までを順に割り当てています。
なお、赤外線リモコン信号の解析ツールなどは「地デジ方式編-赤外線リモコン方式」に「Remote Station PC-OP-RS1互換ハードウェア」の回路図および赤外線リモコン信号の情報を解読するための「解析ファームウェア」などを公開しています。
赤外線リモコン信号を本機に送信するための親機も必要です。当サイトで公開しているPC用およびH8マイコン用の「XBee 管理用ライブラリ ZB Coordinator API」を親機側のXBeeに使用することができます。
親機に実装したソフトウェア ZB Coordinator API から本機へ赤外線リモコン信号を送ると、本機のPICが赤外線信号に変換して赤外線LEDを駆動します。親機からの送信にはソフトウェアライブラリxbee.cのテキスト送信の関数を使用します。テキスト送信の関数の使用方法は親機側 テキストメッセージ送信 関数」を参照してください。
また、子機に実装したZigBee の照度センサーや温度センサーの情報を読み取るには、コールバック関数「xbee_rx_call」を用います。