""" Descripción detallada del main.py del poyecto MicroPython MQTT Weather Logger """
""" Importación de módulos y librerías necesarias """
# Este comando realiza la importación de la librería de MicroPython "network".
# Se utiliza para manejar configuraciones y operaciones de red en dispositivos que ejecutan MicroPython.
import network
# Este comando realiza la importación de la biblioteca en MicroPython "time".
# Se utiliza para manejar funciones relacionadas con el tiempo.
import time
# Importación de la clase "Pin" del módulo "machine".
# La clase "Pin" se utiliza para controlar pines de entrada/salida de propósito general (GPIO)
# en dispositivos que ejecutan MicroPython.
from machine import Pin
# Importación del módulo "dht" para interactuar con el sensor DHT22.
# El módulo "dht" proporciona funcionalidades para leer datos del sensor de temperatura y humedad DHT22.
import dht
# Importación del módulo "ujson" para manejar operaciones JSON
# El módulo "ujson" se utiliza para realizar operaciones relacionadas con la manipulación de datos en formato JSON.
import ujson
# Importación de la clase "MQTTClient" del módulo "umqtt.simple".
# La clase "MQTTClient" se utiliza para realizar comunicación MQTT en MicroPython.
from umqtt.simple import MQTTClient
""" Dedinicón de parámetros del Servidor MQTT """
# Nota: definen la configuración necesaria para la comunicación con un servidor MQTT.
# "MQTT_CLIENT_ID": Identificación única del cliente MQTT.
# Asegura que el cliente sea reconocido de manera única en el servidor MQTT.
MQTT_CLIENT_ID = "micropython-weather-demo"
# "MQTT_BROKER": Dirección del broker MQTT al que se conectará el cliente.
# Nota: En este caso, "broker.mqttdashboard.com" es un servidor MQTT de demostración.
MQTT_BROKER = "broker.mqttdashboard.com"
# "MQTT_USER" y "MQTT_PASSWORD": Son las credenciales (nombre de usuario y contraseña)
# utilizadas para la autenticación en el servidor MQTT.
# Nota: En este caso, están en blanco, lo que significa que la autenticación no está habilitada o no se requiere.
MQTT_USER = ""
MQTT_PASSWORD = ""
# "MQTT_TOPIC": Es el tema (o topic) al que el cliente MQTT enviará los datos del clima.
# Nota: En este caso, "wokwi-weather" es el tema específico utilizado para este propósito.
MQTT_TOPIC = "wokwi-weather"
# Configuración del Sensor DHT22.
# Se crea una instancia del objeto DHT22 del módulo "dht" y se asigna al objeto "sensor".
# Pin de conexión del sensor DHT22 al ESP32 (GPIO 15).
sensor = dht.DHT22(Pin(15))
# Muestra en la consola un mensaje indicando que se está intentando conectar a la red WiFi.
print("Connecting to WiFi", end="")
""" Configuración y conexión a la red WiFi """
# Se utiliza la interfaz de estación (STA) del objeto WLAN para conectarse a una red WiFi.
# Creación de la instancia STA_IF del objeto WLAN.
sta_if = network.WLAN(network.STA_IF)
# Activa la interfaz de red inalámbrica (WiFi) en el objeto de interfaz de estación "sta_if".
sta_if.active(True)
# Intenta establecer una conexión a la red WiFi con el nombre 'Wokwi-GUEST' y sin contraseña.
sta_if.connect('Wokwi-GUEST', '')
# Realiza un bucle mientras la interfaz de estación "sta_if" no esté conectada a la red WiFi.
while not sta_if.isconnected():
# Muestra puntos en la consola durante el proceso de conexión y espera 0.1 segundos entre cada punto.
print(".", end="")
time.sleep(0.1)
# Cuando la conexión se establece, imprime " Connected!".
print(" Connected!")
# Imprime en la consola el mensaje "Connecting to MQTT server... " sin cambiar de línea.
print("Connecting to MQTT server... ", end="")
""" Configuración y cinexión del cliente MQTT """
# Crea una instancia del cliente MQTT con los parámetros proporcionados: ID del cliente, dirección del broker MQTT,
# nombre de usuario y contraseña.
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
# Establece la conexión con el servidor MQTT utilizando los parámetros configurados en la instancia del cliente.
client.connect()
# Imprime en la consola el mensaje "Connected!" indicando que la conexión con el servidor MQTT se ha
#establecido con éxito.
print("Connected!")
# Inicializa una variable llamada 'prev_weather' con una cadena vacía. Esta variable se utilizará para almacenar
# el estado anterior de las condiciones meteorológicas.
prev_weather = ""
""" Bucle principal para medir y enviar datos """
while True:
# Imprime en la consola el mensaje "Measuring weather conditions... " sin cambiar de línea.
print("Measuring weather conditions... ", end="")
# Realiza una medición de las condiciones meteorológicas utilizando el sensor DHT22.
sensor.measure()
# Convierte las lecturas de temperatura y humedad en formato JSON y las asigna a la variable 'message'.
message = ujson.dumps({
"temp": sensor.temperature(),
"humidity": sensor.humidity(),
})
# Imprime en la consola el mensaje "Updated!" si las condiciones meteorológicas han cambiado.
if message != prev_weather:
print("Updated!")
# Imprime en la consola la información sobre la actualización y el mensaje JSON que se enviará al servidor MQTT.
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
# Publica el mensaje JSON en el servidor MQTT bajo el tema especificado.
client.publish(MQTT_TOPIC, message)
# Actualiza el estado previo de las condiciones meteorológicas con el mensaje actualizado.
prev_weather = message
# Imprime en la consola el mensaje "No change" si las condiciones meteorológicas no han cambiado.
else:
print("No change")
# Espera 1 segundo antes de realizar la siguiente iteración del bucle.
time.sleep(1)
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4