Raspberry Pi と温度センサーで自宅の温度を可視化
Raspberry Pi と ADT7410 温度センサーで自宅の温度を測り、 focusligt でグラフにした。
用意したもの
- Raspberry Pi Model B
- ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール
- ブレッドボード BB-801
- ブレッドボード・ジャンパーコード(オス-メス) 15cm(黒) x 4本
- goot 一般電気用はんだこて KS-30R
- goot 高密度集積基板用はんだ SD-60
工程
まず Raspberry Pi の初期設定をした。
詳細は割愛するが、RASPBIAN JESSIE の最新版を Download Raspbian for Raspberry Pi からダウンロードして SD に焼き、本体を起動して設定。
公式のインストールガイドを参考にすれば問題ないと思われる。
次に、温度センサーをブレッドボードにつなぐために、付属のピンヘッダをはんだ付けする。
小さいので、ブリッジしないように注意する。
温度センサーを下記のようにブリッジボード経由で GND, VDD, SDA, SCL につなぐ。
どのピンが何なのかは こちらで確認。
そして /etc/modules
に i2c-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
ブラウザから見てみると。
ちゃんと取れてる!