# Importación de los módulos necesarios
# Gestión de WiFi
7. import network
8. # Proporciona funciones relacionadas con el tiempo
9. import time
10. # Permite el control del hardware, aquí los pines
11. from machine import Pin
12. # Manejador de sensores DHT (DHT11, DHT22)
13. import dht
14. # Permite la manipulación de datos JSON
15. import ujson
16. # Proporciona funcionalidades para conectarse a un servidor MQTT
17. from umqtt.simple import MQTTClient
18.
19. # Configuración del servidor MQTT
20. MQTT_CLIENT_ID = "micropython-weather-demo"
21. MQTT_BROKER = "broker.mqttdashboard.com"
22. MQTT_USER = ""
23. MQTT_PASSWORD = ""
24. MQTT_TOPIC = "wokwi-weather"
25.
26. # Inicialización del sensor DHT22 en el pin 15
27. sensor = dht.DHT22(Pin(15))
28.
29. # Conexión a la red WiFi
30. print("Connecting to WiFi", end="")
31. # Se configura el WiFi en modo estación (STA)
32. sta_if = network.WLAN(network.STA_IF)
33. sta_if.active(True)
34. # Se conecta a la red 'Wokwi-GUEST'
35. sta_if.connect('Wokwi-GUEST', '')
36. # Se espera hasta que la conexión se establezca
37. while not sta_if.isconnected():
38. print(".", end="")
39. time.sleep(0.1)
40. print(" Connected!")
41.
42. # Conexión al servidor MQTT
43. print("Connecting to MQTT server... ", end="")
44. client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
45. client.connect()
46. print("Connected!") # Notifica la conexión exitosa al servidor MQTT
47.
48. # Bucle principal para medir y enviar datos de temperatura y humedad
49. prev_weather = ""
50. while True:
51. print("Measuring weather conditions... ", end="")
52. # Se mide la temperatura y la humedad usando el sensor DHT22
53. sensor.measure()
54. # Se convierte la lectura a formato JSON
55. message = ujson.dumps({
56. "temp": sensor.temperature(), # Obtiene la temperatura medida
57. "humidity": sensor.humidity(), # Obtiene la humedad medida
58. })
59. # Si hay cambios en la lectura respecto a la anterior, se publica en el tópico MQTT
60. if message != prev_weather:
61. print("Updated!")
62. # Publica los datos en el tópico MQTT y notifica el cambio
63. print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
64. client.publish(MQTT_TOPIC, message)
65. prev_weather = message # Actualiza la lectura previa
66. else:
67. # Si no hay cambios en la lectura, se notifica que no hubo cambios
68. print("No change")
69. # Se espera 1 segundo antes de la siguiente medición
70. time.sleep(1)