import network
import time
from machine import Pin
import dht
import ujson
from simple import MQTTClient
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
time.sleep(3)
"""
*********Parámetros de configuración para establecer una conexión a un servidor MQTT ***************
MQTT_CLIENT_ID: Es el identificador del cliente que se conecta al servidor MQTT.
MQTT_BROKER: Es la dirección IP
MQTT_PORT: Es el número de puerto que se utilizará para la conexión MQTT.
MQTT_USER: Es el nombre de usuario que se utilizará para autenticar la conexión al servidor MQTT.
MQTT_PASSWORD: Es la contraseña
MQTT_TOPIC: Es el tema (topic) MQTT al que el cliente se suscribirá o publicará mensajes.
"""
# MQTT Server Parameters
MQTT_CLIENT_ID = "wokwi-79"
MQTT_BROKER = "181.3.130.248"
MQTT_PORT = 1883
MQTT_USER = "wokwi-79"
MQTT_PASSWORD = "wokwi-79"
MQTT_TOPIC = "v1/devices/me/telemetry"
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, port=MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWORD, keepalive=60)
client.connect(clean_session=False)
print("Connected!")
"""
Las diferencias que se encuentran si se realiza con una conexion http son:
Las librerias/bibliotecas dependiendo del entorno en donde se este trabajando.
URL y endpoints, ya que en mqtt se requiere de un topico, en http se apunta a una direccion en especifico y se enviarian datos por metodos POST o GET
Formato del mensaje: En MQTT, los mensajes se envían en formato de texto plano o JSON. Para HTTP, generalmente se envían datos en formato JSON o en el cuerpo del mensaje HTTP.
Las autenticaciones son similares pero no del todo.
las similitudes son:
comunicacion de cliente-servidor
los dos son basados en TCP/IP
Tanto MQTT como HTTP son protocolos de nivel de aplicación, lo que significa que operan en la capa de aplicación del modelo OSI. Ambos están diseñados para ser independientes del hardware y el sistema operativo, lo que facilita su implementación en diferentes plataformas.
"""
sensor = dht.DHT22(Pin(15))
while True:
sensor.measure()
message = ujson.dumps({
"temperatura": sensor.temperature(),
"humedad": sensor.humidity(),
})
print("Publicando en topico {}. Mensaje: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message)
time.sleep(1)
"""
El nodo IoT inicia el proceso de conexión al broker MQTT proporcionando su identificador único (client ID) al broker.
El broker verifica la validez del client ID y, si es aceptado, inicia el proceso de conexión.
El nodo IoT envía las credenciales de autenticación (nombre de usuario y contraseña) al broker, si es que se requieren para establecer la conexión.
El broker verifica las credenciales de autenticación y responde con un mensaje de aceptación o rechazo de la conexión.
Si la autenticación es exitosa, el nodo IoT y el broker establecen una conexión TCP/IP bidireccional y se asocian a un canal de comunicación MQTT (socket).
Una vez establecida la conexión, el nodo IoT puede suscribirse a uno o varios temas (topics) para recibir mensajes de interés y también puede publicar mensajes en esos temas para que otros clientes suscritos los reciban.
"""