import machine
import onewire
import ds18x20
import time
import control_ventana
from conexion import Conexion
import network
# Configuración de pines
ds_pin_interior = machine.Pin(5)
ds_pin_exterior = machine.Pin(16)
relay_pin_motor = machine.Pin(12, machine.Pin.OUT, value=0)
relay_pin_fase = machine.Pin(13, machine.Pin.OUT, value=0)
fin_de_carrera_abierto_pin = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
fin_de_carrera_cerrado_pin = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_DOWN)
boton_reset = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
boton_abrir_pin = machine.Pin(2, machine.Pin.IN, machine.Pin.PULL_UP) # Corrección aquí
boton_cerrar = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_UP)
# LED RGB (Asumiendo ánodo común)
rojo = machine.Pin(25, machine.Pin.OUT)
verde = machine.Pin(26, machine.Pin.OUT)
azul = machine.Pin(27, machine.Pin.OUT)
# Inicializar los sensores DS18B20
ow_interior = onewire.OneWire(ds_pin_interior)
ds_sensor_interior = ds18x20.DS18X20(ow_interior)
roms_interior = ds_sensor_interior.scan()
ow_exterior = onewire.OneWire(ds_pin_exterior)
ds_sensor_exterior = ds18x20.DS18X20(ow_exterior)
roms_exterior = ds_sensor_exterior.scan()
TEMPERATURA_ALTA = 30
TEMPERATURA_BAJA = 20
TEMPERATURA_EXTERIOR_MIN = 15
TIMEOUT = 10000
control_automatico = True
error_sistema = False
# Configura aquí los parámetros de tu red WiFi y los pines de UART para el SIM800L
SSID = "Wokwi-GUEST"
PASSWORD = "" # Asume que no hay contraseña para la demostración
PIN_TX = 17 # Ejemplo de pin TX para SIM800L
PIN_RX = 16 # Ejemplo de pin RX para SIM800L
def main():
# Crear una instancia de la clase Conexion
conexion_internet = Conexion(SSID, PASSWORD, PIN_TX, PIN_RX)
# Intentar establecer una conexión a internet
conexion_internet.establecer_conexion()
# Desde este punto, puedes continuar con el resto de tu programa.
# Por ejemplo, podrías iniciar la lógica principal de tu aplicación,
# asegurándote de que ya tienes acceso a internet.
if __name__ == "__main__":
main()
# Bucle de control automático
while True:
# Permitir operaciones manuales en cualquier estado
if not boton_abrir_pin.value():
control_ventana.abrir_ventana_continua() # Modificado para llamar la función desde el módulo
control_automatico = False
error_sistema = False
time.sleep(0.5)
continue
if not boton_cerrar.value():
control_ventana.cerrar_ventana_continua() # Modificado para llamar la función desde el módulo
control_automatico = False
error_sistema = False
time.sleep(0.5)
continue
# Restablecer el sistema con el botón de reset
if not boton_reset.value():
error_sistema = False
control_automatico = True
print("Sistema restablecido, control automático reactivado.")
control_ventana.led_color(0, 0, 1) # Modificado para llamar la función desde el módulo
time.sleep(0.5)
estado_actual = control_ventana.verificar_estado() # Modificado para llamar la función desde el módulo
if not boton_reset.value():
if estado_actual == "error_grave" and not control_ventana.error_grave_mensaje_mostrado: # Modificado para acceder a la variable del módulo
print("Error grave detectado: Ambos finales de carrera están activados. Ajuste manualmente la ventana antes de restablecer.")
control_ventana.error_grave_mensaje_mostrado = True # Modificado para acceder a la variable del módulo
time.sleep(0.5)
elif estado_actual != "error_grave":
error_sistema = False
control_automatico = True
print("Sistema restablecido, control automático reactivado.")
control_ventana.led_color(0, 0, 1) # Modificado para llamar la función desde el módulo
time.sleep(0.5)
continue
# Control automático
if control_automatico and not error_sistema:
temperatura_interior = control_ventana.leer_temperatura(ds_sensor_interior, roms_interior) # Modificado para llamar la función desde el módulo
temperatura_exterior = control_ventana.leer_temperatura(ds_sensor_exterior, roms_exterior) # Modificado para llamar la función desde el módulo
estado = control_ventana.verificar_estado() # Modificado para llamar la función desde el módulo
if estado == "error":
continue
# Condición para abrir la ventana
if temperatura_interior > TEMPERATURA_ALTA and temperatura_exterior >= TEMPERATURA_EXTERIOR_MIN and estado != "abierta":
control_ventana.abrir_ventana() # Modificado para llamar la función desde el módulo
# Condición para cerrar la ventana
elif (temperatura_interior < TEMPERATURA_BAJA or temperatura_exterior < TEMPERATURA_EXTERIOR_MIN) and estado != "cerrada":
control_ventana.cerrar_ventana() # Modificado para llamar la función desde el módulo
if error_sistema:
if estado_actual == "error_grave":
# Si el sistema está en un estado de error grave, permitir la recuperación manual
if not boton_abrir_pin.value():
control_ventana.abrir_ventana_continua() # Modificado para llamar la función desde el módulo
time.sleep(1)