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
}
