from machine import Pin
import dht
import time
# Configuración del DHT11
DHT11_PIN = 15 # GP15
sensor = dht.DHT11(Pin(DHT11_PIN))
# Configuración de pines de la LCD
RS = Pin(2, Pin.OUT) # GP2
E = Pin(3, Pin.OUT) # GP3
D4 = Pin(4, Pin.OUT) # GP4
D5 = Pin(5, Pin.OUT) # GP5
D6 = Pin(6, Pin.OUT) # GP6
D7 = Pin(7, Pin.OUT) # GP7
# Funciones para controlar la LCD
def pulse_enable():
E.off()
time.sleep_us(1)
E.on()
time.sleep_us(50)
E.off()
time.sleep_us(50)
def send_nibble(data):
D4.value(data & 0x01)
D5.value((data >> 1) & 0x01)
D6.value((data >> 2) & 0x01)
D7.value((data >> 3) & 0x01)
pulse_enable()
def send_byte(data, rs_value):
RS.value(rs_value)
send_nibble(data >> 4) # Parte alta
send_nibble(data & 0x0F) # Parte baja
def lcd_init():
time.sleep(0.05) # Esperar inicialización
RS.off()
E.off()
send_nibble(0x03)
time.sleep_ms(5)
send_nibble(0x03)
time.sleep_us(150)
send_nibble(0x03)
send_nibble(0x02) # Modo 4 bits
send_byte(0x28, 0) # 4 bits, 2 líneas, 5x8 puntos
send_byte(0x0C, 0) # Display on, cursor off, blink off
send_byte(0x01, 0) # Limpiar pantalla
time.sleep_ms(2)
send_byte(0x06, 0) # Modo de entrada
def lcd_clear():
send_byte(0x01, 0) # Limpiar pantalla
time.sleep_ms(2)
def lcd_set_cursor(row, col):
addr = col + (0x40 if row == 1 else 0x00)
send_byte(0x80 | addr, 0)
def lcd_write(text):
for char in text:
send_byte(ord(char), 1)
# Inicializar la LCD
lcd_init()
# Bucle principal
while True:
try:
# Medir datos del DHT11
sensor.measure()
temperature = sensor.temperature() # Temperatura en °C
humidity = sensor.humidity() # Humedad en %
# Mostrar datos en el LCD
lcd_clear()
lcd_set_cursor(0, 0) # Fila 1, columna 0
lcd_write("Temp: {} C".format(temperature)) # Sin símbolo de grado por simplicidad
lcd_set_cursor(1, 0) # Fila 2, columna 0
lcd_write("Humi: {}%".format(humidity))
# Imprimir en consola (opcional)
print("Temperatura: {}°C, Humedad: {}%".format(temperature, humidity))
except OSError as e:
lcd_clear()
lcd_write("Error DHT11")
print("Error al leer el sensor:", e)
time.sleep(2) # Esperar 2 segundos