🔌

Arduino + MQTT

👨‍🍳 Chef⏱️ 60 minutos

📋 Prerequisitos sugeridos

  • Ninguno - empezamos desde cero

Lo que vas a construir

Un sensor de temperatura y humedad conectado a internet que envia datos a tu computadora cada 5 segundos.

Al terminar tendras:

  • Un ESP32 leyendo temperatura y humedad real de tu habitacion
  • Los datos viajando por WiFi a un broker MQTT publico
  • Un script en tu computadora mostrando los datos en tiempo real

Este es tu primer proyecto IoT real. Hardware + Software + Internet.


Lista de compras (exacta)

Necesitas estos componentes especificos:

ComponenteModelo exactoPrecio aproxDonde comprar
MicrocontroladorESP32 DevKit V1 (30 pines)$5-8 USDAmazon, AliExpress, MercadoLibre
SensorDHT22 (azul) o DHT11 (azul barato)$2-5 USDAmazon, AliExpress
CablesJumper wires hembra-hembra (3 cables)$2 USDCualquier tienda electronica
Cable USBMicro USB (para programar el ESP32)$2 USDProbablemente ya tienes uno

Total: ~$12-15 USD

Nota: El DHT22 es mas preciso que el DHT11. Si puedes, compra el DHT22.


Diagrama de conexiones

Conecta el sensor DHT22 al ESP32 asi:

    ESP32 DevKit V1                    DHT22
    +--------------+                  +-------+
    |              |                  |       |
    |         3.3V |------ cable -----| VCC   |  (pin 1 - izquierda)
    |              |                  |       |
    |        GPIO4 |------ cable -----| DATA  |  (pin 2)
    |              |                  |       |
    |          GND |------ cable -----| GND   |  (pin 4 - derecha)
    |              |                  |       |
    +--------------+                  +-------+

    Nota: El pin 3 del DHT22 no se usa (dejalo sin conectar)

Tabla de conexiones:

ESP32 PinCableDHT22 PinDescripcion
3.3VRojoPin 1 (VCC)Alimentacion del sensor
GPIO4AmarilloPin 2 (DATA)Datos del sensor
GNDNegroPin 4 (GND)Tierra

Importante: Usa 3.3V, NO 5V. El ESP32 trabaja a 3.3V.


Paso 1: Instalar Arduino IDE

  1. Ve a arduino.cc/en/software
  2. Descarga Arduino IDE 2.x para tu sistema operativo
  3. Instala y abre Arduino IDE

Paso 2: Configurar ESP32 en Arduino IDE

El ESP32 no viene preinstalado. Hay que agregarlo:

  1. Abre Arduino IDE
  2. Ve a File → Preferences (o Arduino IDE → Settings en Mac)
  3. En "Additional boards manager URLs" agrega:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    
  4. Click OK
  5. Ve a Tools → Board → Boards Manager
  6. Busca "esp32"
  7. Instala "esp32 by Espressif Systems" (tarda 2-3 minutos)

Paso 3: Instalar librerias

Necesitas 2 librerias:

  1. Ve a Tools → Manage Libraries
  2. Busca "DHT sensor library" por Adafruit → Instalar
  3. Busca "PubSubClient" por Nick O'Leary → Instalar

Si te pregunta por dependencias, acepta instalarlas.


Paso 4: Conectar el ESP32

  1. Conecta el ESP32 a tu computadora con el cable USB
  2. Ve a Tools → Board y selecciona "ESP32 Dev Module"
  3. Ve a Tools → Port y selecciona el puerto (COM3, COM4 en Windows, o /dev/cu.usbserial en Mac)

No aparece el puerto? Necesitas el driver CP210x:


Paso 5: El codigo completo

Crea un nuevo sketch y pega este codigo:

// ============================================
// Sensor IoT: ESP32 + DHT22 + MQTT
// luxIA.us - Tutorial completo
// ============================================

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

// --- CONFIGURACION: EDITA ESTOS VALORES ---
const char* WIFI_SSID = "TU_NOMBRE_WIFI";      // Nombre de tu WiFi
const char* WIFI_PASS = "TU_PASSWORD_WIFI";    // Password de tu WiFi
const char* MQTT_SERVER = "broker.hivemq.com"; // Broker MQTT publico (gratis)
const int MQTT_PORT = 1883;
const char* MQTT_TOPIC = "luxia/sensor/tuNombre"; // Cambia "tuNombre" por algo unico
// ------------------------------------------

