#------------------------------ [IMPORTACIÓN DE MÓDULOS]-------------------------------
import network, time, urequests # Módulos para conexión Wi-Fi, manejo de tiempo y solicitudes HTTP
from machine import Pin, ADC, PWM # Manejo de pines, ADC (entrada analógica), PWM (salida pulsos)
import dht # Librería para sensores de temperatura/humedad DHT
import utime # Manejo de tiempo alternativo
import ujson # Manejo de JSON en MicroPython
from umqtt.simple import MQTTClient # Librería para comunicación MQTT
#--------------------------- [CONFIGURACIÓN MQTT]--------------------------------------
# Parámetros para conectarse al servidor MQTT
MQTT_CLIENT_ID = "nose" # Identificador único para el cliente MQTT
MQTT_BROKER = "broker.hivemq.com" # Dirección del servidor MQTT (HiveMQ en este caso)
MQTT_USER = "" # Usuario (vacío para brokers públicos)
MQTT_PASSWORD = "" # Contraseña (vacío para brokers públicos)
MQTT_TOPIC = "grupo/uno" # Tópico donde se publican los datos
#--------------------------- [OBJETO SENSOR]------------------------------------------
# Configuración del sensor DHT22 para medir temperatura y humedad
sensor = dht.DHT22(Pin(15)) # Sensor conectado al pin 15
#---------------------- [FUNCIÓN CONEXIÓN WIFI]---------------------------------------
def conectaWifi(red, password):
"""
Conecta el microcontrolador a una red Wi-Fi.
"""
global miRed
miRed = network.WLAN(network.STA_IF) # Configura la interfaz en modo estación
if not miRed.isconnected(): # Si no está conectado…
miRed.active(True) # Activa la interfaz Wi-Fi
miRed.connect(red, password) # Conecta a la red Wi-Fi
print('Conectando a la red', red + "…")
timeout = time.time()
while not miRed.isconnected(): # Espera hasta que la conexión sea exitosa
if time.ticks_diff(time.time(), timeout) > 10: # Tiempo límite: 10 segundos
return False
return True # Devuelve True si la conexión fue exitosa
#------------------------------------ [PROGRAMA PRINCIPAL] ----------------------------
if conectaWifi("Wokwi-GUEST", ""): # Intenta conectarse a la red Wi-Fi
print("Conexión exitosa!") # Mensaje de éxito
print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig()) # Muestra información de red
# Conexión al servidor MQTT
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect() # Conecta al servidor MQTT
print("Connected!") # Mensaje de éxito
# Publicación de datos en MQTT
prev_weather = "" # Variable para almacenar el último estado del clima
while True: # Bucle infinito
print("Measuring weather conditions... ", end="")
sensor.measure() # Realiza la medición con el sensor
# Crea un mensaje en formato JSON con los datos del sensor
message = ujson.dumps({
"temp": sensor.temperature(), # Temperatura medida
"humidity": sensor.humidity(), # Humedad medida
})
if message != prev_weather: # Si los datos han cambiado desde la última medición
print("Updated!") # Indica que los datos se han actualizado
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message) # Publica los datos en el tópico MQTT
prev_weather = message # Actualiza el estado previo
else:
print("No change") # Si no hay cambios, indica que los datos son iguales
time.sleep(1) # Espera 1 segundo antes de la próxima medición
else:
print("Imposible conectar") # Si no puede conectarse al Wi-Fi, muestra un mensaje de error
miRed.active(False) # Desactiva la interfaz Wi-Fi