Raspberry Pi と温度センサーで自宅の温度を可視化

この記事は Sansan Advent Calendar 2015 の 18日目の記事です。

Raspberry Pi と ADT7410 温度センサーで自宅の温度を測り、 focusligt でグラフにした。
動機は 2年くらい前に買ったまま放置してた Raspberry Pi に備わっている GPIO のことがずっと気になっていたから。

用意したもの

工程

まず Raspberry Pi の初期設定をした。
詳細は割愛するが、RASPBIAN JESSIE の最新版を Download Raspbian for Raspberry Pi からダウンロードして SD に焼き、本体を起動して設定。
公式のインストールガイドを参考にすれば問題ないと思われる。

次に、温度センサーをブレッドボードにつなぐために、付属のピンヘッダをはんだ付けする。
小さいので、ブリッジしないように注意する。(15年ぶりくらいにやったけど意外と出来た)

温度センサーを下記のようにブリッジボード経由で GND, VDD, SDA, SCL につなぐ。
どのピンが何なのかは こちらで確認。

そして /etc/modulesi2c-bcm2708 を追記する。

pi@raspberrypi:~ $ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
i2c-bcm2708

/boot/config.txt を編集。

pi@raspberrypi:~ $ sudo vim /boot/config.txt

device_tree=bcm2708-rpi-b.dtb
device_tree_param=i2c1=on
device_tree_param=spi=on

再起動。

pi@raspberrypi:~ $ sudo reboot

これでデバイスとつながった。

pi@raspberrypi:~ $ sudo /usr/sbin/i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

温度が取れているようだ。

pi@raspberrypi:~ $ sudo i2cdump -y 1 0x48
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c    ????????????????
10: 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c    ????????????????
20: 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 00    ???????????????.
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

あとは、 ruby の i2c-devices という gem を利用して温度を取得するスクリプトを用意する。
ちなみに ruby はデフォルトで入っている。

pi@raspberrypi:~ $ ruby -v
ruby 2.1.5p273 (2014-11-13) [arm-linux-gnueabihf]

pi@raspberrypi:~ $ sudo gem install i2c
pi@raspberrypi:~ $ sudo gem install i2c-devices

pi@raspberrypi:~ $ vim adt7410.rb

下記のような簡単なスクリプト。

#!/usr/bin/env ruby

require 'i2c/device/adt7410'
require 'i2c/driver/i2c-dev'

device = I2CDevice::ADT7410.new(driver: I2CDevice::Driver::I2CDev.new('/dev/i2c-1'), address: 0x48)

puts device.calculate_temperature.round

実行結果。

pi@raspberrypi:~ $ ruby adt7410.rb
26

この数値を 5分おきに focusligt に送るように crontab に設定する。

pi@raspberrypi:~ $ crontab -l
*/5 * * * * curl -d number=`ruby adt7410.rb` http://localhost/api/myhome/living/temperature >> /home/pi/cron.log 2>&1

ブラウザから見てみると。

ちゃんと取れてる!

まとめ

Raspberry Pi と adt7410 で室内の温度を測ってグラフにした。
これで外出先から自宅の温度が確認できるようになった。
IRkit と組み合わせることで、外出先からもエアコンの消し忘れに気づき、電源を OFF にすることができる。
ハードウェアを使って何かするというの、かなりおもしろいものだなと思った。これからも電子工作してきたい。

参考