UARDECS07 beta5について簡易説明書
2016/03/9 H.kurosaki

●動作環境
以下の機種での動作を確認しています
Arduino UNO+Ethernet Shield 2 (W5500)
Arduino MEGA+Ethernet Shield 2 (W5500)
Arduino UNO+Ethernet Shield R3 (W5100)
Arduino MEGA+Ethernet Shield R3 (W5100)
Arduino Ethernet R3 (W5100)

●開発環境の構築
(1)Arduino IDE1.7.8以降を使用します
旧IDE1.0.6でもコンパイルは可能ですが、メモリ消費量が増えるのでメリットがありません
W5100搭載機種(Ethernet Shield R3など)ではW5100フォルダのファイルを使用して下さい
W5500搭載機種(Ethernet Shield 2など)ではW5500フォルダのファイルを使用して下さい
(違いはヘッダファイルの部分だけです)
Arduino IDEをインストールした後、マイドキュメントフォルダの中の
"Arduino\libraries"の下にUARDECSというフォルダごとコピーして下さい

(2)Ethernet Shield R3またはArduino Ethernet R3で開発を行う場合、
W5100ライブラリのプログラムにパッチを当てる必要があります
IDE1.7.8以降がインストールされているフォルダ"Arduino"の中の、
"libraries\Ethernet\src\utility"内にある、"socket.cpp"ファイルを、
このUARDECSの"W5100用Ethernetパッチ"フォルダにある、"socket.cpp"に置き換えます
※"libraries\Ethernet2"フォルダではないので注意して下さい

●サンプルスケッチ
正常にライブラリがインストールできていればIDE左上の
"ファイル"→"スケッチの例"の中にUARDECSという項目ができており、
その中からサンプルスケッチを呼び出すことができます
ただし、InAirTemp_ADT7410、InAirTemp_SHT7xは実際のセンサや追加ライブラリを必要とします

※旧IDE1.0.6では機種にかかわらずEthernet.hをインクルードしていましたが、
IDE1.7.8以降を使う場合、W5100搭載機種とW5500搭載機種でインクルードするファイルを書き換える必要があります
W5100搭載機種(Ethernet Shield R3など)ではEthernet.h(必要であればEthernetUdp.hも)を使用して下さい
W5500搭載機種(Ethernet Shield 2など)Ethernet2.h(必要であればEthernetUdp2.hも)を使用して下さい
もし、間違ったファイルを使用するとエラーが出るか、たとえコンパイルを通っても
ネットワーク関係の機能が全く使用できなくなります。

●Wiz550io用任意パッチについて
このパッチは現時点でWiz550ioまたはioShield-A専用で他の機種では効果がありません。
IDE1.7.8以降がインストールされているフォルダ"Arduino"の中の、
"libraries\Ethernet2\src"以下の同名のファイルを上書きすることで、
MACアドレスの設定が不要になります。
ソースコード内で宣言したMACアドレスは、W5500のチップに工場出荷時に内蔵された
MACアドレスで上書きされます。
毎回ソースコード内に記述していたMACアドレスの設定ミスを防ぐのに有効ですが、
利用できる機種が限定されるため、任意パッチになっています。
Ethernet Shield 2で使用した場合、メモリの消費量が少し増えるだけで
パッチを使用しない時と挙動が変わりません。

●UARDECS Ver0.5以前からの違いと移行方法
旧バージョンで開発されたスケッチは一部を書き換える必要があります

(1)インクルードするファイル名が変わりました
CCM.hとEthernetManager.hのインクルードを廃止しました
上記ファイルのインクルードを消してUardecs.hをインクルードして下さい

Arduino IDE Ver1.7.2以降で動作させる場合
旧IDE1.0.6では機種にかかわらずEthernet.hをインクルードしていましたが、
新しいIDEを使う場合、W5100搭載機種とW5500搭載機種でインクルードするファイルを
書き換える必要があります
W5100搭載機種(Ethernet Shield R3など)ではEthernet.hを使用して下さい
W5500搭載機種(Ethernet Shield 2など)Ethernet2.hを使用して下さい

(2)以下の関数が実装されました
void UserEverySecond(){}1秒間隔で実行
void UserEveryMinute(){}1分間隔で実行
旧バージョンから移行する場合、上記関数が無いとコンパイル時にエラーになるので追加して下さい

(3)以下の関数名が変更されました
void UserEvery1min()の内容はUserEverySecond()に移して旧関数は削除して下さい
void setSendP1Page()の内容はOnWebFormRecieved()に移して旧関数は削除して下さい
※setSendP1Page()では実行前にEEPROMに値が保存されましたがOnWebFormSend()では実行後に保存されます

