import network
import utime
from machine import Pin
from HC1SR04 import HCSR04
import urequests
import ujson
SSID = "Wokwi-GUEST" # Nombre de la red Wi-Fi en Wokwi
PASSWORD = "" # No requiere contraseña
# Conexión a la red Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
# Esperar hasta que la conexión Wi-Fi sea exitosa
max_attempts = 10
attempt = 0
while not wlan.isconnected() and attempt < max_attempts:
print(f"Conectando a WiFi... (Intento {attempt + 1})")
utime.sleep(2)
attempt += 1
if wlan.isconnected():
print("Conectado a WiFi:", wlan.ifconfig())
else:
print("No se pudo conectar a WiFi.")
# Puedes decidir qué hacer si no se conecta
raise Exception("No se pudo conectar a la red Wi-Fi")
# Configuración del sensor de ultrasonido y el LED
medidor = HCSR04(trigger_pin=4, echo_pin=5) # Verifica que los pines son correctos en tu proyecto Wokwi
led = Pin(2, Pin.OUT) # Cambia el pin según tu configuración
# Parámetros del tanque
ALTURA_TANQUE = 100 # Altura total del tanque en cm
UMBRAL_NIVEL_AGUA = 30 # Umbral para activar la alerta del LED
TIEMPO_PARPADEO = 0.5 # Tiempo de parpadeo del LED en segundos
TIEMPO_MEDICION = 4 # Tiempo de espera entre mediciones
# URL de tu servidor Flask (actualiza con la IP correcta de tu servidor Flask)
url = "https://medidor-agua.onrender.com/data" # Esta es la IP de tu servidor Flask en tu red local
while True:
try:
# Medir la distancia usando el sensor de ultrasonido
distancia = medidor.distance_cm()
if distancia is None:
print("No se detectó eco. No se pudo medir la distancia.")
nivel_agua = 0
else:
print("Distancia medida:", distancia, "cm")
# Calcular el nivel de agua en el tanque
nivel_agua = int(ALTURA_TANQUE - distancia)
print("Nivel de agua calculado:", nivel_agua, "cm")
# Enviar el nivel de agua a la API Flask
payload = {'mensaje': f'Nivel de agua: {nivel_agua} cm'}
print("Enviando solicitud a:", url)
# Enviar la solicitud usando urequests
try:
# Convertir el payload a JSON
json_data = ujson.dumps(payload)
response = urequests.post(url, data=json_data, headers={'Content-Type': 'application/json'})
print("Respuesta del servidor:", response.text)
response.close() # Cerrar la conexión
except Exception as e:
print("Error al enviar la solicitud:", str(e))
# Controlar el LED según el nivel de agua
if nivel_agua < UMBRAL_NIVEL_AGUA:
print("Alerta! El nivel de agua es demasiado bajo!")
led.value(1) # Enciende el LED
utime.sleep(TIEMPO_PARPADEO)
led.value(0) # Apaga el LED
utime.sleep(TIEMPO_PARPADEO)
else:
led.value(0) # Asegúrate de que el LED esté apagado si el nivel es normal
print("Nivel de agua normal.")
except Exception as e:
print("Error al medir la distancia:", str(e))
utime.sleep(TIEMPO_MEDICION) # Espera antes de la siguiente medición