from machine import Pin, I2C, PWM
import dht
from time import sleep
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
#Configuración del sensor DHT22
dht_pin = Pin(4) # Cambia el pin si usas otro
dht_sensor = dht.DHT22(dht_pin)
#Configuración del servomotor
servo_pin = Pin(27)
servo = PWM(servo_pin, freq=50) #Frecuencia de 50Hz para servomotor
#Configuración de lapantalla LCD I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
lcd_address = i2c.scan()[0] #Detectar dirección automáticamente
lcd = I2cLcd(i2c,lcd_address, 2, 16) #LCD de 16x2
#Función para mover el servomotor
def mover_servo(angulo):
#Ajustamos el valor de duty para controlar el servo
#0 grados:40, 180 grados:115
duty_value = 40 + (angulo * 75) // 180 # // significa resultado de la división entera
servo.duty(duty_value)
#Bucle principal
while True:
try:
dht_sensor.measure() #Leer DHT22
temperatura = dht_sensor.temperature()
humedad = dht_sensor.humidity()
humedad = round(humedad,1)
temperatura = round(temperatura,1)
#Mostrar los resultados en el LCD con 2 decimales
lcd.clear()
lcd.move_to(0,0) #Columna o, fila 0
#lcd.putstr("Temp: " + "{:.2f}", format(temperatura) + " C")
lcd.putstr("Temp: " + str(temperatura) + " C")
lcd.move_to(0,1) #Columna 0, fila 1
#lcd.putstr("Hum: " + "{:.2f}", format(humedad) + "%")
lcd.putstr("Hum: " + str(humedad) + "%")
#condiciones
if temperatura > 10 and temperatura <= 40:
print("Condición 1")
mover_servo(90) #Mover el servomotor a 90 grados
elif humedad > 90 and temperatura > 60:
print("Condición 2")
mover_servo(180) #Mover el servomotor a 180 grados
else:
mover_servo(0) #Mover el servomotor a 0 grados (posición inicial)
#Mostrar resultados en el terinal con 2 decimales
print("Temperatura: " + str(temperatura) + "C")
print("Humedad: " + str(humedad) + "%")
except Exception as e:
print("Error:", e)
lcd.clear()
lcd.putstr("Error leyendo")
lcd.move_to(0,1)
lcd.putstr("sensores")
sleep(2) #Esperar 2 segundos antes de la siguiente lectura