microSD と WebPost に対応!

 本記事には古い情報が含まれている場合があります。まとめページ を作成しましたので併せて御覧下さい。


 テント背負ってビール飲みに行ってきたような連休の過ごし方でしたけど、致命的なバグは潰れたはずぽいので、とりあえず公開いたします。


20110926版 ファームウェア一式 こちらの20110928版 をお使い下さい。



20110920版との機能比較(オリジナルと20110920版の違いはこちらを参照ください)

  • WebPost サービス(任意の Web サイトへデータを Postする機能)を追加
  • Logging サービス(ログ記録する機能)において、内蔵フラッシュディスクのほか microSD に対応
  • 起動直後のほか約24時間おきにNTPから時間取得
  • 出力できる項目が増加(UTC時刻・稼働時間・総カウント数などなど)
  • Twitter/Pachube/Logging/Webpost の各サービスについて初回の遅延起動をサポート
  • Twitter/Pachubeの内部ロジックを全面的に再構築
  • PC接続時に出力されるログの表示整形およびエラー番号の詳細表示(HTTPのレスポンスコードが見えます)


env.ini の仕様赤字は今版で追加された項目)

項目名 説明 省略時の挙動 制限
gpsBaud GPSとの通信速度 GPS未利用 4800/9600等の数値
ntpServer 時計合せに使用するNTPサーバー NTP未利用 最大30文字
twitter Twitter設定ファイル Twitterサービス未利用 最大30文字
pachube Pachube設定ファイル Pachubeサービス未利用 最大30文字
logging Logging設定ファイル Loggingサービス未利用 最大30文字
webpost WebPost設定ファイル WebPostサービス未利用 最大30文字
ip IPアドレス DHCPを利用 xxx.xxx.xxx.xxx
netmask サブネットマスク ip指定時は省略不可 xxx.xxx.xxx.xxx
gateway デフォルトゲートウェイ ip指定時は省略不可 xxx.xxx.xxx.xxx
dns 参照DNSサーバー ip指定時は省略不可 xxx.xxx.xxx.xxx
enableMac MACアドレス利用の有無 未利用 0 または 1
gmtype GM特性ファイル 省略不可 最大30文字
sound ブザー鳴動フラグ 1:放射線検知の度に鳴動 0 または 1
timezone 標準時刻からの誤差 省略不可 数値のみ
init_stabilize_time 起動後に計測を待つ時間(秒数) 30 数値のみ
cpm_array_max 移動平均の短時間分数 10 1〜10
long_cpm_array_max 移動平均の長時間分数 60 1〜60


Twitter 設定ファイルの仕様

項目名 説明 制限
id もしくは ID TwitterアカウントのID 最大60文字
pass もしくは PASS SuperTweetのパスワード 最大60文字
format ツィート時の書式(使用できるパラメータは後述) 最大140文字
interval Twitterサービスの起動間隔(分) 数値のみ
delayStart Twitterサービスの起動遅延時間(分) 数値のみ


Pachube 設定ファイルの仕様

項目名 説明 制限
apikey もしくは PACHUBE_APIKEY PachubeのAPIKEY 最大60文字
feedid もしくは PACHUBE_FEEDID PachubeのFEEDID 数値のみ
usv0 直近10分間のuSV/hをFeedする場合の項目ID 数値のみ(未使用時は-1)
nsv0 直近10分間のnSV/hをFeedする場合の項目ID 数値のみ(未使用時は-1)
cpm0 直近10分間のcpmをFeedする場合の項目ID 数値のみ(未使用時は-1)
usvlong0 直近60分間のuSV/hをFeedする場合の項目ID 数値のみ(未使用時は-1)
nsvlong0 直近60分間のnSV/hをFeedする場合の項目ID 数値のみ(未使用時は-1)
cpmlong0 直近60分間のcpmをFeedする場合の項目ID 数値のみ(未使用時は-1)
interval Pachubeサービスの起動間隔(分) 数値のみ
delayStart Pachubeサービスの起動遅延時間(分) 数値のみ


Logging 設定ファイルの仕様

項目名 説明 制限
path ファイル名の書式(使用できるパラメータは後述) 最大60文字
format ログ記録時の書式(使用できるパラメータは後述) 最大140文字
interval Loggingサービスの起動間隔(分) 数値のみ
delayStart Loggingサービスの起動遅延時間(分) 数値のみ


WebPost 設定ファイルの仕様

項目名 説明 制限
url POST 先のサイト 最大250文字
interval WebPostサービスの起動間隔(分) 数値のみ
delayStart WebPostサービスの起動遅延時間(分) 数値のみ


書式に使用できるパラメータ

