着々と環境ロガー的なモノを作ろうと画策している今日この頃ですが。。。
データの保存先としてよく紹介されているのはSDカードやEEPROMですが、ピンの制約やデータの取り出しの不便さ等考えると、外部のWebサーバ等にデータを投げておいて、後はサーバ側で処理させるという手があるかな、と考えています。
で、Aurduino+Wifiで情報を漁っていたらArduino / The Cheapest WiFi Projectというのを見つけました。
一時期少し流行った「Fon」という無線ルータをハックしてDD-WRTというファームウエアに書き換えると比較的自由に使えるようになるので、Arduinoとシリアル接続してサーバにデータを飛ばそうというものです。
Arduinoにはイーサーネットシールドというのもありますが、結構な値段がします。Foneraなら使わなくなったのが家にも一台転がってるので、こいつを使うことにしました。
改造やファーム導入の手順は、FON まとめ wiki に詳しく書かれているので、ほぼその通りに実行。ただし、Foneraとパソコンの接続にはArduinoを仲介してTeratermで操作します。arduino @ ウィキ参照。
DD-WRTが動くようになったら「イーサネットコンバータ化」というのをやります。これはFoneraを家の無線ルータのクライアントとして動作させて外部のインターネットに出ていけるようにするためです。
これで、Arduino-(シリアル)-Fonera-(無線)-ルータ-(有線)-インターネット、へと接続できる環境が出来ました。
ついでにNTPの設定をしておくと、Foneraを結構正確な時計の代わりに使えると思います(サーバはntp.nict.jp)。
ただし、今後の実装に向けていくつか注意点があるのでメモしておきます。
- Foneraのシリアル接続は基本的に115200bpsである
stty -F /dev/tts/0 9600
でスピードを変えられるが、リブートすると元に戻ってしまう
- 共用レンタルサーバの場合、接続はtelnetではなくwgetで行う
wget -q -O - "http://www.hoge.com/xxx.cgi?xx=yy
でファイルは残らない
シリアルの速度問題はちょっとやっかいです。
こちらのアンサーによれば、SoftSerialのスピードは38400bpsが限界とのこと。
Foneraとの接続はTXとRX(ピン0と1)を使う必要がありますが、このピンはIDEからの書き込みにも使われているため、スケッチをアップロードする時にはFoneraから外す必要があります。
また、Serial.print()でデバッグ出力をPCで確認するのにも妨げになります。解決法として考えているのは、
- ArduinoとFoneraはTX/RXで接続し、デバッグ用には別のピンで別のArduinoにSoftSerial出力する
- デバッグ出力そのものをFoneraのtelnetを使ってPCに吐き出す
こちらの情報が参考になりそう