Uncategorized

ESP32 + MQTT: envía datos de sensores a la nube en 30 min

El problema

Has montado una estación meteorológica con ESP32. La temperatura y la humedad se ven perfectas en tu monitor serie. Pero aquí está el problema: esos datos están atrapados en tu portátil. No puedes consultarlos desde el móvil. No puedes guardarlos. No puedes disparar automatizaciones.

MQTT lo resuelve. Es el protocolo de comunicación que mueve la mayoría de los sistemas IoT del mundo, desde fábricas inteligentes hasta instalaciones de Home Assistant.

Qué vas a construir

Un nodo sensor con ESP32 que:

  • Lee temperatura y humedad cada 30 segundos
  • Publica los datos en un broker MQTT de nube gratuito
  • Te deja monitorizarlo todo desde cualquier navegador, estés donde estés

Dificultad: Principiante  |  Tiempo: 30 minutos  |  Coste: ~23,00 $ en piezas

Hardware necesario (lista de materiales)

Componente Modelo Cant. Precio Comprar
Microcontrolador ESP32 DevKitC V4 1 13,49 $ Ver producto
Sensor de temperatura/humedad DHT22 1 5,24 $ Ver producto
Pantalla (opcional) 0.96″ OLED SSD1306 1 5,99 $ Ver producto
Protoboard 830 puntos 1 4,49 $ Ver producto
Cables jumper M-M 40 uds. 1 2,99 $ Ver producto

Paso 1: Cableado

ESP32 ↔ DHT22

Pin DHT22 Pin ESP32 Nota
VCC 3V3 Alimentación
GND GND Tierra
DATA GPIO 13 Línea de datos

ESP32 ↔ OLED (opcional)

Pin OLED Pin ESP32 Nota
VCC 3V3 Alimentación
GND GND Tierra
SDA GPIO 21 Datos I2C
SCL GPIO 22 Reloj I2C

Paso 2: Instala las librerías

Abre el Arduino IDE → Sketch → Include Library → Manage Libraries e instala:

  1. PubSubClient de Nick O’Leary (comunicación MQTT)
  2. DHT sensor library de Adafruit (driver del DHT22)
  3. Adafruit SSD1306 (pantalla OLED, si la usas)

Paso 3: Sube el código

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

// --- WiFi Settings ---
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// --- MQTT Settings ---
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* temp_topic = "sensbench/home/temperature";
const char* hum_topic = "sensbench/home/humidity";

// --- Sensor Settings ---
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// --- Globals ---
WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("nWiFi connected! IP: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Connecting to MQTT...");
    String clientId = "sensbench-" + String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println("connected!");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" retrying in 5s");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Sensor read failed!");
    return;
  }

  char tempStr[8], humStr[8];
  dtostrf(t, 4, 2, tempStr);
  dtostrf(h, 4, 2, humStr);

  client.publish(temp_topic, tempStr);
  client.publish(hum_topic, humStr);

  Serial.printf("Temp: %s°C  Humidity: %s%%n", tempStr, humStr);
  delay(30000);
}

Paso 4: Mira tus datos en la nube

  1. Abre https://www.hivemq.com/mqtt-web-client/ en tu navegador
  2. Haz clic en Connect
  3. En Subscriptions, añade el topic: sensbench/home/#
  4. Mira cómo tu ESP32 envía datos en tiempo real cada 30 segundos

¿Y ahora qué?

Ahora que tus datos están en la nube, puedes:

  • Montar un dashboard con Node-RED o Home Assistant para visualizar los datos
  • Añadir más sensores — un BME280 para la presión del aire, humedad del suelo para las plantas
  • Disparar automatizaciones — “si la temperatura > 30°C, enciende el ventilador”
  • Pasarte a batería — añade el modo deep sleep y funcionará durante meses

Leave a Reply

Your email address will not be published. Required fields are marked *