Raspberry Pi(LEMP+RHT03+GoogleChartAPI)で温度・湿度をグラフ化してみた。その1
- 2015/07/26
- 07:34

IRKitでエアコン連動したら室温を把握したくなってきた
先日の記事:IRKitを使って日立のエアコンをAndroidで操作してみた。
でエアコンが操作できるようになったので大変便利です。
しかし、室温を知る方法がないので作ってみることにしました。
Raspberry Piを使ってみる
GPIOに色々接続できる便利な小型PC「Raspberry Pi」を使ってみることにしました。
内容はとっても簡単です。
全てRaspberry Piで完結します。
1.Pythonを使ってセンサーから温度・湿度を取ります。
2.LEMP環境(Linux+nginx+MySQL+PHP)を作ります。
3.Pythonを使ってMySQLに登録するようにします。
4.cronで自動登録します。
5.FuelPHPでREST APIを作ります。
6.Google Chart APIで線グラフを作ります。
準備したもの
・Raspberry Pi Model B(2011.12 Rev2) 1台
・温度湿度センサー RHT03

・普通のブレッドボード

・固いジャンパワイヤ (ブレッドボード用)

・ジャンパワイヤ(オス~メス)

・カーボン抵抗(炭素皮膜抵抗) 1/4W 10kΩ 1本
手持ちのメモリ512MB版のRaspberry Pi Model B(2011.12 Rev2)っていう旧式を使いました。
Samba4を入れてActiveDirectoryを動かしたりしていたものをそのまま使いました。
いまは Raspberry Pi 2

![]() |

温度湿度センサーにRHT03ってのを買いましたが、
AM2302、DHT22という型名と同等品のようです。
![]() |

配線
線を切るのも面倒なのでそのままで使いました。
GPIO配線は青GND、黄GPIO4、黒3.3vって感じです。
プルアップ抵抗のみ。簡単!
参考:Temperaturmessung mit dem Raspberry Pi

温度・湿度の取得
既にスクリプトがあるので有難く使わせていただきます。
$ git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
Cloning into 'Adafruit-Raspberry-Pi-Python-Code'...
remote: Counting objects: 644, done.
remote: Total 644 (delta 0), reused 0 (delta 0), pack-reused 644
Receiving objects: 100% (644/644), 189.38 KiB | 222 KiB/s, done.
Resolving deltas: 100% (301/301), done.
動かします。
GPIO操作にはsudoで動かす必要があります。
Adafruit_DHTの引数はセンターのタイプ2302、GPIO4の4です。
$ cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver
$ sudo ./Adafruit_DHT 2302 4
Using pin #4
Data (40): 0x2 0x3d 0x1 0x23 0x63
Temp = 29.1 *C, Hum = 57.3 %
温度と湿度が取れました!
温度・湿度の取得の自動化テスト
とりあえず、timeでぐるぐる回してみました。
DBに登録する項目を想定して正規表現で数値だけ取得します。
参考:Adding a DHT sensor to the Raspberry Pi
$ nano temp.py
# coding:utf-8
#!/usr/bin/env python
import time
import re
import subprocess
temp_c = 0
temp_f = 0
def read_dht22( PiPin ):
global temp_c, temp_f
output = subprocess.check_output(["./Adafruit_DHT", "2302", str(PiPin)])
matches = re.search("Temp =\s+([0-9.]+)", output)
if ( matches ):
temp_c = float(matches.group(1))
matches = re.search("Hum =\s+([0-9.]+)", output)
if ( matches ):
temp_f = float(matches.group(1))
return
while True:
read_dht22(4)
ts = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print '{0},{1:.2f},{2:.2f}'.format( ts, temp_c, temp_f )
time.sleep(15)
$ sudo python temp.py
2015-07-24 01:21:48,29.30,58.50
2015-07-24 01:22:03,29.30,58.50
2015-07-24 01:22:19,29.30,58.60
2015-07-24 01:22:34,29.30,58.60
2015-07-24 01:22:50,29.30,58.10
2015-07-24 01:23:06,29.30,58.00
2015-07-24 01:23:21,29.30,57.60
2015-07-24 01:23:37,29.30,57.60
2015-07-24 01:23:52,29.30,57.20
2015-07-24 01:24:18,29.30,56.80
2015-07-24 01:24:33,29.30,56.80
2015-07-24 01:24:49,29.20,56.60
2015-07-24 01:25:04,29.20,56.50
2015-07-24 01:25:20,29.10,56.20
問題なく取れていますね。
同じような位置・高さにおいた温度・湿度表示付の電波置時計 SEIKO SQ422W と比較してみました。
SQ422W

ズレはありますがわりと近い値ですね。
機種 | 温度(℃) | 湿度(%) |
---|---|---|
RHT03![]() | 29.00 | 58.70 |
SQ422W![]() | 28.30 | 56.00 |
![]() |
SEIKO CLOCK (セイコークロック) 掛時計 置時計 兼用 マンスリーカレンダー機能 六曜表示 デジタル 電波目ざまし時計 SQ422W |

これで「1.Pythonを使ってセンサーから温度・湿度を取ります。」は完了です。
次回に続きます。

- 関連記事
-
- IRKit の LEDの光 と Cloud Serverへのアクセス をオフにしてみた。 (2015/08/15)
- Raspberry Pi(LEMP+RHT03+GoogleChartAPI)で温度・湿度をグラフ化してみた。その3 (2015/07/26)
- Raspberry Pi(LEMP+RHT03+GoogleChartAPI)で温度・湿度をグラフ化してみた。その2 (2015/07/26)
- Raspberry Pi(LEMP+RHT03+GoogleChartAPI)で温度・湿度をグラフ化してみた。その1 (2015/07/26)
- IRKitを使って日立のエアコンをAndroidで操作してみた。 (2015/07/19)
- TOSHIBA EXCERIA PRO 32GB UHS-II(SDXU-032GA)を買ってみた。 (2015/07/18)
- 10GBASE-T NIC の Intel X540-T2 が X540-T1 より安くなっている件。 (2015/07/07)
