Conceptos

Qué es MQTT: el protocolo que mueve el Internet de las Cosas

Si un ESP32 envía datos a un dashboard, lo más probable es que use MQTT. Te explicamos cómo funciona con un ejemplo de aula, sin tecnicismos de más.

Equipo Alltime IoT7 min de lectura
Un ESP32 publica datos que un broker central reparte a un portátil, un celular y una tablet

Cuando un estudiante conecta un sensor al ESP32 y ve la temperatura cambiar en el celular, entre la placa y la pantalla hay un mensajero. En la gran mayoría de proyectos IoT ese mensajero se llama MQTT.

MQTT es un protocolo de mensajería: un conjunto de reglas para que dispositivos pequeños envíen y reciban datos por internet gastando muy poca energía y muy poco ancho de banda.

El problema que resuelve

La web normal funciona con HTTP: el navegador pregunta, el servidor responde y la conexión se cierra. Para leer un sensor cada segundo habría que preguntar cada segundo, con todo el peso de una petición web completa cada vez.

Un ESP32 con una batería y un WiFi escolar que se cae de vez en cuando necesita otra cosa: una conexión que se abra una vez, se mantenga ligera y permita enviar datos apenas existan. Eso es MQTT.

Las tres piezas

MQTT sigue un modelo llamado publicar / suscribir. Funciona como un tablero de anuncios del colegio:

  • Publicador: quien pone el anuncio. Aquí, el ESP32 que mide la temperatura.
  • Broker: el tablero. Un servidor que recibe todos los mensajes y los reparte. Nadie habla directamente con nadie; todo pasa por el broker.
  • Suscriptor: quien lee el tablero. El dashboard, la app del celular o incluso otro ESP32.

La consecuencia práctica es grande: el sensor no necesita saber quién lo está mirando. Pueden ser uno o treinta estudiantes con el dashboard abierto, y el ESP32 envía el dato una sola vez.

Temas: la dirección de cada dato

Cada mensaje se publica en un tema (topic), una ruta de texto separada por barras, parecida a la dirección de una carpeta:

colegio/aula-3/clima/temperatura
colegio/aula-3/clima/humedad
colegio/aula-5/lampara/estado

Un suscriptor puede escuchar un tema exacto o usar comodines:

  • + reemplaza un nivel: colegio/+/clima/temperatura recibe la temperatura de todas las aulas.
  • # reemplaza todo lo que sigue: colegio/aula-3/# recibe todo lo que pase en el aula 3.
Idea para claseAntes de programar, pide a cada grupo que diseñe en papel los temas de su proyecto. Nombrar bien los datos es la mitad del trabajo en IoT.

Calidad de servicio

MQTT deja elegir qué tan seguro debe ser el envío de cada mensaje. Se llama QoS y tiene tres niveles:

NivelGarantíaCuándo usarlo
QoS 0Se envía una vez, sin confirmaciónLecturas frecuentes de sensores: si se pierde una, llega otra en un segundo
QoS 1Llega al menos una vez (puede repetirse)Alertas, como "la temperatura superó 30 °C"
QoS 2Llega exactamente una vezÓrdenes que no deben duplicarse, como un conteo o un pago

Un ESP32 publicando

Así se ve, simplificado, un ESP32 que publica la temperatura con la librería PubSubClient de Arduino:

#include <WiFi.h>
#include <PubSubClient.h>

WiFiClient red;
PubSubClient mqtt(red);

void setup() {
  WiFi.begin("RedDelColegio", "clave");
  while (WiFi.status() != WL_CONNECTED) delay(500);
  mqtt.setServer("broker.ejemplo.com", 1883);
}

void loop() {
  if (!mqtt.connected()) mqtt.connect("esp32-aula3");
  mqtt.loop();
  float t = 24.6;  // aquí iría la lectura del sensor
  mqtt.publish("colegio/aula-3/clima/temperatura", String(t).c_str());
  delay(2000);
}

Tres ideas en pocas líneas: conectarse al WiFi, conectarse al broker y publicar en un tema. El dashboard solo tiene que suscribirse a colegio/aula-3/clima/temperatura.

Seguridad en redes escolares

MQTT usa por defecto el puerto 1883, sin cifrar: cualquiera en la red podría leer los mensajes. Para uso real conviene el puerto 8883, con cifrado TLS, y un usuario y clave por dispositivo.

Si el colegio filtra el tráfico, pide al área de TI que autorice el puerto y el dominio del broker. Es el motivo más común de "en mi casa funciona y en el colegio no".

De los oleoductos al aula

MQTT nació en 1999, cuando Andy Stanford-Clark (IBM) y Arlen Nipper necesitaban vigilar oleoductos por enlaces satelitales lentos y caros. Por eso es tan ligero: fue diseñado para gastar lo mínimo posible en cada mensaje.

En 2014 se convirtió en estándar abierto de OASIS (versión 3.1.1), y en 2019 llegó la versión 5. Hoy lo usan desde sensores industriales hasta electrodomésticos y proyectos escolares.

En Alltime IoT, cada misión ya trae el firmware que publica en sus temas y un broker con TLS, así que el estudiante ve sus datos en el dashboard sin configurar nada de esto a mano. Entenderlo, eso sí, es lo que le permite después construir sus propios proyectos.