from machine import Pin, ADC
import time
import network
from umqtt.simple import MQTTClient
import dht
import ujson
#import paho.mqtt.client as paho
#from paho import mqtt
# Parametros del servidor MQTT
MQTT_CLIENT_ID = "MicroPython-Watreon-Alpha" #"hivemq.webclient.1746650937700" #!!
MQTT_BROKER = "broker.hivemq.com" #"hivemq.webclient.1746650937700"
MQTT_USER = "hivemq.webclient.1746650937700"
MQTT_PASSWORD = "diLKT*,:tPe78m5Sb3%G"
MQTT_TOPIC = "Watreon/Flujo_de_Agua" #!!
led_r = Pin (14, Pin.OUT)
led_v = Pin (26, Pin.OUT)
caudalimetro = ADC (Pin (34))
caudalimetro.width(ADC.WIDTH_10BIT)
caudalimetro.atten(ADC.ATTN_11DB)
# Coneccion a WIFI
print("Conectandose al WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print("Conectado!")
# Coneccion al servidor MQTT
print("Conectando al servidor MQTT... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("Conectado!")
#print("Connecting to MQTT server... ", end="")
#client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user = MQTT_USER, password = MQTT_PASSWORD)
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)
#client.username_pw_set("chaitu", "chaitu")
#client.connect("broker.hivemq.com", 8883)
#print("Connected!")
# Lectura del Caudalimetro
while True:
lectura = int(caudalimetro.read())
time.sleep_ms(500)
Agua = 75 / 1023
Flujo = Agua * lectura
if Flujo <= 0:
print ("No está pasando agua por el caudalímetro")
led_r.value(1)
led_v.value(0)
if Flujo > 0 and Flujo < 75:
print (f"se están usando {Flujo} Litros por segundo de agua en la casa")
led_r.value(0)
led_v.value(1)
if Flujo >= 75:
print ("conecte el caudalimetro a una tuberia de 25mm o menor")
led_r.value(1)
led_v.value(0)
time.sleep_ms(500)
# Publicacion en MQTT
Flujo_Previo = ""
while True:
print("Measuring weather conditions... ", end="")
caudalimetro.measure()
message = ujson.dumps({
Flujo_de_Agua: caudalimetro()
})
if message != Flujo_Previo:
print("Actualizado!")
print("Reportando al tema de MQTT {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message)
client.publish("Watreon/Flujo del Agua", payload=message, qos=2)
Flujo_Previo = message
else:
print("Sin cambios")
time.sleep(1)