mbedでMilkcocoaのクライアントデバイスを作ってみました。
結果的には、とりあえず動く、ものは簡単に作れましたが、RaspberryPIで作った物と同じようなスペックにしようと思うと、結構色々と考える必要がある、という感じです。
作成中
仕様
以前RaspberryPiで作ったデバイスを置き換える、ということをターゲットとしました。そのため、以下のようなスペックが必要となります。
- RTCによりデバイス自身によってデータのタイムスタンプを押す
- 後処理の簡単のためデータ構造(JSON)を階層構造にする { “Readings”:{ “temp”:”12.5”,”hum”:”60.0”},”State”:{“Location”:”12.533443-45.00121”,”Power”:”10.5”}}のような感じ
使うmbedデバイス
今回はEthernetが標準装備である事が必須となります。また、仕事も多いので比較的メモリの大きい物が必要となる可能性、販売から時間が経っていて実例の多い物、という条件から FRDM-K64Fを選びました。
チャレンジするならNUCLEO-F207ZGでやってみたい所ですが、まずは動かす事を優先にしました。
RTCの用意
あまり意識していませんでしたがFRDM-K64FにはRTCが用意されています。しかし、バックアップが無いので、電源を入れるたびにリセットされてしまいます。
そのため、RTC用の電源端子へ3.3Vを供給しているラインを切って、ダイオードを入れ、その先(CPU側)に電気二重層コンデンサを入れるようにしました。
これで、電源が入っているときにコンデンサに蓄電し、電源がなくなったら、溜まった電荷でRTCを維持できます。
で、どれぐらい持つか、というと。。。。
Vbatの最低電圧は1.5Vぐらいというふうにspec sheetに書かれていたので、電源電圧との差(正確には電源電圧からダイオードのフォワード電圧を引いた電圧、2.6Vぐらい)から大体、電圧差1V、コンデンサの容量は1Fなので、取り出せる電荷は1クーロン。
Vbatの電流は1μA程度なので、10^6秒程度バックアップできる設計になります。大体280時間ぐらいですね。
コンデンサには大きなエネルギが溜まっていますので、金属でショートさせないように注意してください。ショートさせると「パンっ!」と大きな音とともに火花が出ます。端子はテープなどで保護しておいた方が良いでしょう。
動作の確認
サンプルでNTPクライアントを入れて、時間を設定して、電源を切って入れてみてRTCが変化しないことを確認しよう、と思ったのですが、うまい事NTPクライアントがコンパイルできないんで諦め。
単純に電源を入れてRTCの値をチェックして、電源を切ってしばらく置いて、再度電源を入れてRTCの値をチェックする、という方法で確認しました。
とりあえず、10分ぐらいの電源offには耐えました。