Raspberry PiとDS18B20+で温度を記録

Raspberry Pi関係のメモ。4月ころに秋葉原の秋月電子通商で温度センサーのDS18B20+を購入して、Raspberry Piにつないでいる。接続は以下のサイトを参考にした。

http://www.raspberrypi-spy.co.uk/2013/03/raspberry-pi-1-wire-digital-thermometer-sensor/

以下のような感じでセンサーの値を取得できる。”t=”から右側の値で、単位は摂氏1/1000度。

$ cat /sys/bus/w1/devices/28-000003da9297/w1_slave
b5 01 4b 46 7f ff 0b 10 a3 : crc=a3 YES
b5 01 4b 46 7f ff 0b 10 a3 t=27312

cronで以下のようなPythonのスクリプトを実行し、時刻ごとの気温と、ついでにCPU温度を記録したタブ区切りのログを記録している。今見ると正規表現とか使う必要なかったな。

#!/usr/bin/python 

from datetime import datetime
import re

device_name = '28-000003da9297'
w1_path = '/sys/bus/w1/devices/' + device_name + '/w1_slave'
temp_log = '/home/daigo/log/temp_log.txt'

# Getting CPU temperature
f = open('/sys/class/thermal/thermal_zone0/temp', 'r')
temp_string = f.read()
f.close()

cpu_temp = float(temp_string) / 1000

# Getting value from DS18B20+
# $ cat /sys/bus/w1/devices/28-000003da9297/w1_slave
# b5 01 4b 46 7f ff 0b 10 a3 : crc=a3 YES
# b5 01 4b 46 7f ff 0b 10 a3 t=27312

f = open(w1_path, 'r')
w1_data = f.read()
f.close()

m = re.search('(?<=t=).+', w1_data)
temp_string = m.group(0)
w1_temp = float(temp_string) / 1000

ct = datetime.now()

f = open(temp_log, 'a')
s = ct.strftime("%Y/%m/%d %H:%M:%S") + "\t"
s += str(cpu_temp) + "\t"
s += str(w1_temp) + "\n"
f.write(s)
f.close()

作成されるTSVファイルは以下のような内容。「日時」「CPU温度」「温度センサーの温度」の間はタブ。

$ head temp_log.txt
datetime CPU DS18B20
2014/11/15 17:20:02 42.236 23.25
2014/11/15 17:25:02 42.236 23.375
2014/11/15 17:30:02 42.774 23.5
2014/11/15 17:35:02 42.236 23.5

これをグラフ化するところまで自動化して、家のネットワーク内であればApache越しに見れるようにしよう、、と思ったのだが、Raspberry PiのRはバージョンが古く(2.15.1)、使いたかったggplot2が動かない。

仕方がないから、TSVファイルだけをApache越しに見えるようにして、MacのRでグラフを作成した。

Temperature Log

2つの山があるが、これはエアコンのスイッチを入れたタイミング。天井に近い場所にあるので如実に影響を受ける。

使用したRのコードは以下。

library("ggplot2")                                                                                                     

d <- read.delim("/Users/daigo/temp/temp_log.tsv")
d$datetime <- as.POSIXct(d$datetime)
p <- ggplot(d, aes(d$datetime)) +
geom_line(aes(y=d$CPU, colour="CPU"))+
geom_line(aes(y=d$DS18B20, colour="DS18B20"))+
scale_colour_manual("Direction", values=c("CPU"="red", "DS18B20"="blue"))+
ylab("Temperature") +xlab("Datetime")

print(p)

ggsave(file="out.png", plot=p, height=3.0)

Raspberry Pi側のRのバージョンを3.xに上げようと、APTのリポジトリを色々追加してみたり、ソースからコンパイルしようとしたのだが上手くいかず。

とりあえず今日はここまで。

Advertisements

One comment

  1. Pingback: 2014の振り返り | dgakane's Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s