import network
import time
from machine import Pin, PWM
import dht
from umqtt.simple import MQTTClient
import _thread
# Configurações MQTT
MQTT_CLIENT_ID = "esp1"
MQTT_BROKER = "broker.hivemq.com"
MQTT_TOPIC1 = "exp.c.receber"
MQTT_TOPIC2 = "exp.c.enviar"
# Configuração do Wi-Fi
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
time.sleep(0.1)
print("Connected to WiFi")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.connect()
dht_sensor1 = dht.DHT22(Pin(18))
dht_sensor2 = dht.DHT22(Pin(5))
servo1 = PWM(Pin(21), freq=50)
servo2 = PWM(Pin(15), freq=50)
slide_switch_send = Pin(34, Pin.IN, Pin.PULL_UP)
def set_servo_angle(servo, angle):
if angle < 0:
angle = 0
elif angle > 180:
angle = 180
duty = int((angle / 180) * 1023)
servo.duty(duty)
# Função para enviar mensagens
def send_message(topic, message):
client.publish(topic, message)
# Função de monitoramento dos sensores
def monitor_sensors():
while True:
dht_sensor1.measure()
temp1 = dht_sensor1.temperature()
hum1 = dht_sensor1.humidity()
dht_sensor2.measure()
temp2 = dht_sensor2.temperature()
hum2 = dht_sensor2.humidity()
# Monitoramento do sensor 1
if temp1 >= 60:
set_servo_angle(servo1, 50) # Abre comporta 1
if slide_switch_send.value() == 0:
send_message(MQTT_TOPIC2, "temperature_high_1")
# Monitoramento do sensor 2
if temp2 >= 60:
set_servo_angle(servo2, 180) # Abre comporta 2
if slide_switch_send.value() == 0:
send_message(MQTT_TOPIC2, "temperature_high_2")
# Verificação de umidade para ambos os sensores
if hum1 < 20 or hum2 < 20:
if slide_switch_send.value() == 0:
send_message(MQTT_TOPIC2, "humidity_low")
else:
if slide_switch_send.value() == 0:
send_message(MQTT_TOPIC2, "humidity_normal")
time.sleep(1) # Delay for 1 second
# Função para enviar mensagens periodicamente
def periodic_task():
while True:
time.sleep(1) # Delay for periodic tasks
# Iniciar threads
_thread.start_new_thread(monitor_sensors, ())
_thread.start_new_thread(periodic_task, ())
# Loop principal
while True:
time.sleep(1) # Evita que o script principal termine