温湿度センサーDHT11が出てきたのでラズパイで測定しました。ついでにCPU温度の測定方法もメモ。
温湿度センサー DHT11
定番の温湿度センサー DHT11 です。
http://akizukidenshi.com/catalog/g/gM-07003/
温度精度±2℃、湿度精度 ±5% とそれほど高精度ではありませんが、室内環境の測定には充分です。
ラズパイと接続
DHT11は 3.5-5.5V 駆動なのでGPIOの5Vを使用します。今回信号はGPIO27を使用しました。
DHT11 : ラズパイ
————————
1 : 5V
2 : GPIO27
3 : (NC)
4 : GND
プルアップ抵抗
DHT11の1と2の間にプルアップ抵抗を接続します。
データシートによるとプルアップ抵抗はケーブル長5m以下で4.7kΩ推奨。
10cmぐらいなので、なんでも良いと思って 10kΩ を使いましたが特に問題なくデータ読めました。
DHT11 Python Librally
定番のライブラリです。わずか4日前の2020/3/25にアップデートされ、dht11.pyが __init__.py に移されたとあります。
サンプルは example.py です。
DHT11_Python
https://github.com/szazo/DHT11_Python
ラズパイにclone
$ git clone https://github.com/szazo/DHT11_Python.git
setup.pyに python3.6 以上とありますが、python 3.5 でも動作しました。
ラズパイのCPU温度を読む
次のコマンドでCPU温度x1000の値を取得できます。
$ cat /sys/class/thermal/thermal_zone0/temp
pythonからは subprocess.run() を使って外部コマンドを呼び出すことが可能です。
プログラム
python3です。
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import subprocess
from subprocess import PIPE
# initialize GPIO
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
# read data using GPIO 27 pin 13
instance = dht11.DHT11(pin=27)
def read_dht11():
result = instance.read()
if result.is_valid():
print("Last valid input: " + str(datetime.datetime.now()))
print("Temperature: %-3.1f C" % result.temperature)
print("Humidity: %-3.1f %%" % result.humidity)
def cpu_temp():
proc = subprocess.run("cat /sys/class/thermal/thermal_zone0/temp", shell=True, stdout=PIPE, stderr=PIPE)
val = proc.stdout.decode("utf-8")
temp = "{0:.1f}".format(int(val)/1000)
print("cpu temp: {} C".format(temp))
if __name__ == '__main__':
read_dht11()
cpu_temp()
実行
pi@raspi:~/dht11 $ python3 dht11_cpu.py
Last valid input: 2020-03-28 22:33:26.383141
Temperature: 20.0 C
Humidity: 47.0 %
cpu temp: 44.0 C
無事DHT11の温湿度とラズパイのCPU温度が取得できました。
なお、DHT11の読み取り間隔は6秒以上あけること。
後は、AmbientでもAWSでもポストしてグラフ化できます。