Conexión de clientes MQTT a través de ESP32

Texto copiado

Introducción

Esta guía muestra cómo utilizar elESP32con elPubSubClientbiblioteca para conectarse a un corredor MQTT, publicar datos de sensores y suscribirse a temas.

PubSubClient es un cliente MQTT ligero para plataformas Arduino y ESP. Soporta MQTT v3.1.1, hacerlo ideal para IoT y aplicaciones incrustadas que funcionan en dispositivos limitados como ESP32.

Pre-requisitos

Antes de comenzar, asegúrese de que tiene:

  • Una junta de desarrollo ESP32.
  • Arduino IDE (o PlatformIO).
  • Bibliotecas instaladas:
    • PubSubClient(por Nick O’Leary)
    • ArduinoJson(para cargas de pago estructuradas)
  • credenciales de red Wi-Fi.

MQTT Conectar

En ESP32, conectarse a MQTT implica:

  • Conectando el ESP32 a tu red Wi-Fi.
  • Conexión con elMQTT brokercon autenticación opcional.

conexión de vacíoToWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
(WiFi.status() != WL_CONNECTED) {
(500)
Serial.print());
}
Serial.println(" conectado");
}
conexión de vacío ToMQTT() {
(!client.connected())))) {}
Serial.print("Connecting to MQTT...");
si (client.connect("SensorClient", mqtt_user, mqtt_password) {}
Serial.println(" conectado");
♪♪
Serial.print(" falló, rc=");
Serial.print(client.state());
Serial.println(" - retratar en 5 segundos");
(5000)
}
}
}

MQTT Publish

DynamicJsonDocument doc(256);
doc["value"] = 5;
Carga de carga útil;
serializeJson(doc, payload);
cliente.publish("sensor/status", payload.c_str());

MQTT Suscríbete

si (client.connect("SensorClient", mqtt_user, mqtt_password) {}
cliente.subscribe("sensor/control");
}

Para darse de baja:

cliente.unsubscribe("sensor/control");

Desconexión MQTT

La desconexión limpia asegura que el corredor libera recursos vinculados a la sesión y evita el mantenimiento conexiones de toma.

cliente.disconnect();

Cliente MQTTv311

El boceto proporcionado conecta el ESP32 a Wi-Fi, luego establece unMQTTconexión utilizandoPubSubClientbiblioteca. Monitoriza continuamente un sensor digital enGPIO 33.Siempre que el sensor cambios de valor (por ejemplo, 0 → 1 o 1 → 0), el ESP32 crea unJSON payloadcomo 'valor':1} y lo publica al temasensor/estad.


El código también mantiene la conexión MQTT viva con cliente.loop() y automáticamente intenta reconectarse si se pierde la conexión del corredor.

Identificar a Arduino.h
■#incluye ■WiFi.h
■#include יPubSubClient.h
Identificar a ArduinoJson.h
// credenciales WiFi
const char* ssid = "xxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxx";
// credenciales de corretaje MQTT
const char* mqt_server = "xxxxxxxxxxxxxxxxxx";
const char* mqt_user = "xxxxxxxxxxxxxxxxx";
const char* mqt_password = "xxxxxxxxxxxxx";
// Pin conectado al sensor digital
sensor de int Pin = 33;
WiFiClient espClient;
PubSubClient client(espClient);
// Almacene el último valor conocido del sensor para detectar cambios
int lastSensor Valor = -1;
conexión de vacíoToWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
(WiFi.status() != WL_CONNECTED) {
(500)
Serial.print());
}
Serial.println(" conectado");
}
conexión de vacío ToMQTT() {
(!client.connected()))) {}
Serial.print("Connecting to MQTT...");
si (client.connect("SensorClient", mqtt_user, mqtt_password) {}
Serial.println(" conectado");
♫ ... {
Serial.print(" falló, rc=");
Serial.print(client.state());
Serial.println(" - retratar en 5 segundos");
(5000)
}
}
}
vacio publicarSensorValue(valor único) {
DynamicJsonDocument doc(256);
doc["value"] = valor;
Carga de carga útil;
serializeJson(doc, payload);
cliente. public("sensor/status", payload.c_str());
Serial.println("Published on change: " + payload);
}
configuración de vacío() {}
Serial.begin(115200);
pinMode(sensorPin, INPUT);
connectToWiFi();
client.setServer(mqt_server, 1883);
connectToMQTT();
/ Inicializar con el estado actual para evitar falso primer gatillo
lastSensorValue = digitalRead(sensorPin);
}
vacío loop() {}
si (!client.connected()) {}
connectToMQTT();
}
cliente.loop(); // Mantener la conexión MQTT
corriente Valor = digitalRead(sensorPin);
si (Value real != lastSensorValue) {
últimoSensor Valor = corriente Valor;
publicarSensorValue(valo real); // Publicar sólo si el valor ha cambiado
}
retrasos(10); // Retraso corto para el ruido de la depuración, tweak si es necesario
}

Solución de problemas

  • Wi-Fi no conectará→ Compruebe SSID y contraseña.
  • La conexión MQTT falda→ Verificar el broker IP, puerto, nombre de usuario/password.
  • No hay mensajes publicados→ Asegúrate de que el pin del sensor esté cableado correctamente y aglutinado.
  • Carga no legible→ Confirme el tema de suscripción coincide exactamente.

Scale ESP32 IoT Solutions sin esfuerzo!

Alto rendimiento, baja latencia
conectividad para cada dispositivo

Utilice nuestro broker MQTT con su ESP32 para monitorear flotas de dispositivos, recopilar datos de sensores y sistemas de control fiables.