from machine import Pin
import time
import dht
import network
import umail
# Configuración del sensor DHT22
sensor = dht.DHT22(Pin(15))
# Configuración del LED de alarma
led = Pin(12, Pin.OUT)
# Configuración del correo
email_remitente = '[email protected]'
nombre_remitente = 'ESP32'
clave_api = 'jfnc soit gsgg ohfy' # Clave de aplicación de Gmail
email_destino = '[email protected]'
asunto = '⚠️ Alarma de Temperatura y Humedad ESP32'
# Conexión WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Conectando a WiFi...')
wlan.connect('Wokwi-GUEST', '')
while not wlan.isconnected():
print('Esperando conexión...')
time.sleep(1)
print('Conectado a WiFi:', wlan.ifconfig())
# Variable de control para evitar múltiples correos
correo_enviado = False
while True:
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print(f'Temperatura = {temp}°C, Humedad = {hum}%')
if temp > 40 and hum < 20:
led.on()
if not correo_enviado:
mensaje = (
"⚠️ Advertencia: Condiciones críticas detectadas.\n\n"
"Temperatura actual: " + str(temp) + "°C\n"
"Humedad actual: " + str(hum) + "%\n\n"
"Revisar condiciones del ambiente o sistema de ventilación."
)
print('Enviando correo de alarma...')
try:
smtp = umail.SMTP('smtp.gmail.com', 465, ssl=True)
smtp.login(email_remitente, clave_api)
smtp.to(email_destino)
smtp.write("From: " + nombre_remitente + " <" + email_remitente + ">\n")
smtp.write("Subject: " + asunto + "\n")
smtp.write("\n")
smtp.write(mensaje)
smtp.send()
smtp.quit()
print('Correo enviado correctamente.')
correo_enviado = True
except Exception as e:
print('Error al enviar correo:', e)
else:
led.off()
correo_enviado = False # Permite reenviar si se cumple la condición de nuevo
time.sleep(2)
except Exception as e:
print('Error al leer el sensor:', e)
time.sleep(2)