ブログ

κυσο βλογ

Arduino yunで放射線センサのデータをxivelyとM2Xにアップロードする

xivelyだけでは不安

xivelyはたまにサービスが止まるので、センサデータをxivelyだけに上げるのは良いアイディアとは言えません。M2Xにも同時に上げてデータロストに備えましょう。

yunのプログラムスペースはやはり小さい

複数クラウドへの同時データアップロードの例として、pocket geiger type5の測定データをarduino yunでxivelyとM2Xの両方に上げるプログラムを書いてみました。当初はxivelyと同様にarduino側のProcessクラス経由のcurlを利用してM2Xにもアップロードしようと試みましたが、パラメータの文字列を用意するためにメモリが足りなくなって断念し、結局linux側のシェルスクリプトにM2Xへのアップロード機能を移しました。また、放射線データ保存用の配列も、デフォルトでは200要素ありましたが、150まで減らしてやっとうまく動作しました。しかしここまで苦労するなら素直に全部linux側でやってしまったほうが良いような気もします。

つかいかた

スケッチの下の方でコメントになっているシェルスクリプトを、yunの/root/にm2x_up.shという名前で作成して実行権限を付与します。スクリプト内の

M2X_DEV_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
M2X_API_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
M2X_RADIATION='radiation' # radiation stream
M2X_RAD_ERROR='radiation_error' # radiation error stream

を自分用のM2Xの適切な文字列に変更します。

次にスケッチ内の

#define APIKEY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
#define FEEDID "000000000"

を自分用のxivelyの適切な文字列に変更してyunにアップロードします。うまくいけば一分に一回の頻度でxivelyとM2Xの両方に放射線センサのデータが上がります。

データ例

以下の様な感じで、両方共アップロードがうまくいっているようです。

f:id:XX-Prime:20150426221329p:plain

f:id:XX-Prime:20150426221340p:plain

これでどちらか(というかxively)が止まっても安心です。

コード

まとめ

シェルスクリプトjsonデータの構築部分がどうしてもうまく行かず、3日くらい試行錯誤したことは人として恥ずべき過去です。