Arduinoから取得した情報をMackerelで見る

ゴールデンウィーク暇すぎて,以前衝動買いしたArduinoで何か作れないかと思い立ち, 部屋の温湿度を見られるようにしようということになりました.

TL;DR

github.com

Arduino→PC

使用した部品は以下の通りです.見た限りDHT11以外はArduinoをはじめようキットに含まれているようなので,そっちを買うのが手っ取り早いです. (なお,僕はこのキット日本橋にて9000円で買ったのですが,同等品がAmazonにて4000円以下で売られていることをTwitterで教えられめっちゃ不機嫌になったのでAmazonで買うことをおすすめします)

  • Arduino Leonardo
  • USBケーブル
  • 温湿度センサ DHT11
  • カーボン抵抗 10kΩ
  • ブレッドボード
  • ジャンプワイヤ 4本くらい

Arduinoと部品を以下のような感じで繋いでいきます.

f:id:spring_raining:20160504212213p:plain

https://www.arduino.ccからAuduinoのIDEをインストールしたら,「スケッチ>ライブラリをインクルード>ライブラリを管理」から,「DHT sensor library」を検索してインストールします.

ライブラリをインストールしたら,早速Arduinoで実行してみます. GitHubに上げているwatcher.inoIDEにコピペしてみてください.

ArduinoをUSBで接続したあと「ツール>シリアルポート」を確認し,接続したあとに現れた項目を選択します.また「ツール>マイコンボード」でArduino Leonardoを選択します.そして「スケッチ>マイコンボードに書き込む」を実行すると,Arduinoにプログラムが書き込まれます.

f:id:spring_raining:20160504230122p:plain
書き込みに失敗すると下の欄に真っ赤な文字でヴァッとエラーが出力される

書き込みが終わったら正しく動作しているか確認してみましょう.「ツール>シリアルモニタ」を開くと,Arduinoから送信されるシリアル通信を表示できます.(ボーレートは9600bpsとしておきます)

f:id:spring_raining:20160504214816p:plain

PC→Mackerel

Arduino側が完成したら,常時起動してArduinoからの信号をMackerelに送信するPCを用意します*1.今回は自室の片隅で動いている録画サーバーにぶっ込むこととします.ちょうどこのサーバーでは既にMackerelを導入していたので好都合でした.

PC側で実行するスクリプトは,シリアル通信を受信して標準出力を行うだけなので,各自お好きな言語で書いたらいいと思います.今回はJavaScriptで書きました.作成するスクリプトの出力は,以下のページの仕様に従うようにします.

mackerel.io

具体的には,プログラムを実行すると,{出力項目の名前}\t{出力項目の値}\t{UNIX時間}という行を表示したい項目(温度,湿度など)の行数だけ出力するようにします.

また,環境変数MACKEREL_AGENT_PLUGIN_METAに1が設定された状態で実行すると,1行目に# mackerel-agent-pluginを, 2行目からは設定情報を含むJSON形式のテキストを出力するようにします.

$ node main.js
odango.humidity.my_room 19.00   1462368181053
odango.temperature.my_room  22.95   1462368181053

$ env MACKEREL_AGENT_PLUGIN_META=1 node main.js
# mackerel-agent-plugin
{
  "graphs":{
    "odango.temperature":{
      "label":"Temperature",
      "unit":"float",
      "metrics":[
        {"name":"my_room","label":"My Room"}
       ]
    },
    "odango.humidity":{
      "label":"Humidity",
      "unit":"percentage",
      "metrics":[
        {"name":"my_room","label":"My Room"}
      ]
    }
  }
}

もし僕の書いたコードをそのまま使うのであれば,GitHubからコードをcloneしたあとmetrics.sample.jsondefs.sample.jsonをそれぞれ metrics.jsondefs.jsonという名前でコピーし,適宜JSONの内容を書き換えて下さい.

スクリプトが完成したら,Mackerelの設定ファイル(/etc/mackerel-agent/mackerel-agent.conf)に以下の内容を追記します.

[plugin.metrics.arduino]
command = "node /path/to/script/main.js" # 作成したスクリプトを実行するコマンド

忘れずにArduinoを接続したら,mackerel-agentを再起動してmackerel.ioを見てみましょう.1分ごとにグラフが伸びていくはずです.

f:id:spring_raining:20160504225248p:plain
17:30頃だけ湿度が上がっているのは,温湿度計に息をハーッってやったせいです

所感

電子工作ができなくても,ArduinoとMackerelどちらもシンプルな仕組み&ネット上に情報がたくさんあるので,拍子抜けするくらい簡単に終わります.興味のある方はぜひ.

ただ,Mackerelの無料アカウントでは1日しか情報を表示できないのが残念.せめて7日だけでも…

Arduinoをはじめよう 第3版 (Make:PROJECTS)

Arduinoをはじめよう 第3版 (Make:PROJECTS)

*1:「常時起動しているPC」のハードルが高いようなら,Raspberry Piを使うのもいいでしょう