import network
import dht
import ujson
from machine import Pin
from time import sleep
from umqtt.simple import MQTTClient
ssid = "Wokwi-GUEST"
password = ""
mqtt_server = "broker.hivemq.com"
client_id = "esp32_JCMV_IoT_cnad" # Id único de mi dispositivo - colocar cualquier nombre
topic_pub_datos = b"cnad/cursos_iot/grupo01/esp32_01/datos" # Tópico de publicación
topic_sub_led = b"cnad/cursos_iot/grupo01/esp32_01/led/set" # Tópico de subscripción
topic_pub_estado = b"cnad/cursos_iot/grupo01/esp32_01/led/status" # Tópico de publicación
sensor = dht.DHT22(Pin(15))
led = Pin(2, Pin.OUT)
led_state = False
def connect_wifi(ssid, password):
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
while not wifi.isconnected():
print("Conectando a Wi-Fi")
sleep(1)
print("Wi-Fi Conectado")
print(f"Configuración de red: {wifi.ifconfig()}")
def led_state_publisher(client):
state_message = {
"device_id": client_id,
"led": led_state
}
state_payload = ujson.dumps(state_message)
client.publish(topic_pub_estado, state_payload)
print(f"Estado publicado: {state_payload}")
def callback_msg(topic, msg):
global led_state
print("Mensaje recibido")
print(f"Tópico: {topic}")
print(f"Mensaje: {msg}")
if msg == b"on":
led.value(1)
led_state = True
print("LED encendido")
elif msg == b"off":
led.value(0)
led_state = False
print("LED apagado")
else:
print("Comando no reconocido")
def mqtt_connection():
client = MQTTClient(client_id, mqtt_server)
client.set_callback(callback_msg)
client.connect()
client.subscribe(topic_sub_led)
print("Conectado al broker MQTT")
print("Subscito a", topic_sub_led)
return client
connect_wifi(ssid, password)
client = mqtt_connection()
while True:
client.check_msg()
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
data_message = {
"device_id": client_id,
"temperatura": temperature,
"humidity": humidity,
"led": led_state
}
data_payload = ujson.dumps(data_message)
print(f"Publicando datos: {data_payload}")
client.publish(topic_pub_datos, data_payload)
led_state_publisher(client)
sleep(1)