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

Raspberry Pi と ADT7410 温度センサーで自宅の温度を測り、 focusligt でグラフにした。

用意したもの

工程

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

次に、温度センサーをブレッドボードにつなぐために、付属のピンヘッダをはんだ付けする。
小さいので、ブリッジしないように注意する。

温度センサーを下記のようにブリッジボード経由で 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

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

ちゃんと取れてる!

参考