▶ Ver video ⌥ Código en GitHub

Objetivo

Conectar un ESP32 a WiFi y publicar lecturas de temperatura/humedad (DHT22) a un broker MQTT cada 5 segundos. Usando esp-idf sin Arduino ni librerías de terceros.

Stack de comunicación

DHT22 → ESP32 (GPIO) → esp-idf MQTT client → Broker (Mosquitto) → Dashboard

Configurar WiFi

#include "esp_wifi.h"
#include "esp_event.h"

static void wifi_init(void) {
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);

    wifi_config_t wifi_cfg = {
        .sta = {
            .ssid     = "TU_SSID",     /* ← cambiar */
            .password = "TU_PASSWORD", /* ← cambiar */
        },
    };
    esp_wifi_set_mode(WIFI_MODE_STA);
    esp_wifi_set_config(WIFI_IF_STA, &wifi_cfg);
    esp_wifi_start();
    esp_wifi_connect();
}

Configurar cliente MQTT

#include "mqtt_client.h"

static esp_mqtt_client_handle_t client;

static void mqtt_init(void) {
    esp_mqtt_client_config_t cfg = {
        .broker.address.uri = "mqtt://192.168.1.100", /* ← IP del broker */
    };
    client = esp_mqtt_client_init(&cfg);
    esp_mqtt_client_start(client);
}

Publicar datos

static void publish_sensor_data(float temp, float hum) {
    char payload[64];
    snprintf(payload, sizeof(payload),
             "{\"temp\":%.1f,\"hum\":%.1f}", temp, hum);

    esp_mqtt_client_publish(client,
        "/firmware-factory/sensores",  /* topic */
        payload,
        0,     /* len = 0 → usar strlen */
        1,     /* QoS 1: al menos una vez */
        0);    /* retain = false */
}

Task principal

void app_main(void) {
    wifi_init();
    vTaskDelay(pdMS_TO_TICKS(2000)); /* esperar conexión */
    mqtt_init();

    float temp, hum;
    for (;;) {
        if (dht22_read(&temp, &hum) == ESP_OK) {
            publish_sensor_data(temp, hum);
        }
        vTaskDelay(pdMS_TO_TICKS(5000));
    }
}

Broker Mosquitto en la mini PC

Si tienes Mosquitto instalado en tu servidor, suscríbete para ver los datos:

mosquitto_sub -h localhost -t "/firmware-factory/sensores" -v
← Volver a proyectos