2014年7月31日木曜日

XBeeSetup

XBeeのFW書き換えや各種設定をするのにX-CTUやmoltosenso Network Managerを使用するのが普通のやり方なのですが、terminalから設定ファイルを読み込むコマンドの形で使いたかったのでFW更新して設定するプログラムを作りました。
FWはDigi Internationalのページからダウンロードしてきて下さい。
 XBee / XBee-Pro ZB (S2) Modulesを選択、次のページでFirmware Updatesを開いてXBee / XBee-PRO ZB firmware ver. 2xA7を選ぶと82001817_G.zipがダウンロードされるので展開し、82001817_G/ebl_files/のXB24-ZB_21A7.eblからXB24-ZB_29A7.eblをXBeeSetupのdirectoryにコピーします。

configファイルの記述方法はsample.confを参考にしてもらえばわかると思いますが、
書き込むfirmwareのversion(XBeeの動作モード毎にfirmwareが違う。例えばCoordinator APIで使う場合は21A7)をfirmware:の行に記述
setup:以降の行はXBeeに送るATコマンドを記述します。
./XBeeSetup -c sample.conf -d /dev/cu.usbserial (serialのdeviceファイルは環境に合わせて下さい)
を実行するとFWのverisonを確認し、必要ならupdateして設定を書き込みます。
setupの最後にWRを書いておくことでXBeeの不揮発性メモリに設定が記録されます。

ソースコードはここにあります。

2014年7月25日金曜日

HA2module

HA2bootから起動されるHA-2/FC、RP-1/RIR用のプログラムです。
基本的なXBeeとの通信機能の他、赤外線リモコンの送信、受信、HA端子の制御、監視、接点スイッチの制御と監視、ADCの監視などの機能を実装してあります。
赤外線リモコンの送受信は今のところNEC,SONY,家製協フォーマットのみ対応です。
赤外線リモコン受信、HA端子、接点スイッチの監視はイベントが発生するとホスト宛に通知が出るようにしています。
プログラムの構成はScheduler,Timer,XBee,Queue,Usartでシステムとしてのスケジュール管理とXBee経由の通信管理を行い、それ以外の物が各種コマンド実行とそれに付随するデバイスドライバになっています。
このプログラムはXBeeからのコマンドでそれぞれの機能が動作するだけの物なので単独では役に立ちません。
ホスト側のControlDaemonとの組み合わせで機能するようになっています。
ソースコードはこちらにあります。
makeするとha2module.haファイルが出来上がります。

落雷

昨日の夕方、かなり強烈な落雷がありました。
家の中で色々リセットされてました。
対策を入れてあったので今回は壊れたモジュールは有りませんでした。
対策が有効だったということかと思います。

2014年7月17日木曜日

elf2ha

avr-gccで生成された.elfファイルをHA2bootで書き込める.haファイルに変換するためのツールです。
.haフォーマットは先頭16byteのヘッダーとプログラムの先頭からの連続領域のイメージからなる単純なフォーマットです。
ヘッダーの中身はBigEndianで
struct HeaderSt {
  longword Magic; // 'HAUP'の文字列
  word SetId; // moduleの種類を表す16bitの値
  word Version; // プログラムのバージョンを表す16bitの値
  word Addr; // 先頭アドレスだがリセットベクタがあるので必然的に0x0000
  word Size; // プログラムの先頭からのサイズ
  word Reserve;
  word CRC; // プログラムの先頭から終わりまでのCRC
};
です。

HA1Controlプログラムのconfigファイルでこの.haファイルを指定しておくと起動時に各moduleのバージョンチェックをして必要なら更新作業をします。
sudo make installすると/usr/local/binにelf2haが作られます。
HA2moduleのイメージを作るのに必要になります。

ソースコードはここにあります。

2014年7月11日金曜日

HA2boot

HA-2/FCモジュールのAVRのFWをFW更新用のbootプログラムと通常使用時に動く本体FWの2つに分離しました。
bootプログラムは一番最初にAVRのboot領域に書き込みツールで書き込みます。
本体FWはbootプログラムによってXBee経由でAVRのアプリケーション領域に書き込まれます。
通常動作時は本体FWが動作しており、bootに遷移するコマンドを受けるとbootプログラムにjumpします。
bootの書き込みツールは色々あるので別途書きます。
bootは起動するとボーレートを変えながらXBeeにバージョン問い合わせのパケットを投げて帰ってきたパケットを確認することでXBeeとAVR間のボーレートを認識します。
現在のコードでは2400bps, 4800bps, 9600bps, 19200bps, 38400bps, 76800bps, 250000bpsを確認しています。この値はAVRを8MHzで動かした場合に誤差が少なくてちゃんと通信が成立しそうな値を選択しています。
boot自体はアプリケーション領域の本体FWを受け取って書き込む機能に特化しているので、それに必要なコマンドが届くのを待ち続けコマンドが来たら実行するだけの単純なものですが実装して見ると意外と大きくなってしまいATMega328のboot領域ギリギリまで使用してしまいました。
コードをgithubに置きました。

2014年7月3日木曜日

HA-2/FCモジュールの回路修正

1年ほど使ってきて色々回路修正が入ってきたので修正内容をまとめました。

-落雷対策で問題になりそうな端子にバリスタを追加しました。
昨年落雷でモジュールが壊れてバリスタを入れる対策をしたことで、それ以降近所で一度落雷がありましたが壊れること無く動いています。このまま今年の夏も乗り切れれば大丈夫かとおもいます。
-外部端子のAD1,2をAVRのADCからも使えるようにしました。
温度センサーと雨センサーを読み取るのにXBeeのADCを使用してきましたが、XBeeのADCは1.2Vまでしか対応できません。他のセンサーをつなごうとすると3.3Vまでのものも多いためAVR側のADCも接続できるようにしました。
HA-2/FCモジュールはXBee側のADCをoffにして使用します。offになっていれば端子に3.3Vが掛かっても問題ありません。
-外部端子のGPIO1,2をAVRのGPIOからも使えるようにしました。
将来の拡張用としてAVRのGPIOも2本出せるようにしました。
-外部端子に赤外線出力が強弱2系統出していたのを片方赤外線入力に変更しました。
AEHA,NEC,SONYフォーマットの赤外線リモコンコードのみ受信可能です。
解釈後Header部(4byte)を含めて64byteまでのコードを受信できるはずです。(そんなに長いコードを吐くリモコンが手元にないので未確認です)
-XBeeからAVRをリセット出来るようにしました。
AVRのFW updateを出来るようにしたため、bugありのFWを送って同仕様も無くなった時の対策としてXBeeからAVRをリセット出来るようにしました。

修正後の回路図です。


2014年7月1日火曜日

SiriProxyその後

色々あって暫く更新をサボってました。
SiriProxyは当分無理そうなので、iOS8のHomeKitが出てきてから対応を考えようと思います。
更新サボってる間にもいろいろ変更していたので週一程度でぼちぼちと書いていきます。