from machine import Pin, ADC
from umqtt.simple import MQTTClient
import ujson
import network
import utime as time
DEVICE_ID = "wokwi001"
WIFI_SSID = "Wokwi-GUEST" #"moto g22_3596"
CONTRASEÑA_DEL_WIFI = "" #"liriliralila"
BROKER_MQTT = "broker.mqttdashboard.com"
CLIENTE_MQTT = DEVICE_ID
MQTT_TEMA_DE_TELEMETRIA = "WATREON/telemetry"
MQTT_TEMA_DE_CONTROL = "WATREON/commands"
USUARIO_MQTT = ""
CONTRASENA_MQTT = ""
Caudalimetro = ADC (Pin (34))
Caudalimetro.width(ADC.WIDTH_10BIT)
Caudalimetro.atten(ADC.ATTN_11DB)
led_rojo = Pin(12, Pin.OUT)
led_verde = Pin(13, Pin.OUT)
led_blanco = Pin(14, Pin.OUT)
led_blanco.on()
def callback_recibida(topic, message):
print('\n Información recibida desde el broker MQTT \n tema = {0}, mensaje = {1}'.format(topic, message))
def on_connect():
print(f"Conectandose al broker MQTT {BROKER_MQTT}...", end="")
mqtt_client = MQTTClient(CLIENTE_MQTT, BROKER_MQTT, user=USUARIO_MQTT, password=CONTRASENA_MQTT)
mqtt_client.set_callback(callback_recibida)
mqtt_client.connect()
print(f"Conectado al broker MQTT {BROKER_MQTT}.")
mqtt_client.subscribe(MQTT_TEMA_DE_CONTROL)
return mqtt_client
def datos_del_sensor (flow_val):
data = ujson.dumps({
"Flujo de agua (L/m)": (30/1023) * flow_val,
})
return data
def on_publish(topic, data):
print("\nactualizando el broker MQTT...")
mqtt_client.publish(topic, data)
print(data)
wifi_client = network.WLAN(network.STA_IF)
wifi_client.active(True)
print("Conectando a la red WiFi")
wifi_client.connect(WIFI_SSID, CONTRASEÑA_DEL_WIFI)
while not wifi_client.isconnected():
print("Conectandose al WiFi")
time.sleep(0.1)
print("Conectado a la red WiFi")
print(wifi_client.ifconfig())
mqtt_client = on_connect()
"""
led_rojo.on()
"""
"""
led_verde.on()
"""
"""
led_blanco.on()
"""
on_publish(MQTT_TEMA_DE_CONTROL, 'holaa')
datos_antiguos_1 = "yo existí"
datos_antiguos_2 = "yo existí"
led_blanco.off()
while True:
mqtt_client.check_msg()
print(". ", end="")
"""
try:
caudalimetro.read()
except Exception as e: # Mejorar el manejo de excepciones
print(f"Error midiendo el sensor: {e}")
pass
time.sleep(0.2)
"""
caudal_actual = int(Caudalimetro.read())
datos_actualizados_1 = datos_del_sensor(caudal_actual)
if datos_actualizados_1 != datos_antiguos_1:
led_verde.on()
led_rojo.off()
on_publish(MQTT_TEMA_DE_TELEMETRIA, datos_actualizados_1)
datos_antiguos_1 = datos_actualizados_1
time.sleep(1)
else:
led_rojo.on()
led_verde.off()
time.sleep(1)