(4)PROGMEMの付け方が変わりました
[旧バージョン] const char PROGMEM U_name[] 
[新バージョン] const char U_name[] PROGMEM
新しい書き方にしないとIDEのバージョンによりコンパイルを通らないことがあります

(5)文字列のポインタ配列にPROGMEMが付けられなくなりました
例:
const char *stringSELECT[3] PROGMEM={ <-ダメ
UECSOFF,
UECSON,
UECSAUTO,
};
上記の部分は次のようにPROGMEMを外して書いて下さい
const char *stringSELECT[3] ={
※Webインターフェース用の宣言が影響を受けます

(6)U_footnoteLetterNumberの定義が廃止されました
あってもエラーにはなりませんが、メモリが無駄になるだけです

(7)不要なdefine文が廃止になりました
旧バージョンで宣言していた
"#define NONE -1"から"#define UECSSHOWSTRING 3"までは抹消して下さい

(8)orderの最大値が30000以上になりました(E10規約準拠)
orderのみ上限値が異なります

(9)IPアドレスリセットジャンパーの挙動が変わりました
ジャンパーが有効な場合Webページのタイトルに[SafeMode]の表示が追加されます。
この時、IPアドレスは以下の値に強制的に設定されます
IPアドレス:192.168.1.7
サブネット:255.255.255.0
工場出荷時の状態(IPアドレス255.255.255.255)を検出すると
自動的に[SafeMode]に入ります。

(10)漢字表示への対応(Ver0.7以降)
Web用の表示文字列に漢字が使えます。
使い方はサンプルスケッチThermostat_JPのソースコードを参考にして下さい。

(11)起動時間のウェイト調整(Ver0.7以降)
旧バージョンでは問題なかったのにArduino IDE Ver1.7.8以降でコンパイルすると
起動時にフリーズするハードウェアがありますが、500msの待ち時間を入れることで
電源が安定するまでの時間を確保しました。
(不要な場合、UECSsetup()内のdelay(500);を削除して下さい)

(12)Network Config画面の表示追加
MACアドレスとUECSIDが表示されるようになりました

(13)受信CCMの特殊オプション(Ver0.7以降、規約外動作なのでオプション扱い)
U_orgAttribute.flags|=ATTRFLAG_ALLOW_ABRIDGE_TYPE;とすると
CCM Typeのノード種別の表記を無視し、省略形も許容するようになります。
例えばInAirTempとInAirTemp.mICを同等と見なし受け入れます

U_orgAttribute.flags|=ATTRFLAG_LOOSELY_VERCHECK;とすると
E10以外のバージョン(初期型ノードなど)のパケットも解釈可能なら受け入れます。

特殊オプションについては、UARDECSのアップデートにより仕様が変わる場合があり、
バージョン間の互換性を保証できません。

(14)ソフトウェアリセット関係(Ver0.7beta4以降)
beta3ではW5500搭載機で動作させた時、3.5日後に停止する不具合があったので修正しました
ソフトウェアリセットは不具合の原因になるため機能を削除しました

●その他の修正点
(Ver0.7以降)
文字列の処理部分を大幅に修正し、フラッシュメモリの消費量を減らしました
Web表示用の文字列生成過程を変更しメモリリークを防止するようにしました
Safemode時に発生する複数のバグを修正
異常に大きな値が記述されたパケットを弾くようになりました
約50日前に受信したパケットのvalid判定が異常になるのを修正しました
priority判定においてIPアドレスの優先順位が正しく機能していないのを修正しました
httpサーバの応答が規格に準拠していないのを修正しました
メモリリークの検出機能を追加
受信CCMを受信しない状態が24時間以上続くと他のCCMのタイムアウト時間の計測が停止するバグを修正


(Ver0.6以降)
orderの最大値が30000以上になりました(E10規約準拠)
CCM受信時のタイムアウト時間が間違っていたのを修正
指定した小数桁数と異なる値を含むCCMが正しく処理できないのを修正
IPアドレスの設定周りを修正(相変わらず設定変更に再起動は必要)
DNSとゲートウェイが正しく設定できないのを修正
NODESCANの応答時にパケットが途切れるバグを修正
Webに文字数の多い選択肢を表示するとメモリリークする問題を修正
サンプルプログラムのUECSIDの桁数が間違っていたのを修正
サンプルプログラムの更新と追加
大きなパケットを受信した時に発生するメモリリークを修正