# IMPORTACIÓN DE MÓDULOS
import network
import dht
import time
import machine
import urequests
# Librerias para el LCD
from time import sleep_ms, ticks_ms
from machine import I2C, Pin
from esp8266_i2c_lcd import I2cLcd
# CONFIGURACIÓN INICIAL
SSID = "LAB-ELECTRONICA"
Password = "#SomosTecNM2024!"
temp_ideal = 25
umbral = 0.5
temperatura_baja = temp_ideal - umbral
temperatura_alta = temp_ideal + umbral
uart = machine.UART(0, baudrate=115200)
DEFAULT_I2C_ADDR = 0x27 # direccion del modulo en hexadecimal}
def Temp_LCD(temperatura, humedad):
"""
Muestra la temperatura y la humedad en un LCD I2C.
"""
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)
lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)
# Actualización continua del LCD
lcd.move_to(0, 0) # Primera línea
lcd.putstr(f'Temp: {temperatura:.1f}C') # Temperatura con un decimal
lcd.move_to(0, 1) # Segunda línea
lcd.putstr(f'Humedad: {humedad:.1f}%') # Humedad con un decimal
def Conexion_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, Password)
print("Conectando a la red...")
while not wlan.isconnected():
print('Esperando conexión...')
time.sleep(1)
ip = wlan.ifconfig()[0]
print(f'Conectado a la red con IP: {ip}')
return ip
ip = Conexion_wifi()
server = "https://api.thingspeak.com/update"
Api_key = "CDQ8DQD27353AGVZ"
field1 = "field1"
field2 = "field2"
# Inicialización del sensor DHT22
sensor = dht.DHT22(machine.Pin(20)) # Cambiado de DHT11 a DHT22
buzzer = machine.Pin(18, machine.Pin.OUT)
Ventilador_M = machine.Pin(19, machine.Pin.OUT)
Puente_h = machine.Pin(21, machine.Pin.OUT)
led_verde = machine.Pin(12, machine.Pin.OUT)
led_amarillo = machine.Pin(13, machine.Pin.OUT)
led_rojo = machine.Pin(14, machine.Pin.OUT)
def Activar_ventilador():
Ventilador_M.on()
def Apagar_Ventilador():
Ventilador_M.off()
def Encender_H():
Puente_h.on()
def Apagar_H():
Puente_h.off()
def Controlar_LEDs(temperatura):
if temperatura < temperatura_baja:
led_verde.on()
led_amarillo.off()
led_rojo.off()
print("Estado: Temperatura normal, LED verde encendido")
elif temperatura_baja <= temperatura < temperatura_alta:
led_verde.off()
led_amarillo.on()
led_rojo.off()
print("Estado: Temperatura elevada, LED amarillo encendido")
else:
led_verde.off()
led_amarillo.off()
led_rojo.on()
print("Estado: Temperatura alta, LED rojo encendido")
def Parpadeo_LED_Buzzer():
"""
Hace parpadear el buzzer y el LED rojo mientras el ventilador sigue girando.
"""
for _ in range(20): # Parpadeo durante 5 segundos
led_rojo.on()
buzzer.on()
time.sleep(0.5)
led_rojo.off()
buzzer.off()
time.sleep(0.5)
led_rojo.on()
buzzer.on()
time.sleep(0.5)
def Actualizar_umbrales():
global temperatura_baja, temperatura_alta
if uart.any():
try:
datos = uart.readline().decode('utf-8').strip()
comandos = datos.split(',')
if len(comandos) == 2:
temperatura_baja = float(comandos[0])
temperatura_alta = float(comandos[1])
print(f"Umbrales actualizados: Temperatura baja = {temperatura_baja}, Temperatura alta = {temperatura_alta}")
else:
print("Error: Ingrese dos valores separados por coma (ejemplo: 20.0,30.0)")
except ValueError:
print("Error: Los valores deben ser números decimales")
while True:
try:
Actualizar_umbrales()
sensor.measure()
Temperatura = sensor.temperature()
Humedad = sensor.humidity()
if Temperatura is not None and Humedad is not None:
print(f'Temperatura = {Temperatura:.2f}°C Humedad = {Humedad:.2f}%')
# Mostrar en el LCD
Temp_LCD(Temperatura, Humedad)
# Enviar datos a ThingSpeak
url = f"{server}?api_key={Api_key}&{field1}={Temperatura}&{field2}={Humedad}"
print(f"Enviando datos a ThingSpeak: {url}")
request = urequests.get(url)
print(f'Respuesta de ThingSpeak: {request.text}')
request.close()
# Controlar LEDs y sistemas de enfriamiento
Controlar_LEDs(Temperatura)
if Temperatura >= temperatura_alta:
print('Temperatura alta: Activando sistemas de enfriamiento con parpadeo')
Activar_ventilador()
Encender_H()
Parpadeo_LED_Buzzer() # Parpadeo del LED rojo y el buzzer
else:
print('Temperatura normalizada: Sistemas de enfriamiento desactivados')
Apagar_Ventilador()
Apagar_H()
buzzer.off()
led_rojo.off()
else:
print('No es posible dar lectura de datos')
except OSError as e:
print('Error de lectura del sensor:', e)
except Exception as err:
print('Se ha producido un error:', err)
time.sleep(5)