Puedes llamarme al telefono:
+34 684 70 27 62
Fisicamente me encuentro en:
32570 Maside, Ourense, Espana
Escribeme y te respondere:
[email protected]
Puedes llamarme al telefono:
+34 684 70 27 62
Fisicamente me encuentro en:
32570 Maside, Ourense, Espana
Escribeme y te respondere:
[email protected]
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.
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:
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.
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
}