Controle su TV con Alexa: Arduino y ESP8266
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | Usado con diodo IR para enviar comandos a la TV |
| NodeMCU ESP8266 | 1 | Módulo WiFi que emula dispositivo "WEMO" para Alexa |
| Emisor/receptor IR | 1 | En serie con resistencia 100 Ω para enviar comandos IR |
Herramientas necesarias
- Soldador
Aplicaciones y servicios
- Arduino IDE
Descripción del proyecto
Usar Alexa para controlar su TV
Introducción: Este proyecto explica cómo usar Alexa para enviar comandos y controlar la TV por voz. Todo lo que hace el mando a distancia, puede hacerlo Alexa. Grabaremos las señales IR del mando y Alexa las reenviará cuando se lo pidamos por voz.
Paso 1: Descargar librerías previas
Instale en Arduino IDE:
Paso 2: Programar NodeMCU (módulo WiFi)
Abra ESP8266-Alexa.ino y súbalo al NodeMCU (instale soporte ESP8266 en Board Manager). Solo cambie credenciales WiFi y nombres de dispositivos.
Personalice nombres de dispositivos en ESP8266-Alexa.ino y señales IR en IR-Alexa-Send.ino.
Paso 3: Leer señales IR del mando de la TV
Suba IR_REMOTE_read.ino al Arduino para leer y registrar las señales IR recibidas (véase tutorial).
Paso 4: Programar Arduino para enviar señales IR vía Alexa
Abra IR-Alexa-Send.ino en Arduino IDE y súbalo al Arduino Uno (cambie board a UNO).
Alimente ambos módulos y conecte cables entre ellos. El emisor IR va al pin 3 del UNO. Vea esquema adjunto.
Paso 5: Probar con Alexa
En app Amazon Alexa (móvil/PC), vaya a Smart Home → Add Devices para encontrar los comandos definidos en ESP8266-Alexa.ino.
Estructuras de comando válidas:
- "Alexa, enciende NOMBRE_DISPOSITIVO"
- "Alexa, pon NOMBRE_DISPOSITIVO encendido"
- "Alexa, enciende el NOMBRE_DISPOSITIVO"
- "Alexa, pon el NOMBRE_DISPOSITIVO encendido"
Código
ESP8266-Alexa.ino (NodeMCU)
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#define WIFI_SSID "linksys"
#define WIFI_PASS ""
#define SERIAL_BAUDRATE 115200
fauxmoESP fauxmo;
void wifiSetup() {
WiFi.mode(WIFI_STA);
Serial.printf("[WIFI] Conectando a %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print("."); delay(100);
}
Serial.println();
Serial.printf("[WIFI] STATION Mode, SSID: %s, IP: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
#define RELAY_PIN1 13
#define RELAY_PIN2 2
#define RELAY_PIN3 14
#define RELAY_PIN4 15
void setup() {
pinMode(RELAY_PIN1, OUTPUT); digitalWrite(RELAY_PIN1, LOW);
pinMode(RELAY_PIN2, OUTPUT); digitalWrite(RELAY_PIN2, LOW);
pinMode(RELAY_PIN3, OUTPUT); digitalWrite(RELAY_PIN3, LOW);
pinMode(RELAY_PIN4, OUTPUT); digitalWrite(RELAY_PIN4, LOW);
Serial.begin(SERIAL_BAUDRATE);
Serial.println("FauxMo demo sketch");
Serial.println("Pida a Alexa 'encender pixels' o 'apagar relay'");
wifiSetup();
fauxmo.addDevice("TV");
fauxmo.addDevice("NetflixDeGreg");
fauxmo.addDevice("Sleep");
fauxmo.addDevice("Office");
fauxmo.onMessage(callback);
}
void callback(uint8_t device_id, const char * device_name, bool state) {
Serial.printf("[MAIN] %s state: %s\n", device_name, state ? "ON" : "OFF");
if (strcmp(device_name, "TV") == 0) {
digitalWrite(RELAY_PIN1, state ? HIGH : HIGH); // Pulso HIGH en ambos casos
}
if (strcmp(device_name, "NetflixDeGreg") == 0) {
digitalWrite(RELAY_PIN2, state ? HIGH : LOW);
}
if (strcmp(device_name, "Sleep") == 0) {
digitalWrite(RELAY_PIN3, state ? HIGH : LOW);
}
if (strcmp(device_name, "Office") == 0) {
digitalWrite(RELAY_PIN4, state ? HIGH : LOW);
}
}
void loop() {
fauxmo.handle();
delay(500);
digitalWrite(RELAY_PIN1, LOW);
digitalWrite(RELAY_PIN2, LOW);
digitalWrite(RELAY_PIN3, LOW);
digitalWrite(RELAY_PIN4, LOW);
}
IR-Alexa-Send.ino (Arduino UNO)
#include <IRremote.h>
IRsend irsend;
#define a 4
#define b 5
#define c 6
#define d 7
void setup() {
Serial.begin(9600);
pinMode(a, INPUT);
pinMode(b, INPUT);
pinMode(c, INPUT);
pinMode(d, INPUT);
}
void loop() {
if (digitalRead(a) == HIGH) {
irsend.sendNEC(0x57E3E817, 32); // Power
Serial.println("TV"); delay(500);
}
if (digitalRead(b) == HIGH) {
irsend.sendNEC(0x57E354AB, 32); // Enter
delay(2000);
irsend.sendNEC(0x57E39867, 32); // Up x3
delay(1000);
irsend.sendNEC(0x57E39867, 32);
delay(1000);
irsend.sendNEC(0x57E39867, 32);
delay(1000);
irsend.sendNEC(0x57E3B44B, 32); // Right
delay(1000);
irsend.sendNEC(0x57E354AB, 32); // Enter x2
delay(2000);
irsend.sendNEC(0x57E354AB, 32);
Serial.println("The Office"); delay(500);
}
if (digitalRead(c) == HIGH) {
irsend.sendNEC(0x57E38679, 32); // Options
delay(1500);
irsend.sendNEC(0x57E3CC33, 32); // Down x4
delay(700);
irsend.sendNEC(0x57E3CC33, 32); delay(700);
irsend.sendNEC(0x57E3CC33, 32); delay(700);
irsend.sendNEC(0x57E3CC33, 32); delay(700);
irsend.sendNEC(0x57E3B44B, 32); // Right x2
delay(700);
irsend.sendNEC(0x57E3B44B, 32); delay(900);
irsend.sendNEC(0x57E38679, 32); // Options
Serial.println("Sleep Timer"); delay(500);
}
if (digitalRead(d) == HIGH) {
irsend.sendNEC(0x57E34AB5, 32); // Netflix
Serial.println("Netflix de Greg"); delay(500);
}
}
IR_REMOTE_read.ino (Leer códigos IR)
// 2017.06.22
#include <IRremote.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 9, 2);
int receiverpin = 10;
IRrecv irrecv(receiverpin);
decode_results results;
void setup() {
lcd.begin(16, 2);
pinMode(receiverpin, INPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume();
lcd.clear();
lcd.print(results.value, HEX);
delay(150);
}
}
Esquemático
Proceso de manufactura
- Reparar o reemplazar su pantalla táctil industrial: Guía experta para decidir
- Pastillas Anticonceptivas: Historia, Beneficios, Riesgos y Producción
- Controla tu Ventilador de Techo con Alexa: Guía Paso a Paso
- Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
- Guía Pro: Taladrado de Metal con tu Máquina – Consejos de Experto
- Domina las reparaciones de tu coche: Consejos DIY para fiabilidad y ahorro
- Protección de Sistemas de Control Industrial: Estrategias y Mejores Prácticas Comprobadas
- Ocho Pasos Comprobados para Diagnosticar y Reparar su Sistema de Control de Procesos
- Encender su PC remotamente con PLCnext vía Wake-on-LAN
- Transición de sistemas de control industrial a redes inalámbricas
- Por Qué los Compuestos Termofijos Son la Elección Ideal para la Manufactura Moderna