본문 바로가기

생활코딩

라즈베리파이 온습도 센서 사용하기

라즈베리파이에 온습도 센서를 장착 및 테스트 하는 방법입니다.

 

환경

  • 라즈베리파이 4
  • 온습도 센서: AM2302 (DHT22)
    • https://www.adafruit.com/product/393 를 보면 AM2302는 DHT22에 케이블을 추가한 버전입니다만, 생산 업체마다 형태가 조금씩 다른거 같습니다. 제가 사용한 것은 ASAIR의 AM2302로 사진에 나오는 것처럼 케이블 연결이 쉽게 핀이 있는 형태입니다.

핀 연결

출처:https://www.raspberrypi.com/documentation/computers/raspberry-pi.html

 

온습도 센서 + : 1번 핀 (3.3v) - 1번 핀 아니어도 3.3v 전압 핀이면 됩니다.

온습도 센서 - : 6번 핀 (Ground) - 6번 핀 아니어도 ground면 됩니다.

온습도 센서 out : GPIO 4 (7번핀) - 다른 GPIO 핀도 가능합니다.

 

Python Package 설치

Pi OS를 기본 옵션으로 설치한 경우에는 pip로 전역 설치가 가능한 패키지는 데비안에 등록된 파이썬 패키지만이 가능합니다. 그렇지 않은 패키지를 사용해야 하는 경우에는 가상 환경(venv)으로 설치해야 합니다.

mkdir dht22
cd dht22
python3 -m venv env --system-site-packages
source env/bin/activate
pip3 install adafruit-circuitpython-dht

 

관련된 상세 정보는 

이전에 사용되던 라이브러리인 Adafruit_DHT(https://github.com/adafruit/Adafruit_Python_DHT)는 지원 중단(deprecated) 됐습니다. 

테스트

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

import time
import board
import adafruit_dht

# GPIO 번호. 4번이므로 D4. 만약 다른 번호이면 해당 번호로 지정. 예) 17이면 D17
dhtDevice = adafruit_dht.DHT22(board.D4)

while True:
    try:
        # Print the values to the serial port
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(
            "Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(
                temperature_f, temperature_c, humidity
            )
        )

    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        raise error

    time.sleep(2.0)

 

위의 코드를 test.py로 저장합니다.

python test.py

 

실행하면 다음과 같이 출력됩니다.