import network
import time
from umqtt.simple import MQTTClient
from machine import Pin
import dht
import ujson
# Configurações MQTT
mqtt_server = "mqtt-dashboard.com"
mqtt_port = 1883
mqtt_user = ""
mqtt_password = ""
mqtt_client_id = "clientId-3xJ8k03OlH-wifi"
topic_sub = "greenguard/controle"
topic_pub_temp = "greenguard/temperatura"
topic_pub_hum = "greenguard/umidade"
# Configuração dos pinos
LED = Pin(5, Pin.OUT) # LED no pino 5
sensor = dht.DHT22(Pin(15)) # Sensor DHT22 no pino 15
# Função para conectar ao WiFi
def conecta_wifi():
print("Conectando ao WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '') # Rede padrão do WokWi
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.5)
print("\nConectado ao WiFi!")
return sta_if
# Função de callback para quando uma mensagem MQTT for recebida
def recebi(topico, msg):
print(f"Mensagem recebida: Tópico={topico.decode()} Mensagem={msg.decode()}")
comando = msg.decode().upper()
if comando == "LIGA":
LED.on()
print("LED ligado.")
elif comando == "DESLIGA":
LED.off()
print("LED desligado.")
elif comando == "PISCAR":
piscar_led = True
print("LED piscando.")
# Função para conectar ao broker MQTT
def conecta_mqtt():
client = MQTTClient(mqtt_client_id, mqtt_server, mqtt_port, mqtt_user, mqtt_password)
client.set_callback(recebi)
while True:
try:
client.connect()
client.subscribe(topic_sub)
print(f"Conectado ao Broker MQTT e inscrito no tópico: {topic_sub}")
break
except Exception as e:
print(f"Erro ao conectar ao Broker MQTT: {e}. Tentando novamente em 5 segundos...")
time.sleep(5)
return client
# Conectar ao WiFi
sta_if = conecta_wifi()
# Conectar ao Broker MQTT
client = conecta_mqtt()
# Loop principal
while True:
try:
# Leitura do sensor de temperatura e umidade
sensor.measure()
temperatura = sensor.temperature()
umidade = sensor.humidity()
# Publicar os dados de temperatura e umidade em tópicos separados
client.publish(topic_pub_temp, ujson.dumps(temperatura))
print(f"Temperatura publicada: {temperatura} °C")
client.publish(topic_pub_hum, ujson.dumps(umidade))
print(f"Umidade publicada: {umidade} %")
# Verifica se há mensagens recebidas para controle do LED
client.check_msg()
# Aguardar um pouco antes de repetir
time.sleep(10)
except OSError as e:
print(f"Erro: {e}, tentando reconectar...")
sta_if = conecta_wifi()
client = conecta_mqtt()