項目名 説明 出力例 WebPost対象
%SEQ% 初回起動時からの連番 00000001 毎回
%DATE% 日付(timezoneで補正後) 2011/09/20 ×
%TIME% 時刻(timezoneで補正後) 12:24:31 ×
%DATETIME% 日時(timezoneで補正後) 2011/09/20 12:24:31 毎回
%YEAR% 日付の西暦年 2011 ×
%MONTH% 日付の月 09 ×
%DAY% 日付の日 20 ×
%HOUR% 時刻の時 12 ×
%MINUTE% 時刻の分 24 ×
%SECOND% 時刻の秒 31 ×
%U_DATE% 日付(UTC) 2011/09/20 ×
%U_TIME% 時刻(UTC) 03:24:31 ×
%U_DATETIME% 日時(UTC) 2011/09/20 03:24:31 毎回
%U_YEAR% 日付の西暦年 2011 ×
%U_MONTH% 日付の月 09 ×
%U_DAY% 日付の日 20 ×
%U_HOUR% 時刻の時 03 ×
%U_MINUTE% 時刻の分 24 ×
%U_SECOND% 時刻の秒 31 ×
%CPM% 直近10分間のcpm値 19 毎回
%uSV% 直近10分間のμSV/h値 0.118 毎回
%L_CPM% 直近60分間のcpm値 17 毎回
%L_uSV% 直近60分間のμSV/h値 0.105 毎回
%LONGITUDE% 正確な経度 138.728635 毎回
%LATITUDE% 正確な緯度 35.360444 毎回
%R_LONGITUDE% アバウトな経度 138.73 ×
%R_LATITUDE% アバウトな緯度 35.36 ×
%ALTITUDE% 高度(ジオイド高) 3776 毎回
%SPEED% 速度(km/h) 180 毎回
%UPTIME% 稼働時間(秒) 45514 毎回
%F_COUNT% 起動してからの累積カウント数 65241 毎回
%MAC% MACアドレス
(enableMac=1のとき)
0102030f0e0d 毎回
%VERSION% ファームウェアのバージョン 20110926 初回
%GM_CARIB% ガイガー管の特性 129.032 初回
%GM_VOLT% ガイガー管の特性 380 初回
%GM_OFFSET_uSV% ガイガー管の特性 -0.032 初回
%GM_CARIB_CPM0% ガイガー管の特性 12 初回
%GM_CARIB_uSV0% ガイガー管の特性 0.061 初回
%GM_CARIB_CPM1% ガイガー管の特性 28 初回
%GM_CARIB_uSV1% ガイガー管の特性 0.185 初回

※WebPost対象「初回」は起動して初回1回のみ、「毎回」は interval で設定した間隔の度に、それぞれ送信


 プライバシーポリシー?として、個体を識別できる記号(MACアドレス)の送出に関しては任意で設定できるようにしました。
 若松ガイガー(というか mbed をベースにしたネットガイガー)を複数機お持ちの方には MAC アドレスによる個体識別は便利だろうと思います。


 経緯度の取り扱いに関しては悩むところですが、ハードウェア的に個体を識別するものではないという判断で WebPost する対象といたしました。
 将来のバージョンで、WebPost する情報から経緯度だけを外すオプションを作るかもしれません。


(追記)
 20110928版にて位置情報を WebPost するかどうかフラグ追加しました。
 未指定のデフォルトは「位置を送信しない」です。
 位置情報も送信する際には WebPost 設定ファイルの中で enableGPS=1 と書いて下さい。


既知の問題(今後の課題)

  • Logging サービスでディスクの残量チェックを行っていない
  • SDHC(4GB〜)には未対応(対応させる方法もあるらしいので引き続き調査)
  • SDカードが入ってない状態でSDカードに書き込みするとフリーズする (fopenの中で止まってる・・・ナンデ?)
  • Twitter/Pachube/WebPost で、それぞれ複数アカウントを使ったマルチ送信に対応したかったけどメモリー不足で挙動不審になったため取り止め


 個人的な目玉は WebPost サービスです。測定値を任意サイトへ HTTP-POST 形式で送信する仕組みです。
 自宅サーバーなどお持ちの方にとっては、超待望のサービスではないのかな、と。
 いったん自宅サーバーで受けて情報を加工して別のサービスへ転送させるなど、mbed のチープなメモリー空間に制約されない、ものすごい応用ができるはず。。


 当初、Post する内容を選ぶような構想もありましたが、中で使ってる公開 HTTPClient ライブラリの HTTPmap オブジェクトがメモリー食い過ぎ(std::string なんて気軽に多用するなよ!)で、自由に設定できるようにしても組み合わせてによってフリーズ多発になること必至(フリーズさせない組み合わせを見つけ出すのが大変)なので、予め必要と思われるもの、ことごとく固定で WebPost する設計にしました。
 不要な情報は受信側で切り捨てて下さいませ。


 「初回のみ送信」という印がありますが、全項目を一括で Post しようとするとメモリー不足で固まるので、「稼働中に変動しない項目」は最初に1回だけ Post するようにしています。


 受信側で情報をくっつけて処理してください。
 複数 mbed を同じサイトへ飛ばしている時ならば、enableMac=1 で MAC アドレスを通知にして、受信側で MAC アドレスをキーにくっつけて下さい。


 試せる Web サイトがないって方は、以下の評価(お試し)サイトをご利用下さい。
 私の友人が作成されたサイトですが、出来が未だ中途半端ぽいので実証実験する程度の利用に留めるのが吉だと思います。(ガイガーの数値には依存してなくて温度や湿度など数値ものならば、何を Post しても大丈夫らしいです)

