コントローラーとの無線接続

xbee zbを2セット購入したままになっていましたが、一念発起して、Arduinoで作成した太陽熱温水器コントローラーに接続をしました。
ハードウェアの接続は、xbee shield という売り物のボードの回路図を拾ってきてそれを真似してつくりました。
ArduinoのシリアルRX/TXにXbee zbの出力ピン(#3)はそのまま、入力ピン#2は3.3V/5V 電圧変換のために、12k/18kオームの分圧をして接続しました。電源は、SDシールドで5Vから3.3Vを作ったのが少し電力も余っているだろうということで、そこからおすそ分け。Xbeeの実装もSDシールドについている、IC基板面に実装しました。一応xbee shield の回路をまねて、ジャンパピンを差し替えることで、xbeeとの接続を切り離したり、USB側から直接xbeeに通信をしたりできるようにしました。実はこれができないと、モデムの設定が難しいですので絶対に切替が可能なように実装すべきでした。
ソフトの方は、xbee の設定があまりWebを検索してもわかりやすくはなく、少し苦労しました。
現在のところ、PCにドングル形式で刺したxbeeはcoordinator として設定し、PAN IDは0以外の値を設定、destination address high/low (DH/DL)は温水器コントローラー側のaddressに設定。温水器コントローラー側は、end device の設定で、PAN IDはcoordinator と同じ値、DH/DLはcoordinatorの値に設定して通信ができています。
通信できてはいるのですが、フロー制御なしで通信を行うと、xbeeの処理が間に合わないようで文字を飛ばしたりするようです。ボーレートはこれまで、57600bpsで行っていたのですが、間に合わないということで、9600bpsに落としましたが連続的に通信をさせるとそれでもだめなので、どうも、フロー制御を入れないと使い物にならなさそうです。SDに書いたデータのダウンロードはそんなわけでまともにできません。
まあ、リモートからでもコントローラーの制御ができるし、現在の動作状況を読むことは全く問題がないので、つけてよかった、とは思っていますが。少しソフトの改良は必要そう。
Arduinoのdigital IO ポートはまだ2pin 余っているので、データのダウンロードについては、cts の監視をするようにしたらよさそう。または、何らかのチェック付きファイル転送プロトコルを実装するのがよさそうです。たとえば、kermit? バッファーが80bytes しかxbeeにないようすなので、この範囲内にパケットが収まるように設計するのがよいと思うが、こんなに小さなパケットの転送プロトコルってなかなかない。
参考リンク
http://www.techand.jp/Digital/Arduino/Sensor-Net/Sensor-net.html
など。