"""
Ejemplo de toma de variables metereologicas
Con modulo ESP32 y sensor DHT22 en MicroPython
Se conecta a Dashboard Red donde por medio de suscripción
a los topics se muestran los datos en tiempo real
"""
import network
import time
from machine import Pin
import dht
import ujson
from umqtt.simple import MQTTClient
# Parametros de conexión servidor MQTT HiveMQ
MQTT_CLIENT_ID = "clientId-8O7VfrGd38"
MQTT_BROKER = "253b514442904ed4b97600e5b47941f9.s2.eu.hivemq.cloud"
MQTT_USER = "emja0725"
MQTT_PASSWORD = "MyHivemq0725."
MQTT_PORT = 0
# Topics
MQTT_TEMPERATURE_TOPIC = "TOPIC/temperature"
MQTT_HUMIDITY_TOPIC = "TOPIC/humidity"
# Conexión sensor
sensor = dht.DHT22(Pin(15))
# Conexión WIFI
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
# Espera de conexión
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.5)
print(" Connected to WIFI!")
# Conexión a servidor MQTT
print("Connecting to MQTT server... ", end="")
client = MQTTClient(client_id=MQTT_CLIENT_ID,
server=MQTT_BROKER,
user=MQTT_USER,
port=MQTT_PORT,
password=MQTT_PASSWORD,
ssl=True,
keepalive=7200,
ssl_params={'server_hostname': MQTT_BROKER}
)
client.connect()
print("Connected to MQTT Server!")
prev_temperature = ""
prev_humidity = ""
while True:
print("Measuring weather conditions... ", end="")
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
if temperature != prev_temperature:
print("Temperature Updated!")
print("Reporting to MQTT topic: {} - {}".format(MQTT_TEMPERATURE_TOPIC, temperature))
client.publish(MQTT_TEMPERATURE_TOPIC, str(temperature))
prev_temperature = temperature
elif humidity != prev_humidity:
print("Humidity Updated!")
print("Reporting to MQTT topic: {} - {}".format(MQTT_TEMPERATURE_TOPIC, humidity))
client.publish(MQTT_HUMIDITY_TOPIC, str(humidity))
prev_humidity = humidity
else:
print("No change detected on variables... ")
time.sleep(1)