from wifi_lib import conecta
from umqttsimple import MQTTClient
import broker
import dht
from machine import Pin, ADC
import time
print("Configurando componentes...")
sensor_dht = dht.DHT22(Pin(15))
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB)
relay = Pin(23, Pin.OUT)
led = Pin(5, Pin.OUT)
def percentual_luminosidade(val_analogico_sensor):
luminosidade = ((4095 - val_analogico_sensor) / 4095) * 100
return f"{luminosidade:.2f}"
def controle_irrigacao(topic, msg):
if topic.decode() == "estufa/monitoramento/irrigacao":
if msg.decode() == "true":
relay.on() # Liga o relé
print("Sistema de irrigação ligado!")
elif msg.decode() == "false":
relay.off() # Desliga o relé
print("Sistema de irrigação desligado!")
else:
print("Mensagem não identificada!")
def controle_iluminacao(topic, msg):
if topic.decode() == "estufa/monitoramento/iluminacao":
if msg.decode() == "true":
led.on()
print("Sistema de iluminação ligado!")
elif msg.decode() == "false":
led.off()
print("Sistema de iluminação desligado!")
else:
print("Mensagem não identificada!")
def controle_ventilacao(topic, msg):
if topic.decode() == "estufa/monitoramento/ventilacao":
if msg.decode() == "true":
relay.on()
print("Sistema de ventilação ligado!")
elif msg.decode() == "false":
relay.off()
print("Sistema de ventilação desligado!")
else:
print("Mensagem não identificada!")
def callback(topic, msg):
# Chama as funções de controle apropriadas
controle_irrigacao(topic, msg)
controle_iluminacao(topic, msg)
controle_ventilacao(topic, msg)
print("Conectando...")
station = conecta ("Wokwi-GUEST","")
if not station.isconnected():
print("Falha na conexão")
else:
print("Conectado")
# Criação do cliente MQTT
client = MQTTClient(broker.mqtt_client_id,
broker.mqtt_server,
broker.mqtt_port,
broker.mqtt_user,
broker.mqtt_password)
try:
print("Tentando conectar ao HiveMQ...")
client.connect()
print("Conectado ao HiveMQ")
client.set_callback(callback)
client.subscribe("estufa/monitoramento/irrigacao")
client.subscribe("estufa/monitoramento/iluminacao")
client.subscribe("estufa/monitoramento/ventilacao")
except OSError as e:
print("Falha ao conectar ao HiveMQ:", e)
# Loop principal
while True:
try:
# Verifica mensagens MQTT
client.check_msg() # Verifica se há novas mensagens recebidas
# Leitura dos sensores
sensor_dht.measure()
temp = sensor_dht.temperature()
hum = sensor_dht.humidity()
ldr_value = ldr.read()
lum = percentual_luminosidade(ldr_value)
client.publish("estufa/medida/umidade", str(hum))
client.publish("estufa/medida/temperatura", str(temp))
client.publish("estufa/medida/luminosidade", str(lum))
print(f"Temperatura: {temp}°C | Umidade: {hum}% | Luminosidade: {lum}%")
except OSError as e:
print("Erro ao ler sensor ou enviar dados:", e)
time.sleep(2)
client.disconnect()
station.disconnect()