1.http://www.logoole.etr.jp/entry/ から APIKEY を取得
2.WriteKey と ReadKey を記録

 仮に

WriteKey 6D46_qUKnEqOGCsfXYRz2g
ReadKey rjaIIrzXLUig09rNfnxCrA

が画面に表示されたとして話を進めます。

3.WEBPOST.CFG の URL=http://api.logoole.etr.jp/6D46_qUKnEqOGCsfXYRz2g.post とする。
4.env.ini で #webpost のコメント # を外す
5.若松ガイガーを再起動(設定ファイルを読み込ませる)
6.しばらく放置(どれくらい放置すべきかは delayStart や interval の設定値による)
7.別パソコンで Post されたログを見る

表形式で見る http://api.logoole.etr.jp/rjaIIrzXLUig09rNfnxCrA/datatable.html
グラフで見る http://api.logoole.etr.jp/rjaIIrzXLUig09rNfnxCrA/L_uSV.png

※L_uSV.png → L_CPM.png にすると CPM なグラフが出る

 なんかショボすぎますが、いちお連休3日間の成果だそうです。
 「まだPachubeを超えてねぇぞ」って伝えてあります。
 今後のバージョンアップに期待しましょう。



 いきなり microSD 対応ったって、あの表面実装スロット は使いづらいように思います。
 私の場合、外箱のネジは常に外した状態で、100均のマジックテープバンドで蓋を止めてますので、使いやすい別の場所に microSD スロットを付けることにします。


http://dl.ftrans.etr.jp/?7212871ce30c40b5b09fa35415893c6527a712f9.png


 microSD スロットは スイッチサイエンスの でも マルツの でも、それ以外でも好きなものをお使い下さい。


http://dl.ftrans.etr.jp/?858d9e7751d449e2b2866d8956d357017c264be2.jpg http://dl.ftrans.etr.jp/?48c846400e1c4909a47d5372da6b30977f34ff36.jpg


 ほとんどヤケクソな取り付け位置ですが(笑)
 GM管のアノード側は 400V 近い高電圧が来てますので、絶縁だけはくれぐれも厳重に。速攻でパーツを破壊します。
(液晶の上の余地も基板上は高圧生成回路ですから、厳重な絶縁必須です)


 あれ、右のは?


 プログラムを作るとき用の mbed マシンを新しく調達しました!
 mbed本体(5200円)オレンジボード完成品(3900円)リチウム電池ホルダー(50円)です。
 オレンジボード基板のみ(1400円) でも良かったのですけど、LANコネクタとか小物を秋月に注文すると大して変わらない値段になってしまうので・・・
 GM管は繋がってないので cpm 数は増えないですけど、とりあえずデバッグには十分つかえます。


 17番ピンの負論理パルス (←訂正、オシロで見たら正論理でした) をカウントしているだけなので、ここに別の管を繋げば簡単にガイガーカウンターに出来そうです。
 信号取り出しまで出来た自作ガイガーカウンター があるので、ソフト作りが一段落したら、17番ピンに繋いでネットガイガーに仕立てようと思います。 


 ということで、新しい mbed を買って早速 GT-723F を繋いで分かったことが。
 捕捉の邪魔をするノイズ源は mbed 本体でした!(高圧生成部かもしれないが)
 CPU は 96MHz と、一昔前のパソコン並の速度ですから、それなりに盛大にノイズも出すのでしょう。


 何とかシールドしたいところです。。


追記(2011/09/28)
 バグ修正および軽微な機能追加した20110928版を公開しました。


追記(2011/10/25)
 オレンジボードのmbedの17番ピンに自作ガイガー管を繋いだ「互換機」を作ってみました。