# Librerias
import machine
from machine import Pin
import time
from umqtt.simple import MQTTClient
import network
# ----
# Definiciones
ssid = 'Wokwi-GUEST'
wifipassword = ''
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
# ----
# Conexión a internet
sta_if.connect(ssid, wifipassword)
print("Conectando")
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print("")
print("Conectado a Internet")
# ----
# Conexión a los tópicos
mqtt_server = "io.adafruit.com"
port = 1883
user = "Dacal"
password = "aio_uwtS90vti3J1YoaCdWDGp9p590yg"
client_id_gauge = "Identificador"
topico_lectura="Dacal/feeds/Nueces"
# Conexión al broker
try:
conexionMQTT = MQTTClient(client_id_gauge, mqtt_server,user=user,password=password,port=int(port))
conexionMQTT.connect() #Hacemos la conexión.
print("Conectado con Broker MQTT")
except OSError as e:
#Si falló la conexión, reiniciamos todo
print("Fallo la conexion al Broker, reiniciando...")
time.sleep(5)
machine.reset()
# Funciones
def enviar_msg(msg):
try:
conexionMQTT.publish(topico_lectura,str(msg))
print(f'Mensaje enviado con exito: {msg}')
except OSError as e:
print("Error ",e)
time.sleep(5)
machine.reset()
# Función para medir la distancia
def get_distance():
# Generar pulso de disparo
trigger.off()
time.sleep_us(2)
trigger.on()
time.sleep_us(5)
trigger.off()
# Medir el tiempo de ida y vuelta del pulso
while echo.value() == 0:
pulse_start = time.ticks_us()
while echo.value() == 1:
pulse_end = time.ticks_us()
# Calcular la duración del pulso
pulse_duration = pulse_end - pulse_start
# Calcular la distancia en centímetros
distance = pulse_duration * 0.0343 / 2
return distance
TRIGGER_PIN = 27
ECHO_PIN = 26
trigger = Pin(TRIGGER_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
Rojo = Pin(5, Pin.OUT)
Amarillo = Pin(18, Pin.OUT)
Verde = Pin(19, Pin.OUT)
while True:
distance = get_distance()
print("Hay",distance,"cm")
time.sleep(1)
if distance < 100:
Rojo.off()
Amarillo.off()
verde.off()
time.sleep(1)
elif 100 <= distance < 200:
Rojo.off()
Amarillo.on()
Verde.on()
time.sleep(1)
elif distance >= 300:
Rojo.on()
Amarillo.on()
Verde.on()
time.sleep(1)