PR.FT5_15·Kit RPi›Sensor Temperatura DHT11Próximo →
⬤ Intermédio · DHT11 · 1-Wire

🌡️ Sensor de Temperatura DHT11

Ler temperatura e humidade com o sensor DHT11 via protocolo 1-Wire. Usar a biblioteca Adafruit DHT e apresentar os dados no terminal e num LCD.

Instalar a biblioteca

Terminal
pip3 install adafruit-circuitpython-dht
sudo apt install libgpiod2 -y

Circuito

DHT11 VCC → 3.3V (pino 1)
DHT11 DATA → Res. 10kΩ para VCC + GPIO 4
DHT11 GND → GND (pino 6)
💡
O pino DATA precisa de uma resistência pull-up de 10kΩ entre DATA e VCC. Muitos módulos DHT11 já têm esta resistência incorporada — verifica se o teu módulo tem 3 ou 4 pinos.

Exercício 1 — Leitura básica

Python · dht_leitura.py
import adafruit_dht
import board
import time

# Inicializar sensor no GPIO 4
sensor = adafruit_dht.DHT11(board.D4)

try:
    while True:
        try:
            temp = sensor.temperature
            hum  = sensor.humidity
            print(f"Temperatura: {temp:.1f}°C | Humidade: {hum:.0f}%")
        except RuntimeError as e:
            # Erros de leitura são normais — tentar de novo
            print(f"Leitura falhou: {e}")
        time.sleep(2)  # DHT11 precisa mín. 1s entre leituras

except KeyboardInterrupt:
    sensor.exit()
    print("Sensor desligado.")

Exercício 2 — Alerta de temperatura

Python · dht_alerta.py
import adafruit_dht, board, RPi.GPIO as GPIO, time

LED_OK   = 18  # verde
LED_WARN = 23  # vermelho
LIMITE   = 28  # °C

GPIO.setmode(GPIO.BCM)
for p in [LED_OK, LED_WARN]: GPIO.setup(p, GPIO.OUT)
sensor = adafruit_dht.DHT11(board.D4)

try:
    while True:
        try:
            t = sensor.temperature
            print(f"Temp: {t}°C")
            if t >= LIMITE:
                GPIO.output(LED_OK, GPIO.LOW)
                GPIO.output(LED_WARN, GPIO.HIGH)
                print("⚠ TEMPERATURA ELEVADA!")
            else:
                GPIO.output(LED_OK, GPIO.HIGH)
                GPIO.output(LED_WARN, GPIO.LOW)
        except RuntimeError: pass
        time.sleep(2)
except KeyboardInterrupt:
    sensor.exit(); GPIO.cleanup()