Generador de código MQTT

Elige un broker, un transporte y tus topics, y obtén un cliente MQTT completo y ejecutable en Python, Node.js, JavaScript de navegador, ESP32/Arduino, Go, Java, C# o la línea de comandos de mosquitto: conectar, suscribirse y publicar en un solo copia y pega.

¿Necesitas tus propias credenciales? Crea un broker privado

Transporte

MQTT (TCP)

Versión de MQTT

paho-mqtt 2.xpip install "paho-mqtt>=2.0"

mqtt_client.py
import uuid

import paho.mqtt.client as mqtt

BROKER = "broker.connectmq.com"
PORT = 1883
SUB_TOPIC = "testmqtt/demo/#"
PUB_TOPIC = "testmqtt/demo/hello"
PAYLOAD = "Hola desde TestMQTT"
QOS = 1
CLIENT_ID = f"python-{uuid.uuid4().hex[:8]}"


def on_connect(client, userdata, flags, reason_code, properties):
    if reason_code.is_failure:
        print(f"Connection failed: {reason_code}")
        return
    print(f"Connected to {BROKER}:{PORT}")
    # Subscribing here means the subscription is renewed after every reconnect.
    client.subscribe(SUB_TOPIC, qos=QOS)
    client.publish(PUB_TOPIC, PAYLOAD, qos=QOS)


def on_message(client, userdata, msg):
    print(f"{msg.topic}: {msg.payload.decode(errors='replace')}")


def on_disconnect(client, userdata, flags, reason_code, properties):
    print(f"Disconnected: {reason_code}")


client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=CLIENT_ID,
    protocol=mqtt.MQTTv311,
    transport="tcp",
)
client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect

client.connect(BROKER, PORT, keepalive=60)
client.loop_forever()  # blocks; handles reconnects. Stop with Ctrl+C

Cómo funciona el código generado

Todos los fragmentos siguen el mismo flujo: abrir una conexión con el broker, suscribirse a tu topic cuando se confirma la conexión, publicar un mensaje y seguir en ejecución mostrando todo lo que llega. Suscribirse dentro del handler de conexión (cuando la librería lo tiene) importa más de lo que parece: así las suscripciones se restauran automáticamente tras una reconexión. Si dejas el Client ID vacío, cada programa genera uno aleatorio al arrancar, de modo que dos copias nunca se expulsan mutuamente del broker.

El transporte determina el esquema de la URL. TCP plano suele ir por el puerto 1883 y TLS por el 8883, mientras que los listeners WebSocket varían según el broker: por eso el puerto y la ruta se rellenan desde el preset. Consulta la guía de puertos MQTT para ver todas las convenciones.

Por qué estas librerías

  • Python — paho-mqtt 2.x. El cliente de referencia de Eclipse, estable desde hace más de una década. La versión 2 cambió las firmas de los callbacks, así que los tutoriales antiguos fallan; este código usa la nueva API VERSION2. Más en MQTT con Python.
  • Node.js y navegador — MQTT.js v5. Una sola librería para ambos entornos, con métodos basados en promesas como connectAsync y publishAsync. En el navegador solo se conecta por WebSockets; lee MQTT en JavaScript y MQTT sobre WebSockets.
  • ESP32 / Arduino — PubSubClient. Pequeña, probadísima y disponible en el gestor de librerías. Habla MQTT 3.1.1 sobre TCP o TLS y publica con QoS 0. La guía de MQTT con ESP32 cubre las reconexiones Wi-Fi y los certificados.
  • Go — paho.mqtt.golang. El cliente Go más extendido, con reconexión automática y soporte de WebSocket integrados. Implementa MQTT 3.1.1; usa paho.golang para MQTT 5.
  • Java — Eclipse Paho v3. El MqttClient síncrono mantiene el ejemplo corto; cambia a MqttAsyncClient o al cliente Paho v5 para servicios en producción.
  • C# — MQTTnet v4. La librería MQTT de facto en .NET, totalmente asíncrona y con soporte de MQTT 5. El código usa instrucciones de nivel superior de .NET 6+.
  • Línea de comandos — mosquitto_pub / mosquitto_sub. La forma más rápida de comprobar que un broker funciona antes de escribir código. Consulta los ejemplos de mosquitto_pub y mosquitto_sub.

Notas rápidas por lenguaje

TLS: los fragmentos de Python, Node.js, Go, Java y C# verifican el certificado del broker con las CAs de confianza del sistema operativo, lo que funciona con brokers que tienen un certificado público. En el ESP32 el ejemplo llama a setInsecure() para que puedas conectarte; carga la CA raíz del broker con setCACert() antes de distribuir dispositivos. Los brokers autofirmados necesitan que se indique el archivo de la CA explícitamente en todos los lenguajes.

MQTT 5: Python, MQTT.js, MQTTnet y la CLI de mosquitto cambian de protocolo con una sola opción. PubSubClient, paho.mqtt.golang y Paho Java v3 se quedan en MQTT 3.1.1, que cualquier broker MQTT 5 sigue aceptando.

Pruebas: ejecuta el programa generado y observa el mismo topic en el cliente MQTT online. Si no llega nada, la checklist para probar un broker repasa paso a paso puertos, credenciales y erratas en los topics. Recuerda que en un broker público cualquiera puede leer tus topics: guarda los datos reales en un broker con autenticación.

Preguntas frecuentes sobre el generador de código MQTT

¿Qué librería MQTT debo usar en Python?

Eclipse Paho (paho-mqtt) es el cliente MQTT para Python más usado. La versión 2.x exige indicar una versión de la API de callbacks al crear el cliente; el código generado usa CallbackAPIVersion.VERSION2, que funciona tanto con MQTT 3.1.1 como con MQTT 5.

¿Por qué el código de navegador solo funciona con WebSockets?

Las páginas web no pueden abrir sockets TCP directos, así que los clientes MQTT de navegador envían MQTT a través de una conexión WebSocket. Tu broker necesita un listener WebSocket, y las páginas servidas por HTTPS deben usar una URL segura wss://.

¿Puede un ESP32 usar MQTT sobre WebSockets?

No con PubSubClient, la librería MQTT para Arduino más común: solo admite TCP plano y TLS. Rara vez es una limitación: el ESP32 puede abrir sockets TCP y TLS directamente, que además son más ligeros que WebSockets.

¿Es seguro poner la contraseña del broker en el código generado?

El código se genera en tu navegador y nunca se envía a un servidor. Aun así, evita subir contraseñas al control de versiones: cárgalas desde variables de entorno o un archivo de secretos, y nunca incluyas credenciales de administrador en JavaScript de navegador.

De los creadores de TestMQTT

Ejecuta este código contra tu propio broker

Los brokers públicos de prueba se comparten con miles de desconocidos. ConnectMQ te da un broker MQTT privado en el que puedes confiar para dispositivos reales, listo en minutos.

  • Tu propio broker aislado: nadie más puede leer tus topics
  • Autenticación con usuario y contraseña y control de acceso por topic
  • TLS y WebSocket seguro, MQTT 3.1.1 y MQTT 5
  • El mismo código de cliente desde la primera prueba hasta producción