自動観察日記

自動で観察したい

Raspberry Piで温湿度センサーAM2302を動かす

こちらを参考にしてます。

littlewing.hatenablog.com

配線

私が購入したのは3ピンのAM2302なので、こんな感じで配線してます。

AM2302 Raspberry Pi側 GPIOのピン番号
1 VDD 1 (3.3 V)
2 SCA 7 (GPIO4)
3 GND 9 (Ground)

f:id:shut9:20180822164130j:plain

プログラム

プログラムはフリーで提供されています。

$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git $ cd Adafruit_Python_DHT $ sudo python setup.py install

$ cd example $ sudo python AdafruitDHT.py 2302 4

とすると、

Temp=27.9* Humidity=67.5%

というように、現在の気温と湿度が測定されます。 sudoを付けないとエラーがでます。(sudoを付けなくてもいい方法はないのでしょうか…)

$ python AdafruitDHT.py 2302 4

Traceback (most recent call last): File "AdafruitDHT.py", line 24, in import Adafruit_DHT ModuleNotFoundError: No module named 'Adafruit_DHT'

室内温湿度のログ

/Adafruit_Python_DHT/examples/simple_test.py を改造して、次のプログラムを作りました。

#!/home/pi/.pyenv/shims/python                                                                                                                        
# -*- coding: utf-8 -*-                                                                                                                               

import os
import Adafruit_DHT
import datetime

now = datetime.datetime.now() # 現在の日時を取得                                                                                                      

sensor = Adafruit_DHT.DHT22
pin = 4

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

discomfort = 0.81*temperature + 0.01*humidity*(0.99*temperature - 14.3) + 46.3

cmd = '/opt/vc/bin/vcgencmd measure_temp'
line = os.popen(cmd).readline().strip()
tcpu = line.split('=')[1].split("'")[0]

file = open('/home/pi/log_AM2302/log.txt', 'a+')  #書き込みモードでオープン                                                                           
file.write('{0:%Y/%m/%d %H:%M:%S}, {1:3f}, {2:3f}, {3:3f}, {4:3f}\n'.format(now, humidity, temperature, discomfort, float(tcpu)))

これをcronで定期的に動かすことで、温湿度のログが取れるようになります。

$ crontab -e

*/5 * * * * sudo python /home/pi/log_AM2302/log_AM2302.py

こうかくことで、5分に1回ログが記録されます。(/home/pi 以下にlog_AM2302というディレクトリをあらかじめ作っていて、プログラムを動かすとlog_AM2302にlog.txtという名前のファイルが作成されて5分に1回書き込まれていきます。)

log.txtの中身は、次のように詰まっています。 時刻, 湿度, 温度, 不快指数, Raspberry PiのCPU温度

不快指数はWikipediaの式に従って計算しています。 不快指数 - Wikipedia

ログのプロット

あらかじめpandasをインストールしておいたほうが楽でした。

$ pip install pandas

次のプログラムを動かせば、横軸時刻として、湿度、温度、不快指数、CPU温度をプロットできます。

#!/usr/bin/env python                                                                                                                                 
# -*- coding: utf-8 -*-                                                                                                                               

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt
                                                                                                                                 
df = pd.read_csv('./log.txt', index_col=0, parse_dates=True, names=('date', 'humidity', 'temperature', 'discomfort', 'tcpu'))

print(df.index)
print(df['humidity'])

plt.figure(figsize=(14,6))

plt.plot(df.index, df['humidity'],'.', label='humidity')
plt.plot(df.index, df['temperature'], 'x', label='room temperature')
plt.plot(df.index, df['discomfort'], '+', label='discomfort')
plt.plot(df.index, df['tcpu'], '-', label='cpu temperature')

#axis                                                                                                                                                 
plt.xlabel('time')
plt.ylabel('')

#limit                                                                                                                                                
plt.ylim([0,100])

#legend                                                                                                                                               
plt.legend()

#show                                                                                                                                                 
plt.show()

f:id:shut9:20180822170018p:plain