import network
import time
import json
import dht
from machine import Pin
from neopixel import NeoPixel
from umqtt.simple import MQTTClient
SSID = "Wokwi-GUEST"
PASSWORD = ""
MQTT_BROKER = "broker.hivemq.com"
MQTT_PORT = 1883
CLIENT_ID = "esp32-turma-iot-2"
TOPIC_PUB = b"iot/aluno/temperatura"
TOPIC_SUB = b"iot/aluno/anel"
sensor = dht.DHT22(Pin(12))
NUM_PIXELS = 16
np = NeoPixel(Pin(17), NUM_PIXELS)
def apagar():
for i in range(NUM_PIXELS):
np[i] = (0, 0, 0)
np.write()
def acender(cor):
for i in range(NUM_PIXELS):
np[i] = cor
np.write()
apagar()
def conectar_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Conectando ao WiFi...")
while not wlan.isconnected():
time.sleep(1)
print("WiFi conectado:", wlan.ifconfig())
def callback(topic, msg):
print("Mensagem recebida:", topic, msg)
try:
cor = json.loads(msg)
except Exception as e:
print("Erro ao ler JSON:", e)
return
if isinstance(cor, list) and len(cor) == 3:
r, g, b = cor
acender((r, g, b))
else:
print("Formato invalido, use [r,g,b]")
conectar_wifi()
client = MQTTClient(CLIENT_ID, MQTT_BROKER, port=MQTT_PORT)
client.set_callback(callback)
client.connect()
client.subscribe(TOPIC_SUB)
print("Conectado ao broker MQTT")
ultimo_envio = time.time()
ultima_mensagem = ""
while True:
client.check_msg()
if time.time() - ultimo_envio >= 5:
try:
sensor.measure()
temp = sensor.temperature()
umid = sensor.humidity()
dados = {"temperatura": temp, "umidade": umid}
mensagem = json.dumps(dados)
if mensagem != ultima_mensagem:
print("Enviando:", mensagem)
client.publish(TOPIC_PUB, mensagem)
ultima_mensagem = mensagem
else:
print("Sem mudanca, nao enviado")
except OSError as e:
print("Erro ao ler sensor:", e)
ultimo_envio = time.time()
time.sleep(0.1)