RaspberryPiとDS18B20で温度を計ってdygraphsでグラフ化

少し前ですが、あまりにも暑かったので、暑さ自慢(不幸自慢)するために部屋の温度を計ることにしました。Raspberry Piで。
(あの日以降、北海道は割と寒いですが・・・)

RaspberryPiとDS18B20を使って温度を計る

1. 電子回路はよくわからないので、色々と参考にしながらDS18B20をRasbperryPiにつなぎます。

Raspberry Piブログ : [コラム] 第9回『1-wire温度センサーで部屋の温度を測定しよう』

2. 接続したら/etc/modulesに以下を追加して保存します。::

[code]
w1-gpio
w1-therm
[/code]

3. 再起動します。

4. /sys/bus/w1/devicesの中に接続したデバイスのIDでリンクができているので、その中のw1_slaveをcatします。

5. 温度が表示されます。

t=30937のところが温度で、1/1000にして摂氏30.937となります。

データを定期的に記録する

温度が取得できることがわかったので、定期的に温度を記録します。
t=30937の部分を取り出してファイルに書くだけの簡単なお仕事です。

t=30937の部分を取り出す処理

これで温度だけを記録できるようになりました。
あとは時刻も取得して、CSVの1行として出力します。

temp.py

これは、次のように実行すると時刻と温度がカンマ区切りで出力されます。

これをcronを使って定期的に実行します。

cronの設定を編集します。

これで10分おきに温度を記録できるようになりました。

記録した温度のデータをグラフにする

取得したデータはtemp.csvとして残っていますが、エディタでしか見れませんので、ウェブページからグラフで確認できるようにします。

D3.js(C3.js)を使って描画してはみたものの、
そんなにすごいことができなくてもいいので、dygraphs.com を使うことにしました。

dygraphsとは

dygraphsは高速かつ簡単にグラフを作成できるライブラリです。
さくっとグラフを描画するだけなら、D3.jsよりも簡単です。

1. dygraphs.com/download.htmlからdygraph-combined.jsをダウンロードします。

2. 次のようなhtmlを作成します(dygraph-combined.jsとtemp.csvはstatic配下に保存してあります)。

4. これをブラウザで確認すると次のようなグラフが表示されます。

Temperature at my work space

なんとなく部屋の温度がわかっていいですね。

しかし思ってたより暑くはなく、不幸自慢できませんでした。

まとめ

raspberry piとDS18B20ですごく簡単に温度を計ることが、また温度のデータをグラフ化することができました。
しかし、このままではCSVがどんどん大きなサイズになり、読み込みが遅くなりそうです。
遅くなったらsqlite3あたりにつっこんで、日付で抽出できるようにすればよいですね。

温度がわかるようになると今度は湿度もほしいなぁ・・・
あとこれをpebbleにも表示できるようにしたいなぁ・・・