from machine import Pin, I2C
from neopixel import NeoPixel
from ssd1306 import SSD1306_I2C
from rede import Rede
from time import sleep_ms
from umqttsimple import MQTTClient
import ujson # Certifique-se de usar ujson para carregar JSON
# Inicializações
i2c = I2C(0)
oled = SSD1306_I2C(128, 64, i2c)
np = NeoPixel(Pin(17, Pin.OUT), 1)
pixels = NeoPixel(Pin(2, Pin.OUT), 3)
botoes = (Pin(19, Pin.IN, Pin.PULL_DOWN),
Pin(18, Pin.IN, Pin.PULL_DOWN),
Pin(16, Pin.IN, Pin.PULL_DOWN))
b = [0, 0, 0]
bAnt = [0, 0, 0]
topicos = (b'/ifrsgauto/projetos/sala/luminaria/comando',
b'/ifrsgauto/projetos/sala/luminaria/c2',
b'/ifrsgauto/projetos/sala/luminaria/c3')
msgOn = (b'{"modo":"manual", "nivel":3}',
b'acionei o c2',
b'acionei o c3')
msgOff = (b'{"modo":"manual", "nivel":0}',
b'desliguei o c2',
b'desliguei o c3')
def indica(arg):
np[0] = arg
np.write()
def indica2(arg):
oled.fill(0)
oled.text(arg, 10, 10)
oled.show()
net = Rede('Wokwi-GUEST', '', cb=indica2)
indica((255, 128, 0))
indica2('Desconectando')
net.desconectar()
'''
def trataMsg(topico, conteudo):
global automatico, c
print(topico, ',', conteudo)
if topico == topcomandos:
texto = conteudo.decode()
dados = ujson.loads(texto)
if 'modo' in dados:
automatico = dados['modo'] == 'automatico'
if 'nivel3' in dados:
c = dados['nivel3']
topcomandos = '/ifrsgauto/projetos/sala/luminaria/comando'
'''
# Verificação da Conexão
conexao = True # Defina como True ou False conforme necessário
'''
if conexao:
cliente = MQTTClient('broker.hivemq.com', '2024S1lumnini')
cliente.set_callback(trataMsg) # Certifique-se de que a função `trataMsg` é usada
cliente.connect()
cliente.subscribe(topcomandos)
'''
indica((255, 255, 0))
indica2('Conectando')
if not net.conectado:
net.configurar('192.168.0.204', '255.255.255.0', '192.168.0.1', '8.8.8.8')
net.conectar()
if net.conectado:
indica((0, 0, 255))
indica2('Conectado')
mqtt = MQTTClient('xxy2024S1lumnini', 'broker.hivemq.com')
mqtt.connect()
else:
indica((255, 0, 0))
indica2('Desconectado')
while True:
for posicao in range(3):
b[posicao] = botoes[posicao].value()
if b[posicao] != bAnt[posicao]:
if b[posicao] == 1:
if pixels[posicao] != (0, 0, 0):
pixels[posicao] = (0, 0, 0)
if net.conectado:
mqtt.publish(topico[posicao], msgOff[posicao])
else:
pixels[posicao] = (0, 0, 255)
if net.conectado:
mqtt.publish(topico[posicao], msgOn[posicao])
pixels.write()
sleep_ms(200)
bAnt[posicao] = b[posicao]