import network
import machine
import ubinascii
import time
from umqttsimple import MQTTClient
# Configuração da rede Wi-Fi
rede = network.WLAN(network.STA_IF)
rede.active(True)
rede.connect('Wokwi-GUEST', '')
while not rede.isconnected():
print('.', end="")
time.sleep(1)
print("Conectado:", rede.ifconfig())
# Configuração do servidor MQTT
mqtt_server = b'4166df98726c4a0cb6bcbd279ddc281a.s1.eu.hivemq.cloud'
port = 8883
user = b'cotuca'
pwd = b'cotuca'
client_id = ubinascii.hexlify(machine.unique_id())
topic_pub = b'tf_dist'
topic_sub = b'trab_final'
# Pinos dos LEDs
led_verde = machine.Pin(2, machine.Pin.OUT)
led_amarelo = machine.Pin(4, machine.Pin.OUT)
led_vermelho = machine.Pin(5, machine.Pin.OUT)
# Pinos do sensor ultrassônico
trigger = machine.Pin(12, machine.Pin.OUT)
echo = machine.Pin(13, machine.Pin.IN)
# Função para medir a distância
def medir_distancia():
# Enviar pulso de 10 microsegundos para o pino trigger
trigger.value(0)
time.sleep_us(2)
trigger.value(1)
time.sleep_us(10)
trigger.value(0)
# Medir o tempo que o sinal leva para voltar ao pino echo
while echo.value() == 0:
pulse_start = time.ticks_us()
while echo.value() == 1:
pulse_end = time.ticks_us()
pulse_duration = time.ticks_diff(pulse_end, pulse_start)
distancia = pulse_duration * 0.0343 / 2 # Velocidade do som em cm/us
return distancia
# Função de callback para tratar mensagens recebidas
def sub_callback(topic, msg):
print(f"Mensagem recebida no tópico {topic}: {msg}")
try:
import ujson
data = ujson.loads(msg)
if data.get("ra") == "23537": # Substitua pelo seu RA
led = data.get("led")
if led == 1:
print("a")
led_verde.value(1)
elif led == 2:
print("b")
led_amarelo.value(1)
elif led == 3:
print("c")
led_vermelho.value(1)
else:
print("LED inválido")
else:
print("RA inválido")
except Exception as e:
print("Erro ao processar a mensagem:", e)
# Conexão ao MQTT
try:
client = MQTTClient(client_id, mqtt_server, port=port, user=user, password=pwd, ssl=True, ssl_params={'server_hostname': mqtt_server})
client.set_callback(sub_callback)
client.connect()
client.subscribe(topic_sub)
print("Conectado ao servidor MQTT e inscrito no tópico", topic_sub)
except OSError as e:
print(e)
time.sleep(5)
machine.reset()
# Loop principal
while True:
try:
# Leitura do sensor de distância
distancia = medir_distancia()
print(f"Distância: {distancia:.2f} cm")
# Publicar mensagem no tópico `tf_dist`
msg = f'{{ "ra": "23537", "ra2": "12345", "dist": {distancia:.2f} }}'
client.publish(topic_pub, msg)
print(f"Mensagem publicada: {msg}")
# Processar mensagens recebidas
client.check_msg()
# Desligar LEDs após publicação
led_verde.value(0)
led_amarelo.value(0)
led_vermelho.value(0)
# Esperar 30 segundos
time.sleep(5)
except Exception as e:
print("Erro no loop principal:", e)
time.sleep(5)
machine.reset()