from machine import Pin # Importa desde la libreria "machine" la clase pin
import dht # importa la libreria dht que permite usar el sensor DHT22
from time import sleep, gmtime # trae la función sleep y la función gmtime
led_temp = Pin(15, Pin.OUT) # Led indicando temperatura
led_hum = Pin(14, Pin.OUT) # Led indicando humedad
led_temp.value(0) # Asegura que el led de temperatura empiece el ciclo apagado
led_hum.value(0) # Idem, para el led de humedad
sensor = dht.DHT22(Pin(23)) # Le indica al ESP32 el tipo de sensor que se está usando (DHT22) y en que pin se encuentra (21)
bypass_hum = Pin(26,Pin.IN,Pin.PULL_DOWN) # Bypass de la humedad
bypass_tem = Pin(27,Pin.IN,Pin.PULL_DOWN) # Bypass de la temperatura
while True: # Crea el bucle
sensor.measure() # Busca los valores percibidos por el sensor
temperatura = sensor.temperature() # Almacena el valor de la temperatura en una variable con ese mismo nombre
humedad = sensor.humidity() # guarda valor de humedad
timestamp = gmtime() # Permite verificar que el sensor haga el muestreo cada segundo
sleep(0.725806) # Permite al programa generar el retardo de un segundo. Se fija el valor a 0.725806 s porque el sensor tiene (Aproximadamente) un retardo de 0.274194 s para generar la nueva medición
print (timestamp[5]) # Genera un timestamp en consola para permitir verificar que el codigo actua cada segundo
print ("Temperatura Actual:", temperatura) # muestra temperatura detectada por el sensor
print("Humedad actual:", humedad) # muestra humedad actual detectada por el sensor
if not(humedad < 25 or humedad > 60) and bypass_hum.value() == 0 : # Verifica si el valor de humedad se encuentra dentro del umbral de activación, y si el bypass no está activo
led_hum.value(1) # Enciende el led si se cumple la condición anterior
else: # Permite apagar el led cuando sale la variable del intervalo relevante
led_hum.value(0) # Apaga el led al terminar el bucle
if temperatura > 45 and bypass_tem.value() == 0 : # Verifica si el valor de temperatura supera el umbral de activación, y si el bypass no está activo
led_temp.value(1) # Enciende el led si se cumple la condición anterior
else: # Permite apagar el led cuando sale la variable del intervalo relevante
led_temp.value(0) # Apaga el led al terminar el bucle