import network
import time
from umqtt.simple import MQTTClient
import dht
from machine import Pin
import json
# ----------- Configurações Wi-Fi -----------
SSID = "Wokwi-GUEST"
PASSWORD = ""
# ----------- Configurações MQTT/Blynk -----------
BROKER = "blynk.cloud"
PORT = 1883
# 🔑 SEU TOKEN MAIS RECENTE, EXTRAÍDO DO CÓDIGO C++
BLYNK_TOKEN = "V9hOKyWzaDEdl4i6CI6JR1QUChTgSlzq"
# --- TÓPICOS MQTT CORRETOS PARA O BLYNK ---
TOPIC_TELEMETRY = "v1/devices/me/telemetry"
# Usando o Pino Virtual V0 para o LED, conforme o template Quickstart
TOPIC_LED_WRITE = "v1/devices/me/write/V0"
# ----------- Sensores e atuadores -----------
dht_sensor = dht.DHT22(Pin(15))
led = Pin(2, Pin.OUT)
# ----------- Conectar ao Wi-Fi -----------
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
print("🔌 Conectando ao Wi-Fi...")
while not wifi.isconnected():
time.sleep(1)
print(f"✅ Conectado ao Wi-Fi!")
# ----------- Conectar ao broker MQTT -----------
client = MQTTClient("esp32-wokwi-client", BROKER, PORT, user=BLYNK_TOKEN, password="")
try:
client.connect()
print("✅ Conectado ao Blynk!")
except Exception as e:
print(f"❌ Falha ao conectar ao Blynk. Verifique se o TOKEN está correto. Erro: {e}")
while True:
pass # Para o programa se não conseguir conectar
# ----------- Loop principal -----------
while True:
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
umid = dht_sensor.humidity()
print(f"🌡️ Temp: {temp:.1f} °C | 💧 Umidade: {umid:.1f} %")
# 1. Enviar dados de telemetria (sensores) para o Blynk
payload = {
"temperature": temp,
"humidity": umid
}
client.publish(TOPIC_TELEMETRY, json.dumps(payload))
print("📤 Dados de telemetria enviados.")
# 2. Controlar o LED
if temp > 28:
led.value(1)
client.publish(TOPIC_LED_WRITE, "1")
else:
led.value(0)
client.publish(TOPIC_LED_WRITE, "0")
except OSError as e:
print(f"⚠️ Erro ao ler o sensor DHT: {e}")
except Exception as e:
print(f"🚨 Erro no loop: {e}")
time.sleep(5)