RaspberryPi Zero WH & DHT11で温度・湿度を取得

Python

やりたいこと

DHT11で部屋の気温、湿度を取得したい。

準備するもの

Amazon.co.jp: KKHMF 2個 DHT11 センサー 温湿度モジュール ピンオス/メス デュポンワイヤーが付き Arduino/Raspberry pi 用 「国内配送」 : 産業・研究開発用品

Amazon | BSTKING Raspberry Pi Zero WH用、溶接はんだ付け、40PIOヘッダー512M 、内蔵WiFiおよびブルートゥース Pi Zero Pi 0 | BSTKING | ベアボーンPC 通販

※ 2022年7月現在 割高です

環境

RaspberryPi OSのバージョンは下記のとおりです。

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.15.32+ #1538 Thu Mar 31 19:37:58 BST 2022 armv6l GNU/Linux

ハード側の準備

DHT11をRaspberryPiに装着していきます。

と、その前に事前知識

GPIOについて


図の赤丸の部分のことを、GPIOというらしいです。
以下Wikipediaからの引用です。

GPIOは、集積回路やコンピュータボード上の一般的なピンであり、その動作(入力ピンであるか出力ピンであるかを含む)は、実行時にユーザによって制御可能である。GPIOは"General-purpose input/output"の略で、「汎用入出力」を意味する。
GPIO – Wikipedia

要は入出力を行うために使用する入出力部分のことです。
電子工作には縁がなかったので少し怖かったのですが、ただの端子です。
今回はコネクタをぶっ刺すだけで良かったのでなんとなりました。

いつか、はんだ付けとかしてみたい

RaspberryPi Zero WHのGPIO仕様について

RaspberryPiの主な仕様はRPi Hardware – eLinux.orgにまとめられています。

RaspberrPi ZeroのGPIOのピン番号は下記のとおりです。
ピン説明

Simple Guide to the Raspberry Pi GPIO Header – Raspberry Pi Spy

各ピンの説明について

各種PINに記載されている「POWER」, 「GROUND」, 「GPIO」に関する説明です。

項目名 他表記 説明
POWER PWR 電圧が高いPIN
GROUND GND 所謂、接地面です。電圧0
GPIO GPIO 入出力に使用するPIN

電気は電圧の高いところ→低いところに流れるので
PWRとGNDをつないで電気を流します。
電気だけ流しても仕方がないのでGPIOで入力及び出力を行います。

DHT11の装着


接続をしなければいけないピンは画像のとおりです。

今回は、
PWR: 1ピン
GROUND: 7ピン
OUTPUT: 4ピン
に接続します。

接続する箇所が間違っていなければうまく動作するはずです。


ソフト側の準備

次にソフト側の準備を進めていきます。

動作確認だけしたい方は下記のリポジトリを使用してもらえば大丈夫です。
https://github.com/nekonisi/dht11
※ WindowsやMac環境だと使用されているライブラリ(RPi.GPIO)のインストールに失敗するので注意

git clone https://github.com/nekonisi/dht11.git
cd dht11
pip install -r requirement.txt
python sample.py

プログラム解説

解説しようと思ったけど、解説するほどの内容ではないので
ソースを見てください。

# -*- coding: utf-8 -*-
"""
温度、湿度センサーのテスト
@author: nekonisi
"""

import RPi.GPIO as GPIO
import dht11
from time import sleep

# オマジナイ
GPIO.setwarnings(False) # GPIO.cleanup()をしなかった時のメッセージを非表示にする
GPIO.setmode(GPIO.BCM) # ピンをGPIOの番号で指定

TEMP_SENSOR_PIN = 4 # 温湿度センサーのピンの番号 環境によって切り分けてください
MAX_RETRY = 10 # リトライ回数

sensor = dht11.DHT11(pin=TEMP_SENSOR_PIN)
count = 0

while True:
    count += 1
    if MAX_RETRY <= count:
        break
    result = sensor.read() # 値読み込み
    if result.is_valid():
        print("temperature:", result.temperature, "humidity:", result.humidity)
        break
    sleep(1)

参考サイト

ラズパイで温湿度を測定(DHT11) | そう備忘録
https://www.souichi.club/raspberrypi/temperature-and-humidity/

GitHub – szazo/DHT11_Python: Pure Python library for reading DHT11 sensor on Raspberry Pi
https://github.com/szazo/DHT11_Python

コメント

タイトルとURLをコピーしました