from machine import Pin, PWM
import dht
import time
import network
from umqtt.simple import MQTTClient
# WIFI
SSID = "Wokwi-GUEST"
PASSWORD = ""
# MQTT
BROKER = "broker.hivemq.com"
PORT = 1883
CLIENT_ID = "esp32_xavier_125"
TOPIC_TEMP = b"casa/temperatura"
TOPIC_MOV = b"casa/movimiento"
# CONECTAR WIFI
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
TOPIC_HUMEDAD = 5 ;
while not wifi.isconnected():
print("Conectando WiFi...")
time.sleep(1)
print("WiFi conectado")
# MQTT
client = MQTTClient(CLIENT_ID, BROKER)
client.connect()
print("MQTT conectado")
# SENSORES
sensor = dht.DHT22(Pin(4))
# ULTRASONICO
trig = Pin(5, Pin.OUT)
echo = Pin(18, Pin.IN)
def medir_distancia():
trig.off()
time.sleep_us(2)
trig.on()
time.sleep_us(10)
trig.off()
inicio = 0
fin = 0
while echo.value() == 0:
inicio = time.ticks_us()
while echo.value() == 1:
fin = time.ticks_us()
duracion = time.ticks_diff(fin, inicio)
distancia = (duracion * 0.034) / 2
return distancia
# ACTUADORES
servo1 = PWM(Pin(13), freq=50)
servo2 = PWM(Pin(12), freq=50)
buzzer = Pin(14, Pin.OUT)
# FUNCION SERVO
def mover_servo(servo, angulo):
duty = int((angulo / 180) * 75 + 40)
servo.duty(duty)
#LOOP
while True:
try:
#TEMPERATURA
sensor.measure()
temp = sensor.temperature()
print("Temp:", temp)
# ULTRASONICO
distancia = medir_distancia()
print("Distancia:", distancia)
# MOVIMIENTO
if distancia < 20:
movimiento = 1
else:
movimiento = 0
print("Movimiento:", movimiento)
if temp < 25:
mover_servo(servo1, 90)
mover_servo(servo2, 0)
else:
mover_servo(servo1, 0)
mover_servo(servo2, 90)
# bUZZER
if movimiento == 1:
buzzer.on()
else:
buzzer.off()
# MQTT
client.publish(TOPIC_TEMP, str(temp))
time.sleep(1)
client.publish(TOPIC_MOV, str(movimiento))
time.sleep(2)
except Exception as e:
print("Error:", e)