Domina tu Hogar con ESP32, Relés HL-52S y Alexa: Guía Completa de Automatización

Quiero compartir con ustedes un proyecto práctico y gratificante que les permitirá controlar dispositivos eléctricos directamente con comandos de voz a través de Alexa. En este artículo, exploraremos cómo utilizar el microcontrolador ESP32 junto con un módulo de relés HL-52S para encender y apagar dos lámparas, a las que llamaremos «dispositivo01» y «dispositivo02». Todo esto se programará en el IDE de Arduino, haciendo que el proceso sea accesible incluso para aquellos con conocimientos básicos de electrónica y programación.

Por Qué ESP32 y HL-52S?

El ESP32 es un microcontrolador potente y versátil con Wi-Fi y Bluetooth integrados, lo que lo convierte en la elección perfecta para proyectos de IoT que requieren conectividad. Su capacidad para manejar tareas complejas y su bajo costo lo hacen ideal para la automatización del hogar.

El módulo de relés HL-52S (o cualquier módulo de relés de 2 canales compatible) es esencial para este proyecto. Los relés actúan como interruptores controlados electrónicamente que permiten que nuestro microcontrolador, que opera con voltajes bajos (3.3V o 5V), controle circuitos de corriente alterna de mayor voltaje (como los de nuestras lámparas), de manera segura y eficiente.

Descubrimiento de Dispositivos por Alexa:

Una vez que el ESP32 esté conectado a tu red Wi-Fi y el código esté corriendo (puedes verificarlo en el Monitor Serial del IDE de Arduino), abre la aplicación de Alexa en tu smartphone.

Control por Voz!

Una vez descubiertos, puedes empezar a controlar tus lámparas con comandos de voz como:

  • «Alexa, enciende dispositivo01.»
  • «Alexa, apaga dispositivo001.»
  • «Alexa, enciende dispositivo02.»
  • «Alexa, apaga dispositivo02.»

Este proyecto es un excelente punto de partida para adentrarse en el mundo del IoT y la domótica con el ESP32. Es increíblemente gratificante ver cómo algo tan sencillo como un comando de voz puede interactuar directamente con el mundo físico.

El Código Paso a Paso

Aquí está el código de ejemplo para el ESP32 en el IDE de Arduino. Lo desglosaremos para que entiendas cada sección.

#include <WiFi.h>
#include <ESPAsyncWebServer.h> // Para FauxmoESP
#include <AsyncTCP.h>          // Para FauxmoESP
#include <fauxmoESP.h>         // La librería principal para la integración con Alexa

// Configuración de la red Wi-Fi
#define WIFI_SSID "Tu_SSID_WiFi"       // Reemplaza con el nombre de tu red Wi-Fi
#define WIFI_PASS "Tu_Contrasena_WiFi" // Reemplaza con la contraseña de tu red Wi-Fi

// Definición de los pines de los relés
#define RELAY_PIN_01 27 // GPIO27 para el dispositivo01
#define RELAY_PIN_02 26 // GPIO26 para el dispositivo02

// Definición de los nombres de los dispositivos para Alexa
#define DEVICE_01_NAME "dispositivo01"
#define DEVICE_02_NAME "dispositivo02"

// Instancia de fauxmoESP
fauxmoESP fauxmo;

// Estados de los dispositivos
bool device01_state = false;
bool device02_state = false;

// --- Funciones ---

void wifiConnect() {
  Serial.println("Conectando a la red WiFi...");
  WiFi.begin(WIFI_SSID, WIFI_PASS);

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

  Serial.println("");
  Serial.print("WiFi conectado, dirección IP: ");
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  delay(10);

  // Configurar los pines de los relés como OUTPUT
  pinMode(RELAY_PIN_01, OUTPUT);
  pinMode(RELAY_PIN_02, OUTPUT);

  // Asegurarse de que los relés estén apagados al inicio (puedes ajustar HIGH/LOW según tu módulo)
  digitalWrite(RELAY_PIN_01, HIGH); // Asumo que el relé es activo bajo (HIGH = apagado, LOW = encendido)
  digitalWrite(RELAY_PIN_02, HIGH); // Si el tuyo es activo alto, usa LOW para apagar.

  // Conectar a la red Wi-Fi
  wifiConnect();

  // Configurar fauxmoESP
  fauxmo.setPort(80); // Puerto para la comunicación con Alexa (típicamente 80)
  fauxmo.enableSaveState(true); // Permite que Alexa recuerde el último estado
  fauxmo.setAlexaCallback([](uint8_t device_id, const char *device_name, bool state) {
    Serial.printf("[MAIN] Dispositivo #%d (%s) -> %s\n", device_id, device_name, state ? "ON" : "OFF");

    if (strcmp(device_name, DEVICE_01_NAME) == 0) {
      if (state) {
        digitalWrite(RELAY_PIN_01, LOW); // Encender dispositivo01 (asumiendo relé activo bajo)
        device01_state = true;
      } else {
        digitalWrite(RELAY_PIN_01, HIGH); // Apagar dispositivo01
        device01_state = false;
      }
    } else if (strcmp(device_name, DEVICE_02_NAME) == 0) {
      if (state) {
        digitalWrite(RELAY_PIN_02, LOW); // Encender dispositivo02
        device02_state = true;
      } else {
        digitalWrite(RELAY_PIN_02, HIGH); // Apagar dispositivo02
        device02_state = false;
      }
    }
  });

  // Añadir los dispositivos a fauxmoESP
  fauxmo.addDevice(DEVICE_01_NAME);
  fauxmo.addDevice(DEVICE_02_NAME);

  Serial.println("Listo para recibir comandos de Alexa!");
}

void loop() {
  fauxmo.handle(); // Esto es crucial para que fauxmoESP procese los comandos de Alexa
}
joalweingartt