TV per Alexa steuern: Arduino & ESP8266 (NodeMCU) Setup
Komponenten und Zubehör
| Arduino UNO | × | 1 |
| NodeMCU ESP8266 Breakout Board | × | 1 |
| IR-Sendediode (IR-LED) + 100 Ω Vorwiderstand | × | 1 |
Benötigtes Werkzeug
- Lötkolben & Zubehör
Apps und Onlinedienste
- Arduino IDE
Projektbeschreibung
Alexa als TV-Fernbedienung nutzen
Idee: Die IR-Codes der Original-Fernbedienung werden ausgelesen und per Sprachbefehl über Alexa wieder ausgesendet. Alles, was die Fernbedienung kann, kann dann per Sprache gesteuert werden.
Schritt 1: Vorab-Bibliotheken installieren
In der Arduino IDE (Bibliotheksverwalter oder manuell als ZIP):
- ESPAsyncTCP – GitHub
- ESPAsyncUDP – GitHub
- FauxMoESP – Bitbucket (Download Repository)
Schritt 2: NodeMCU (ESP8266) programmieren
Sketch ESP8266-Alexa.ino öffnen und auf den NodeMCU hochladen (Boardverwalter: ESP8266 hinzufügen).
Anpassen:
- WLAN-SSID & Passwort (
WIFI_SSID,WIFI_PASS) - Gerätenamen für Alexa (im Code: „TV“, „GregsNetflix“, „Sleep“, „Office“ – frei wählbar)
Schritt 3: IR-Codes der TV-Fernbedienung auslesen
Sketch IR_REMOTE_read.ino auf den Arduino UNO laden. IR-Empfänger (z. B. TSOP4838) an Pin 10 anschließen. Seriellen Monitor öffnen (9600 Baud) und Tasten der Fernbedienung drücken – die HEX-Codes werden angezeigt und notiert.
Schritt 4: Arduino für IR-Senden via Alexa programmieren
Sketch IR-Alexa-Send.ino auf den Arduino UNO laden (Board: „Arduino Uno“ wählen).
Verdrahtung:
- NodeMCU GPIO-Pins (D5–D8 / GPIO14,12,13,15) → Arduino Pins 4,5,6,7 (Digital-Eingänge)
- IR-Sendediode (+ 100 Ω) an Arduino Pin 3 (PWM/Timer2)
- Beide Geräte gemeinsame GND, NodeMCU 3,3 V → Arduino 5 V nicht direkt verbinden! (Levelshifter oder Spannungsteiler für Signalleitungen empfohlen)
Schritt 5: Mit Alexa testen
- Alexa-App → Smart Home → „Gerät hinzufügen“.
- Die im ESP8266-Code definierten Gerätenamen (TV, GregsNetflix, Sleep, Office) werden als „WeMo“-Geräte gefunden.
- Sprachbefehle testen:
- „Alexa, schalte TV an“
- „Alexa, schalte GregsNetflix an“
- „Alexa, schalte Sleep an“
- „Alexa, schalte Office an“
Code (drei Sketches)
1. ESP8266-Alexa.ino (NodeMCU – emuliert WeMo-Geräte)
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#define WIFI_SSID "IHR_WLAN_SSID"
#define WIFI_PASS "IHR_WLAN_PASSWORT"
#define SERIAL_BAUDRATE 115200
fauxmoESP fauxmo;
void wifiSetup() {
WiFi.mode(WIFI_STA);
Serial.printf("[WIFI] Verbinde mit %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print("."); delay(100);
}
Serial.println();
Serial.printf("[WIFI] Verbunden! IP: %s\n", WiFi.localIP().toString().c_str());
}
#define RELAY_PIN1 13 // D7
#define RELAY_PIN2 2 // D4
#define RELAY_PIN3 14 // D5
#define RELAY_PIN4 15 // D8
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 - Alexa steuert TV via IR");
wifiSetup();
// Alexa-Gerätenamen (frei wählbar)
fauxmo.addDevice("TV");
fauxmo.addDevice("GregsNetflix");
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: %s\n", device_name, state ? "ON" : "OFF");
// Puls an Arduino senden (HIGH für ~500ms)
if (strcmp(device_name, "TV") == 0) {
digitalWrite(RELAY_PIN1, state ? HIGH : LOW);
}
if (strcmp(device_name, "GregsNetflix") == 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);
// Pins nach kurzer Zeit wieder LOW (Puls)
digitalWrite(RELAY_PIN1, LOW);
digitalWrite(RELAY_PIN2, LOW);
digitalWrite(RELAY_PIN3, LOW);
digitalWrite(RELAY_PIN4, LOW);
}
2. IR-Alexa-Send.ino (Arduino UNO – sendet IR-Codes)
#include <IRremote.h>
IRsend irsend;
#define PIN_TV 4 // NodeMCU -> Arduino Pin 4
#define PIN_NETFLIX 5 // NodeMCU -> Arduino Pin 5
#define PIN_SLEEP 6 // NodeMCU -> Arduino Pin 6
#define PIN_OFFICE 7 // NodeMCU -> Arduino Pin 7
void setup() {
Serial.begin(9600);
pinMode(PIN_TV, INPUT);
pinMode(PIN_NETFLIX, INPUT);
pinMode(PIN_SLEEP, INPUT);
pinMode(PIN_OFFICE, INPUT);
}
void loop() {
// TV Power
if (digitalRead(PIN_TV) == HIGH) {
irsend.sendNEC(0x57E3E817, 32); // Power-Code (Beispiel!)
Serial.println("TV Power");
delay(500);
}
// Gregs Netflix: komplexe Sequenz
if (digitalRead(PIN_NETFLIX) == HIGH) {
irsend.sendNEC(0x57E354AB, 32); delay(2000); // Enter
irsend.sendNEC(0x57E39867, 32); delay(1000); // Up
irsend.sendNEC(0x57E39867, 32); delay(1000); // Up
irsend.sendNEC(0x57E39867, 32); delay(1000); // Up
irsend.sendNEC(0x57E3B44B, 32); delay(1000); // Right
irsend.sendNEC(0x57E354AB, 32); delay(2000); // Enter
irsend.sendNEC(0x57E354AB, 32); // Enter
Serial.println("Gregs Netflix");
delay(500);
}
// Sleep Timer
if (digitalRead(PIN_SLEEP) == HIGH) {
irsend.sendNEC(0x57E38679, 32); delay(1500); // Options
irsend.sendNEC(0x57E3CC33, 32); delay(700); // Down x4
irsend.sendNEC(0x57E3CC33, 32); delay(700);
irsend.sendNEC(0x57E3CC33, 32); delay(700);
irsend.sendNEC(0x57E3CC33, 32); delay(700);
irsend.sendNEC(0x57E3B44B, 32); delay(700); // Right x2
irsend.sendNEC(0x57E3B44B, 32); delay(900);
irsend.sendNEC(0x57E38679, 32); // Options
Serial.println("Sleep Timer");
delay(500);
}
// Office (Beispiel: Netflix Direktzugriff)
if (digitalRead(PIN_OFFICE) == HIGH) {
irsend.sendNEC(0x57E34AB5, 32); // Netflix-Taste
Serial.println("Office/Netflix");
delay(500);
}
}
WICHTIG: Die HEX-Codes (0x57E3E817 etc.) sind beispielhaft und müssen durch die in Schritt 3 ausgelesenen Codes Ihrer Fernbedienung ersetzt werden!
3. IR_REMOTE_read.ino (Arduino – IR-Codes auslesen)
#include <IRremote.h>
#include <LiquidCrystal.h>
// LCD-Verdrahtung (Beispiel)
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);
lcd.clear();
lcd.print(results.value, HEX);
delay(150);
irrecv.resume();
}
}
Schaltplan
Herstellungsprozess
- Antibabypille: Geschichte, Nutzen, Risiken und Produktion
- Übergang industrieller Steuerungssysteme auf drahtlose Netze
- Warum Duroplast-Composites die ideale Wahl für moderne Fertigung sind
- Industriellen Touchscreen reparieren oder austauschen? Experten-Entscheidungshilfe
- Deckenventilator per Alexa steuern – Schritt-für-Schritt-Anleitung
- Autoreparaturen meistern: DIY-Tipps für Zuverlässigkeit und Ersparnis
- Industrielle Steuerungssysteme schützen: Bewährte Strategien & Best Practices
- Profi-Leitfaden: Metallbohren mit Ihrer Maschine – Expertentipps
- Acht bewährte Schritte zur Diagnose und Behebung Ihres Prozessleitsystems
- PC per Wake-on-LAN mit PLCnext fernwecken