본문 바로가기
RaspberryPi

라즈베리파이 + dht22 온습도 센서

by hyperhand 2026. 1. 7.

집에서 시계 및 실내 온습도계 용도로 모니터 + 라즈베리파이3(bullseye) + dht22 조합으로 간단히 앱을 만들어 사용중이었다.

 

수시로 apt upgrade 명령으로 패키지를 해주곤 했는데 언젠가 부터 온습도값이 변경되지 않는 현상을 발견했다.

 

원인을 파악해보니 기존 adafruit_dht 파이썬 라이브러리에서 라즈베리파이 모델을 제대로 인식하지 못하는 현상이 발견됐다.

 

/usr/local/lib/python3.9/dist-packages/Adafruit_DHT/platform_detect.py 파일에 라즈베리파이 모델을 인식하는 pi_version() 함수가 계속 None을 리턴했다. 소스 코드를 확인해보니 /proc/cpuinfo 파일의 Hardware 항목을 확인해서 모델을 판별하도록 구현돼 있는데 이 파일이 최근 업데이트로 인해 Hardware 항목이 없어진 것 같다. 다행히 Model 항목으로 판별할 수 있을 것 같아서 소스 코드를 그에 맞게 수정 후 온습도값을 읽어들이는지 확인해봤으나 이번에 gpio 접근 오류가 발생했다. 현재는 이미 조치가 끝난 후 시간이 어느 정도 지난 뒤에 작성하는거라 정확한 에러는 기억나지 않는다.

 

암튼 라이브러리 수준에서 해결돼야 하는 문제인가 싶어서 구글링 해보니 현재는 adafruit사의 dht 센서 제품을 라즈베리파이에서 접근하는데 CircuitPython-DHT 라는 라이브러리를 사용하는 방식으로 변경된 것 같다.

 

그래서 이 방식을 사용하는 방법으로 조치했다.

# 필수 OS 패키지 설치
$ sudo apt update
$ sudo apt install python3-pip python3-dev python3-rpi.gpio libgpiod2

# Blinka (CircuitPython 하드웨어 레이어)
$ sudo python3 -m pip install adafruit-blinka

# DHT 센서용 CircuitPython 라이브러리
$ sudo python3 -m pip install adafruit-circuitpython-dht

위 내용 중 Blinka, DHT 센서용 CircuitPython 라이브러리 설치 시 sudo를 사용하지 않으면 board 라이브러리 사용중이 불가능했다.

 

그리고 기존의 온습도 센서로부터 온습도 값을 읽어들이는 코드를 아래와 같이 변경했다.

import time
import board
import adafruit_dht

# GPIO4를 사용 (DHT22)
dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False)

try:
    # 온도, 습도 읽기
    temp_c = dhtDevice.temperature
    humidity = dhtDevice.humidity
    print(f"Temp: {temp_c:.1f} °C  Humidity: {humidity:.1f} %")

    # 파일로 저장
    with open("/home/kiosk/th.txt", "w") as f:
        f.write(f"{temp_c:.1f},{humidity:.1f}")
except RuntimeError as error:
    print("읽기 오류:", error.args[0])

 

 

이제 실행하면 온습도 값을 문제없이 읽어온다.

$ sudo python3 script.py
Temp: 22.1 °C  Humidity: 42.5 %