Processor

【라즈베리파이】 wiringPi Python : 온습도 센서(DHT11)

작성자 임베디드코리아 작성일26-02-20 00:40 조회96회 댓글0건
◆ DHT11은 파란색 작은 모듈로 온도와 습도를 동시에 측정해 준다.
    • 기상청 장비처럼 정밀하지는 않음.
  • ±2°C, ±5%RH 오차가 있으나

◆ 스마트홈 프로젝트에는 충분 함
   • 센서 하나로 "방이 너무 더우면 선풍기를 켜는" 시스템을 만들 수 있다.
   • 실제로 많은 스마트홈 기기가 이 원리로 동작한다.

★ DHT11이 특이한 점은 단 하나의 데이터 핀으로 온도와 습도를 모두 전달한다.
   • 핀 하나로 복잡한 디지털 신호를 주고받기 때문에, 측정 간격이 반드시 2초 이상 있어야 한다.
   • 너무 빨리 읽으려 하면 센서가 오류가 난다. 

■ 패키지 업그레이드 및 라이브러리 설치하기
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python3-dev python3-pip
$ sudo python3 -m pip install --upgrade pip setuptools wheel
$ sudo pip3 install adafruit-circuitpython-dht


--->>> 예제 :  temp.py    <<<-----------------------------------------------------
import time
import adafruit_dht
from board import *

# GPIO4
SENSOR_PIN = D4
dht11 = adafruit_dht.DHT11(SENSOR_PIN, use_pulseio=False)

while True:

temperature = dht11.temperature
humidity = dht11.humidity
print(f"Humidity= {humidity:.2f}")
print(f"Temperature= {temperature:.2f}°C")
    sleep(10)
-----------------------------------------------------------------------------------------
<결과>
Humidity= 35.00
Temperature= 25.00°C


--->>>  예제  :  dht11_basic.py  <<<---------------------------------------------------
import adafruit_dht          # Adafruit DHT 라이브러리 불러오기
import board                  # 핀 번호 이름을 편하게 쓰기 위한 모듈
from time import sleep        # 대기 함수

# DHT11 센서 초기화 - GPIO 4번 핀 사용 (board.D4)
dht = adafruit_dht.DHT11(board.D4)

print("DHT11 온습도 센서 시작")

try:
    while True:
        try:
            temperature = dht.temperature    # 온도 읽기 (단위: °C)
            humidity = dht.humidity          # 습도 읽기 (단위: %)

            # None이 아닐 때만 출력 (센서가 값을 제대로 못 읽을 때 None 반환)
            if temperature is not None and humidity is not None:
                print(f"온도: {temperature}°C  |  습도: {humidity}%")
            else:
                print("센서 값 없음 - 다시 시도 중...")

        except RuntimeError as e:
            # DHT 센서는 가끔 읽기에 실패합니다 - 이것은 정상입니다
            # RuntimeError를 무시하고 다음 반복을 기다립니다
            print(f"읽기 실패 (정상): {e}")

        sleep(2)    # 반드시 2초 이상 기다려야 합니다

except KeyboardInterrupt:
    print("\nCtrl+C로 종료합니다.")
finally:
    dht.exit()    # 센서 자원을 해제합니다
--------------------------------------------------------------------------------------------------------------