#Site referência: http://www.hivemq.com/demos/websocket-client/
"""
Explicação do MQTT
Imaginemos que o tópico é uma pasta em que uma podem ser armazenados
os dados (PUBLISH)
Agora para receber os dados usamos uma outra pasta (SUBSCRIBE)
Até podemos fazer tudo com um só tópico, pois é uma relação que
vai e volta para os clientes. Porém acho mais prático deixar
separado para evitar algum tipo de conflito
"""
import network #Conexão com a rede
import time #Time para aguardar a conexão com a rede
import ujson #Transforma os dados recebidos no formato JSON
from umqtt.simple import MQTTClient #Criação do objeto cliente por aqui
from machine import Pin #Conexão do LED
# MQTT Server Parâmetros
MQTT_CLIENT_ID = "jodie" #Nome do objeto aqui
MQTT_BROKER = "broker.mqttdashboard.com" #Local que recebe e armazena os dados
MQTT_TOPIC_PUBLISH = "led/publish" #Publica os dados
MQTT_TOPIC_SUBSCRIBE = "led/subscribe" #Recebe os dados
MQTT_USER = ""
MQTT_PASSWORD = ""
led = Pin(25, Pin.OUT)
#led2 = Pin(34, Pin.OUT)
led.off()
#led2.off()
switch = Pin(19, Pin.IN, Pin.PULL_UP)
#função com a resposta do topico selecionado
def callback(topic, msg):
print("Mensagem recebida: ", msg.decode())
print("Conectando ao WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
#Aguada a conexão
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print("Conectado!")
#Agora iremos se conectar com o servidor
print("Conectado a MQTT server... ", end="")
#Criando o cliente
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
#Criando um novo retorno de informação
client.set_callback(callback)
#Conectando no cliente
client.connect()
print("Conectado!")
# Publicação da mensagem
#client.publish(MQTT_TOPIC_PUBLISH, "Funcionou na 1ª parte")
#Fazendo inscrição no tópico "mensagens" para que o sensor r ecebe a mensagem
client.subscribe(MQTT_TOPIC_SUBSCRIBE)
old_value = ""
while True:
client.check_msg()
switch_value = switch.value()
if switch_value != old_value:
if switch.value() == 0:
led.on()
client.publish(MQTT_TOPIC_PUBLISH, "1")
else:
led.off()
client.publish(MQTT_TOPIC_PUBLISH, "0")
old_value = switch_value
time.sleep(0.1)