Bueno, les quiero hablar de MQTT. Primero, porque somos fanboys de MQTT y segundo, porque es un protocolo muy versátil y que se usa bastante en los proyectos de IoT.
MQTT es un protocolo de comunicación ligero y eficiente diseñado para facilitar la transferencia de datos entre dispositivos conectados a Internet de forma rápida y segura. MQTT es una tecnología de Internet de las cosas (IoT) y es ampliamente utilizada en la industria para controlar y monitorear dispositivos en tiempo real.
La arquitectura de MQTT es simple pero poderosa. Utiliza un modelo de publicación/suscripción, donde los dispositivos pueden publicar datos en un tema específico, y otros dispositivos pueden suscribirse a ese tema para recibir los datos en tiempo real. Los datos enviados a través de MQTT se encapsulan en mensajes que se envían a través de un servidor MQTT, también conocido como broker, que actúa como intermediario entre los dispositivos.
La simplicidad de MQTT y su bajo consumo de energía lo hacen ideal para dispositivos con recursos limitados, como sensores y microcontroladores. Además, MQTT es altamente escalable y puede manejar una gran cantidad de dispositivos conectados simultáneamente.
Uno de los principales beneficios de MQTT es su seguridad. MQTT cuenta con varias capas de seguridad para proteger los datos transferidos a través de él, incluyendo autenticación, autorización y cifrado. Esto garantiza que los datos transmitidos a través de MQTT estén protegidos de posibles amenazas cibernéticas.
Además, MQTT es altamente configurable, lo que permite a los desarrolladores personalizar el protocolo según sus necesidades específicas. Los desarrolladores pueden establecer el nivel de calidad del servicio (QoS) para garantizar que los mensajes se entreguen en el orden correcto y que no se pierdan, lo que es especialmente importante en aplicaciones críticas.

Además, por su misma simpleza, es fácil generar librerías para microcontroladores. Si bien, muchos proyectos parten desde el ecosistema de Arduino y este tiene librerías compatibles con famosos módulos como el ESP32 y ESP8266, otros fabricantes de microcontroladores también tienen las suyas, lo que hace que el uso de este protocolo no sea una limitante respecto al microcontrolador a elegir para un proyecto.
Ahora, cómo ocupamos MQTT?. Los pasos son bastante simples
- Debes tener conexión a internet
- Debes conectarte a un broker. Yo recomiendo usar el broker de mosquitto.
- Una vez estás conectado, simplemente debes publicar datos y si quieres recibirlos, debes suscribirte a algún tópico y podrás recibir mensajes de todos los dispositivos que publiquen hacia ese tópico
Así de simple, esos son los pasos básicos, pero otra cosa es con guitarra. Te dejo un ejemplo, para ESP32, que tiene lo mínimo necesario para esto:
#include <WiFi.h>
#include <PubSubClient.h>
#define topico_que_quiero_escuchar “escribe/tu/topico”
#define topico_que_quiero_escribir “escribe/tu/topico”
const char* ssid = “Escribe el wifi al que se conecta el ESP32”;
const char* password = “Escribe la contraseña del wifi”;
const char* mqtt_server = “Dirección IP o URL donde está el broker (hay varios gratuitos en internet))”;
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup() {
Serial.begin(115200);
setup_wifi();
//Configuro hacie qué broker me voy a conectar y el puerto
client.setServer(mqtt_server, 1883);
//Configuro la función que se va a ejecutar cuando llegue un mensaje
client.setCallback(callback);
pinMode(ledPin, OUTPUT);
}
void setup_wifi() {
//Nos intentamos conectar al wifi
delay(10);
WiFi.begin(ssid, password);
//Esperamos a que se conecte
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi conectado”);
Serial.println(“IP asignada: “);
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print(“LLegó un mensaje al tópico: “);
Serial.print(topic);
Serial.print(“. El mensaje es: “);
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
if (String(topic) == topico_que_quiero_escuchar) {
Serial.print(messageTemp;
}
}
void reconnect() {
// Esta función mantiene conectado tu ESP32 al broker MQTT
while (!client.connected()) {
Serial.print(“Intentando conectarse a MQTT”);
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(” try again in 5 seconds”);
//Espero 5 segundos antes de volver a intentar
//Te recomiendo que esto lo dejes dentro de un timer y no uses delay
//O bien, usa un hilo con RTOS que administre esto
delay(5000);
}
}
void loop() {
//Si no estoy conectado a MQTT, me conecto.
//Te recomiendo manejar esto junto con la conexión al wifi
//Por ejemplo, si no estoy conectado al wifi, no me conecto a MQTT
//Si tengo Wifi, pero no estoy conectado a MQTT, me conecto a MQTT
//Si tengo Wifi y estoy conectado a MQTT, me quedo conectado a MQTT
if (!client.connected()) {
reconnect();
}
//Envío un saludo al tópico para que todos los que están
//escuchando ese tópico lo reciban
client.publish(topico_que_quiero_escribir, “hola”);
delay(100);
//Esto mantiene persistente la conexión al broker.
//Te recomiendo también trabajarlo dentro de un timer o un hilo, para mantener
//sin problemas de timing el programa principal
client.loop();
}
Con el código que te he entregado, tienes la base y algunos consejos para darle internet a lo que quieras. Te recomiendo no intentar poner WiFi a una cafetera. Es más rápido apretar el botón de “hacer café”