from network import WLAN, STA_IF
from machine import Pin, ADC
from umqtt.robust import MQTTClient
from time import sleep_ms
from json import dumps
# Importações
rede = WLAN(STA_IF) # Definições do tipo de rede
rede.active(True) # Ativa a rede
if not rede.isconnected(): # Enquanto a rede não estiver conectada
rede.connect("Wokwi-GUEST","") # Conecte na rede do Wokwi
tentativas = 0 # Começa um contador de 20 tentativas até conectar a rede
while not rede.isconnected() and tentativas <= 20: # Loop de tentativas
sleep_ms(200) # Dá um tempo
tentativas += 1 # Atualiza o contador
pot1 = ADC(Pin(33), atten=ADC.ATTN_11DB) # Configuração do potenciômetro + atenuação
pot2 = ADC(Pin(32), atten=ADC.ATTN_11DB) # Configuração do potenciômetro + atenuação
bot = Pin(22, Pin.IN, Pin.PULL_DOWN) # Configuração do botão
velho = novo = bot.value() # Estados do botão
topico = b'ifrs/auto/marombas/angulos' # Define o tópico
fofa = True # Variável criada para condicional
def informante (t, p): # Função para tópico e payload (conteúdo)
if t == topico: # Caso o t seja igual ao tópico
if resp = c.decode(): # Caso receba ok da simulação dos motores
fofa = True # Variável volta a ser verdadeira
else: # Caso contrário
print (t, p) # Printe o t e o p
bb = MQTTClient('27012010', 'broker.hivemq.com') # Gerencia a conexão com o broker
bb.set_callback(informante) # Quando receber uma msg, executa isso
bb.connect() # Conecta ao broker
bb.subscribe(topico) # Se inscreve no tópico
while True:
bb.check_msg() # Verifica se recebeu alguma msg
lido = pot1.read_u16() # Realiza a leitura do ADC de 0 a 65535
ang1 = (lido * 360) / 65535 # Calcula o ângulo correspondente ao valor lido
sleep_ms(200) # Espera um tempo
medido = pot2.read_u16() # Realiza a leitura do ADC de 0 a 65535
ang2 = (medido * 360) / 65535 # Calcula o grau correspondente ao valor lido
sleep_ms(200) # Espera um tempo
print(ang1, ang2) # Printa os ângulos
info = {"angulo 1": ang1, "angulo 2": ang2} # Separa os ângulos em um dicionário
novo = bot.value() # Atualiza o valor do botão na variável novo
if novo != velho: # Algo aconteceu, mudou os valores e são diferentes
if novo == 1: # Realiza algum comando somente para quando o botão for pressionado
if fofa == True: # Caso minha variável seja verdadeira, faz isso
bb.publish(topico, dumps(info).encode()) # Pública o tópico que foi transformado em JSON e depois em bytes
fofa = False # Transforma minha variável em falsa
velho = novo # Atualiza os estados do botão
sleep_ms(100) # Dá um tempo
bb.disconnect() # Desconecta o brocker