// Configuracion del sensor
#define DHT_PIN 4        // GPIO4 - donde conectaste DATA
#define DHT_TYPE DHT22   // Cambia a DHT11 si usas ese modelo

DHT dht(DHT_PIN, DHT_TYPE);
WiFiClient espClient;
PubSubClient mqtt(espClient);

void setup() {
  // Iniciar monitor serial (para ver mensajes en tu computadora)
  Serial.begin(115200);
  Serial.println();
  Serial.println("=== Sensor IoT iniciando ===");

  // Iniciar sensor
  dht.begin();
  Serial.println("Sensor DHT iniciado");

  // Conectar WiFi
  Serial.print("Conectando a WiFi: ");
  Serial.println(WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("WiFi conectado! IP: ");
  Serial.println(WiFi.localIP());

  // Configurar MQTT
  mqtt.setServer(MQTT_SERVER, MQTT_PORT);
  Serial.println("MQTT configurado");
}

void conectarMQTT() {
  while (!mqtt.connected()) {
    Serial.print("Conectando a MQTT...");

    // Crear ID unico para este dispositivo
    String clientId = "ESP32-" + String(random(0xffff), HEX);

    if (mqtt.connect(clientId.c_str())) {
      Serial.println(" conectado!");
    } else {
      Serial.print(" fallo, codigo: ");
      Serial.print(mqtt.state());
      Serial.println(" - reintentando en 5 segundos");
      delay(5000);
    }
  }
}

void loop() {
  // Asegurar conexion MQTT
  if (!mqtt.connected()) {
    conectarMQTT();
  }
  mqtt.loop();

  // Leer sensor
  float temperatura = dht.readTemperature();
  float humedad = dht.readHumidity();

  // Verificar lectura valida
  if (isnan(temperatura) || isnan(humedad)) {
    Serial.println("Error leyendo el sensor!");
    delay(2000);
    return;
  }

  // Crear mensaje JSON
  String mensaje = "{\"temp\":" + String(temperatura, 1) +
                   ",\"hum\":" + String(humedad, 1) + "}";

  // Enviar por MQTT
  mqtt.publish(MQTT_TOPIC, mensaje.c_str());

  // Mostrar en Serial Monitor
  Serial.print("Enviado: ");
  Serial.println(mensaje);

  // Esperar 5 segundos
  delay(5000);
}

Paso 6: Configurar TU WiFi

En el codigo, cambia estas lineas con tus datos:

const char* WIFI_SSID = "TU_NOMBRE_WIFI";      // El nombre de tu red WiFi
const char* WIFI_PASS = "TU_PASSWORD_WIFI";    // La contraseña de tu WiFi
const char* MQTT_TOPIC = "luxia/sensor/tuNombre"; // Cambia tuNombre

Paso 7: Subir el codigo

  1. Click en el boton Upload (flecha hacia la derecha) en Arduino IDE
  2. Espera a que compile (30-60 segundos)
  3. Espera a que suba al ESP32 (aparece "Connecting..." y luego porcentajes)
  4. Cuando termine, abre Tools → Serial Monitor
  5. Selecciona 115200 baud en la esquina inferior derecha

Paso 8: Verificar que funciona

En el Serial Monitor deberias ver:

=== Sensor IoT iniciando ===
Sensor DHT iniciado
Conectando a WiFi: TU_WIFI
....
WiFi conectado! IP: 192.168.1.105
MQTT configurado
Conectando a MQTT... conectado!
Enviado: {"temp":23.5,"hum":45.2}
Enviado: {"temp":23.6,"hum":45.1}
Enviado: {"temp":23.5,"hum":45.3}

Si ves esto, funciona! Tu sensor esta enviando datos a internet.


Paso 9: Ver los datos desde tu computadora

Ahora vamos a recibir esos datos en tu computadora.

Instala un cliente MQTT:

npm install -g mqtt

Suscribete a tu topic:

mqtt sub -h broker.hivemq.com -t "luxia/sensor/tuNombre"

Deberias ver los datos llegando:

{"temp":23.5,"hum":45.2}
{"temp":23.6,"hum":45.1}

Troubleshooting

ProblemaSolucion
No aparece puerto COMInstala driver CP210x (link arriba)
"Error leyendo sensor"Verifica cables: 3.3V a VCC, GPIO4 a DATA, GND a GND
No conecta WiFiVerifica nombre y password exactos (mayusculas/minusculas)
No conecta MQTTVerifica conexion a internet, prueba reiniciar ESP32
Temperatura incorrectaEspera 2 minutos para que el sensor se estabilice

Proximo paso

Dashboard de Analytics - Muestra estos datos en graficos