DHT11とラズパイで温度・湿度を測定してついでにCPU温度も測定する

温湿度センサー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でもポストしてグラフ化できます。

コメントを残す

メールアドレスが公開されることはありません。

4 + 3 =