from machine import Pin, I2C
import time
import network
from umqtt.simple import MQTTClient
from ssd1306 import SSD1306_I2C
# Configurações
SSID = "Wokwi-GUEST"
SENHA = ""
MQTT_BROKER = "broker.mqttdashboard.com"
TOPICO = "casa/led"
# Hardware - ATENÇÃO às mudanças nos pinos!
led = Pin(33, Pin.OUT) # Mudamos para GPIO15 (evita conflitos)
botao = Pin(0, Pin.IN) # Botão virtual no Wokwi (sem PULL_UP!)
# Display OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
display = SSD1306_I2C(128, 64, i2c)
def atualizar_display(estado):
display.fill(0)
display.text("LED: " + ("ON" if estado else "OFF"), 0, 20)
display.text("Botao: " + str(botao.value()), 0, 40)
display.show()
def callback(topic, msg):
msg = msg.decode()
if msg == "ON":
led.on()
elif msg == "OFF":
led.off()
atualizar_display(led.value())
# Conexões
def setup():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, SENHA)
while not wifi.isconnected():
time.sleep(0.1)
client = MQTTClient("wokwi", MQTT_BROKER)
client.set_callback(callback)
client.connect()
client.subscribe(TOPICO)
return client
# Main
try:
mqtt = setup()
ultimo_estado = botao.value()
atualizar_display(led.value())
while True:
estado_atual = botao.value()
if estado_atual != ultimo_estado:
ultimo_estado = estado_atual
if estado_atual == 0:
mqtt.publish(TOPICO, "ligado")
print("Botão pressionado! Enviado: ligado")
else:
mqtt.publish(TOPICO, "desligado")
print("Botão solto! Enviado: desligado")
mqtt.check_msg()
atualizar_display(led.value())
time.sleep(0.05)
except Exception as e:
print("Erro:", e)