from machine import Pin
import dht
import network
import socket
import time
import urequests # Para hacer solicitudes HTTP
# Configuración del sensor y el relé
sensor = dht.DHT22(Pin(4))
relay = Pin(5, Pin.OUT)
# Configura Wi-Fi
ssid = 'Wokwi-GUEST'
password = ''
notification_url = 'http://your-notification-server/notify' # URL del servidor de notificaciones
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Conectar al Wi-Fi
print(f'Conectando a la red {ssid}...')
wlan.connect(ssid, password)
max_attempts = 10
attempt = 0
while not wlan.isconnected() and attempt < max_attempts:
attempt += 1
print(f'Intento {attempt} de {max_attempts}...')
time.sleep(1)
if wlan.isconnected():
print('Conexión exitosa!')
print('Configuración de red:', wlan.ifconfig())
else:
print('Error: No se pudo conectar a la red Wi-Fi. Verifica el SSID y la contraseña.')
def start_server():
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('server listo', addr)
while True:
cl, addr = s.accept()
print('cliente conectado desde', addr)
request = cl.recv(1024)
request = str(request)
if '/on' in request:
relay.value(1)
notify('Termostato encendido')
elif '/off' in request:
relay.value(0)
notify('Termostato apagado')
cl.send('HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n')
cl.send('<h1>Thermostat Control</h1>')
cl.send('<p><a href="/on">Turn ON</a></p>')
cl.send('<p><a href="/off">Turn OFF</a></p>')
cl.send('<p>Current Temperature: {}°C</p>'.format(get_temperature()))
cl.close()
def get_temperature():
try:
sensor.measure()
return sensor.temperature()
except OSError as e:
return 'Error reading sensor'
def notify(message):
try:
payload = {'message': message}
response = urequests.post(notification_url, json=payload)
print(f'Notificación enviada: {response.status_code}')
except Exception as e:
print('Error al enviar notificación:', e)
def test_temperature():
# Función de prueba para simular diferentes temperaturas
print("Ejecutando prueba de temperatura...")
test_temps = [15, 22, 26] # Temperaturas de prueba
for temp in test_temps:
# Simula la temperatura leyendo el valor fijo
print(f"Simulando temperatura: {temp}°C")
sensor.temperature = lambda: temp # Simula la temperatura
time.sleep(5) # Espera para observar el comportamiento
# Control del termostato basado en la temperatura simulada
if temp > 25:
relay.on() # Enciende el termostato
notify('Termostato encendido durante prueba')
print("Termostato encendido durante prueba")
elif temp <= 20:
relay.off() # Apaga el termostato
notify('Termostato apagado durante prueba')
print("Termostato apagado durante prueba")
else:
print("Temperatura en rango normal durante prueba")
def main():
connect_wifi()
start_server()
test_temperature() # Ejecutar la prueba de temperatura
main()
# Control del termostato
last_state = None
while True:
time.sleep(15)
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print("T = {:2}°C H = {:2}%".format(temp, hum))
if temp > 25:
relay.on() # Enciende el termostato
if last_state != 'encendido':
notify('Termostato encendido')
last_state = 'encendido'
print("Termostato encendido")
elif temp <= 20:
relay.off() # Apaga el termostato
if last_state != 'apagado':
notify('Termostato apagado')
last_state = 'apagado'
print("Termostato apagado")