WiFi-IR-Blaster selbst bauen: ESP8266 + Arduino Steuerung
Komponenten und Zubehör
| Bauteil | Menge | Hinweise |
|---|---|---|
| Espressif ESP8266 ESP-01 (oder NodeMCU) | 1 | NodeMCU empfohlen: USB, Spannungsregler, mehr I/Os |
| Arduino Nano R3 | 1 | Für IR-Sendung (IRremote-Bibliothek) |
| NPN-Transistor (z. B. 2N2222) | 1 | Für IR-LED-Treiber |
| IR-LEDs (Adafruit) | 1–2 | In Reihe an 5 V über Transistor |
Benötigte Werkzeuge
- Lötkolben
Software und Online-Dienste
- Arduino IDE
- NodeMCU Firmware (optional)
Projektbeschreibung
Moderne Smartphones haben keine IR-Blaster mehr. Ich wollte meine „dummen“ Geräte (TV, Klimaanlage, Receiver) in mein Smart-Home integrieren. Die Lösung: Ein per Web-App steuerbarer IR-Blaster in jedem Raum.
Entwicklungsweg
1. Rapid Prototyping (ESP-01 + Arduino Nano)
ESP-01 per AT-Befehle vom Arduino steuern → HTTP-Requests an ESP → Arduino sendet IR-Codes. Problem: 1–2 s Latenz, umständliche AT-Befehle.
2. Umstieg auf NodeMCU (ESP8266 Dev-Board)
Vorteile: Onboard USB, 3,3 V-Regler, viele GPIOs, Breadboard-tauglich. ESP8266WebServer-Bibliothek ermöglicht direkten HTTP-Server auf dem ESP. IRremoteESP8266 läuft out-of-the-box.
IR-LEDs direkt am GPIO waren zu schwach → NPN-Transistor schaltet 5 V für IR-LEDs (in Reihe, ohne Vorwiderstand für hohe Reichweite).
3. REST-ähnliche API & Web-App
Frontend (HTML/JS) auf separatem Server (z. B. C.H.I.P. $9 Computer mit Apache) → sendet cURL-Requests an ESP-IP/befehl. Buttons für TV (Power, Source, Vol±, Ch±, Mute) und Receiver (Power, Vol±, Mute, Source). Als Android-Web-App installierbar (manifest.json).
4. Universal Remonster (Fertiges System)
Läuft seit Monaten zuverlässig. Zweites Gerät für Wohnzimmer (Klimaanlage + TV). Montage per Klettband unter Regal, IR-LEDs justierbar.
Zukünftige Erweiterungen
- Web-UI in die Cloud migrieren
- Amazon Echo Integration (Sprachsteuerung) – bereits umgesetzt
- DHT22 Temperatursensor hinzufügen
- RF-Sender für Deckenventilatoren
- IR-Empfänger für „Lern-Funktion“ (Bestehende Fernbedienungen einlesen)
- Integration in Hausautomation (Geräte bei Abwesenheit ausschalten)
Code
Arduino Sketch (ESP8266 + IRremoteESP8266)
/* WiFi IR Blaster by Buddy Crotty
* ESP8266 empfängt HTTP GET, sendet IR-Codes per IR-LED.
* Benötigt: ESP8266WiFi, IRremoteESP8266, ESP8266mDNS
*/
#include <ESP8266WiFi.h>
#include <IRremoteESP8266.h>
#include <ESP8266mDNS.h>
const char* ssid = "AP_SSID";
const char* password = "AP_Pass";
MDNSResponder mdns;
const int khz = 38; // 38 kHz Trägerfrequenz
IRsend irsend(4); // GPIO4 (D2 auf NodeMCU)
// RAW IR-Codes für Samsung TV, NEC Receiver etc. (Arrays irTVpwr, irTVsrc, ...)
unsigned int irTVpwr[] = {4650,4250, 700,1550, ... };
unsigned int irTVsrc[] = {4600,4300, 700,1550, ... };
// ... weitere Codes für TV, Receiver, All-Power ...
WiFiServer server(80);
void setup() {
Serial.begin(115200); delay(10);
irsend.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println("\nWiFi verbunden");
server.begin();
Serial.println("HTTP Server gestartet");
Serial.print("IP: "); Serial.println(WiFi.localIP());
if (mdns.begin("IRBlasterLR", WiFi.localIP())) Serial.println("mDNS gestartet");
}
void loop() {
WiFiClient client = server.available();
if (!client) return;
Serial.println("Neuer Client");
while (!client.available()) delay(1);
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Request parsen & IR senden
if (req.indexOf("/irTVpwr") != -1) { irsend.sendRaw(irTVpwr, sizeof(irTVpwr)/sizeof(irTVpwr[0]), khz); }
else if (req.indexOf("/irTVsrc") != -1) { irsend.sendRaw(irTVsrc, sizeof(irTVsrc)/sizeof(irTVsrc[0]), khz); }
// ... alle weiteren Befehle analog ...
else if (req.indexOf("/irALLpwr") != -1) {
irsend.sendRaw(irRECpwrON, sizeof(irRECpwrON)/sizeof(irRECpwrON[0]), khz);
irsend.sendRaw(irTVpwr, sizeof(irTVpwr)/sizeof(irTVpwr[0]), khz);
delay(2000);
irsend.sendRaw(irRECsrc, sizeof(irRECsrc)/sizeof(irRECsrc[0]), khz);
}
else { client.stop(); return; }
client.print("HTTP/1.1 200 OK\r\n");
delay(1);
Serial.println("Client getrennt");
}
Web-Frontend (index.html, script.js, curl.php, manifest.json)
Alle Dateien im Originalprojekt. script.js sendet per jQuery $.get("curl.php", {room: "IP", button: "befehl"}). curl.php leitet als cURL-Request an ESP weiter. manifest.json ermöglicht Installation als Android-Web-App (Vollbild, Icon).
Schaltplan
Einfach: ESP8266 GPIO → NPN-Transistor (Basis über Widerstand) → 2 IR-LEDs in Reihe an 5 V (Kollektor), Emitter auf GND. Für mehr LEDs: NPN schaltet mehrere PNP-Treiber (je LED ein PNP).
Herstellungsprozess
- Wesentliche Limitierungen von Wi‑Fi-Echtzeit-Ortungssystemen
- Aufkommende Wireless-Technologien 2015: Leitfaden für M2M & IoT
- TLS-fähigen Webserver auf 3$ ESP8266 in unter 30 Minuten deployen
- Nahtlose MQTT-Integration: NodeMCU DHT22 Sensoren mit Raspberry Pi 3 B+ als Broker
- WLAN-gesteuerter Roboter mit Raspberry Pi & Android Smartphone bauen
- WLAN-gesteuerter Raspberry Pi Roboter mit Python bauen – Schritt-für-Schritt
- WiFi Calling erklärt: Funktionsweise, Vorteile & Bedeutung
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- WLAN-Türschloss mit Arduino & ESP8266 – Per Smartphone entsperren
- Perlstrahlen erklärt: Der ultimative Leitfaden für glatte, polierte Oberflächen