In diesem Artikel lernen Sie, wie Sie eine Klimaanlage über IR mit einem ESP32- oder ESP8266-Mikrocontroller steuern können.
Die meisten modernen Klimageräte werden mit einer Fernbedienung geliefert, die Infrarot-(IR)-Signale sendet, um das Gerät zu steuern. Oft sind jedoch die Funktionen der Fernbedienung und der Klimaanlage begrenzt. Was, wenn Sie die Klimaanlage zu einer bestimmten Zeit einschalten möchten? Was, wenn Sie die Klimaanlage abhängig von der Wettervorhersage regeln wollen? Oder was, wenn Sie die Klimaanlage aus einem anderen Raum steuern möchten? Vielleicht haben Sie einfach Ihre Fernbedienung verloren und möchten einen leistungsfähigeren Ersatz bauen?
Beachten Sie, dass ab Januar 2024 die IRRemoteESP8266 library zur Erzeugung der IR-Signale zur Steuerung einer Klimaanlage verwendet wird, für den ESP32 und Arduino 3.0.0 nicht kompiliert. Ich habe es versucht, aber es hat nicht funktioniert. Sobald die Bibliothek jedoch repariert ist, sollte der Code in diesem Artikel wieder für den ESP32 funktionieren.
All dies und mehr kann erreicht werden, wenn wir einen Mikrocontroller verwenden, um die Klimaanlage selbst zu steuern. Los geht’s.
Benötigte Teile
In diesem Abschnitt sind die benötigten Teile aufgelistet. Abgesehen von einem ESP32 oder ESP8266 und einigen kleineren Teilen benötigen Sie eine Klimaanlage, die mit Infrarotsignalen gesteuert werden kann. Die Liste der supported Aircons here finden Sie hier.
Als Mikrocontroller verwende ich speziell den unten aufgeführten ESP8266 ESP-12F Mini (WEMOS LOLIN D1 mini), aber die meisten ESP8266- und ESP32-Boards sollten ebenfalls funktionieren. Ich habe auch den ESP32 lite wegen des niedrigen Preises und des Batterieanschlusses mit Ladefunktion aufgeführt. Das ist praktisch, wenn Sie eine eigene Fernbedienung bauen möchten, die mit Batteriebetrieb läuft.
Je nachdem, welche Version des Projekts Sie bauen, benötigen Sie nur einen Teil der hier aufgeführten Teile.

ESP8266 ESP-12F Mini

ESP32 lite

USB-Datenkabel

Dupont-Kabelsatz

Breadboard

Widerstands- & LED-Kit

Transistor-Kit

IR-Empfänger Sender

IR-Sendediode

Arduino IDE
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Infrarottechnologie und Klimaanlagen
Infrarot-(IR)-Technologie wird in vielen Anwendungen eingesetzt, darunter Fernbedienungen für elektronische Geräte wie Fernseher, DVD-Player und Klimaanlagen. Sie ermöglicht die drahtlose Kommunikation zwischen Geräten durch die Übertragung von Signalen in Form von Infrarotlicht.
Klimaanlagen, als eines der häufigsten Haushaltsgeräte, werden oft mit einer Fernbedienung geliefert, die IR-Technologie nutzt. Diese Fernbedienungen senden spezifische IR-Signale an die Klimaanlage, um Funktionen wie Temperatur, Lüftergeschwindigkeit und Modus zu steuern.

Klimaanlagen sind mit einem IR-Empfänger ausgestattet, der diese Signale erkennen und interpretieren kann. Wenn ein Befehl empfangen wird, reagiert die Klimaanlage entsprechend, indem sie z. B. die Temperatur ändert, die Lüftergeschwindigkeit anpasst oder eine andere mit dem Befehl verbundene Aktion ausführt.
Wenn Sie mehr über Infrarotsignale und deren Erzeugung erfahren möchten, schauen Sie sich unsere Tutorials zu How to build a universal, programmable IR remote, How to control an ESP32 with an IR Remote und How to Control a Servo with an IR Remote an.
Unterstützte Klimaanlagen
Es ist wichtig zu beachten, dass verschiedene Klimaanlagenmodelle und -marken unterschiedliche IR-Protokolle und Codes verwenden können. Daher sollten Sie vor dem Projektstart die Marke Ihrer Klimaanlage identifizieren. Wir verwenden die IRRemoteESP8266 library und die Liste der supported Aircons can be found here.
Sobald Sie bestätigt haben, dass Ihre Klimaanlage unterstützt wird, können Sie mit dem Anschluss des ESP32/ESP8266 an eine IR-Diode beginnen und ihn so programmieren, dass die passenden Signale gesendet werden. So können Sie Ihre Klimaanlage über eine Weboberfläche fernsteuern.
Gesamtsystem
Das Bild unten zeigt das Gesamtsystem, das wir bauen werden. Eine Webseite, die in einem Webbrowser läuft und den ESP32/ESP8266 über Wi-Fi steuert, welcher wiederum die Klimaanlage mit IR-Signalen kontrolliert.

Im nächsten Abschnitt zeige ich Ihnen, wie Sie den ESP32/ESP8266 mit einem IR-Sender verbinden.
Anschluss des ESP32/ESP8266 an einen IR-Sender
Um Infrarotsignale zu senden, müssen wir den ESP32 oder ESP8266 mit einem IR-Sender verbinden. Im Folgenden zeige ich Ihnen drei verschiedene Möglichkeiten. Die erste ist die einfachste und verwendet eines dieser praktischen IR-Sendermodule. Für den zweiten Schaltkreis verwenden wir eine IR-Sendediode und einen Widerstand, was etwas mehr Aufwand ist, aber eine bessere Reichweite ermöglicht. Der letzte Schaltkreis nutzt einen zusätzlichen MOSFET, mit dem wir die Reichweite noch weiter erhöhen können.
IR-Sendermodul
Am einfachsten ist die Verwendung eines IR-Sendermoduls. Diese Module sind sehr einfach und bestehen typischerweise aus einer IR-Diode und einem Widerstand auf einer Breakout-Platine. Sie haben meist drei Pins: Masse (GND oder ‚-‚), Stromversorgung (VCC oder ‚+‘) und Signal (S oder DAT). Siehe das Modul unten.

Anschluss des IR-Sendermoduls
Der Anschluss des Moduls ist einfach. Verbinden Sie Ground (G) Ihres ESP32/ESP8266 mit dem Minus-Pin (-/GND) des Moduls (schwarzes Kabel). Dann verbinden Sie einen GPIO-Pin (hier verwenden wir D2) mit dem Signal-Pin (S/DAT) des Moduls (gelbes Kabel). Schließlich verbinden Sie +5V (oder +3,3V) Ihres Mikrocontrollers mit dem mittleren Pin (+/VCC) des Moduls (rotes Kabel). Hinweis: Schließen Sie das Modul nicht an die TX- oder RX-Pins an. Dies kann die serielle Kommunikation stören.

Im obigen Beispiel verwende ich einen Wemos Lolin D1 mini, der einen 5V- oder 3,3V-Ausgang bietet. Welchen Sie zur Stromversorgung des Moduls verwenden, ist meist egal. Die 5V- oder 3,3V-Eingangsspannung am IR-Modul wird manchmal gar nicht verwendet oder nur zur Anzeige von Strom oder Signalübertragung. Sie beeinflusst in der Regel nicht die Reichweite des IR-Senders.
Obwohl das funktioniert und gut ist, um die Funktion zu testen, ist die Reichweite eher begrenzt. Ich erreiche eine Reichweite von 1 bis 2 Metern, abhängig vom Widerstand auf dem Modul. Einige Module bieten eine viel größere Reichweite, verwenden aber wahrscheinlich eine andere Schaltung. Siehe nächsten Abschnitt.
Module ohne Strombegrenzungswiderstand
Achtung! Einige billige Module haben keinen Strombegrenzungswiderstand, was dazu führt, dass die IR-Diode etwa 180mA Strom zieht. Das ist viel zu hoch für einen GPIO-Ausgang eines ESP8266, der etwa 10mA betragen sollte! Wenn Sie solche Module anschließen, erhalten Sie zwar eine hervorragende Reichweite, aber die Gefahr, Ihr Board zu beschädigen, ist groß!
Hier ist ein Bild eines solchen Moduls. Wenn Sie genau hinschauen, sehen Sie, dass der Widerstand R1 fehlt und die Platine nur eine IR-Diode hat. Sie können solche Module verwenden, müssen aber einen Widerstand in die Schaltung einfügen.

Im nächsten Abschnitt zeige ich Ihnen, wie Sie die IR-Sendediode und einen Widerstand selbst anschließen. So haben wir eine bessere Kontrolle über Strom und Reichweite.
IR-Sendediode und Widerstand
Wie unten zu sehen, ist die Schaltung mit einer IR-Sendediode und einem Widerstand immer noch sehr einfach. Verbinden Sie den kürzeren Pin der IR-Diode mit Masse und den längeren Pin mit dem Widerstand. Der andere Anschluss des Widerstands wird mit einem GPIO-Ausgang verbunden, hier wähle ich D2.

Wir können den benötigten Widerstandswert wie folgt berechnen. Wir haben 3,3 Volt als GPIO-Ausgang, wollen nicht mehr als 10 mA ziehen, und die IR-Diode hat eine Durchlassspannung von 1,2V bis 1,5V (nehmen wir 1,3V). Für einen 220Ω-Widerstand erhalten wir einen Strom von 9mA:
(3,3V – 1,3V)/220Ω = 9mA
Da das IR-Signal ein kurzer Impuls ist, könnten wir bis auf 100Ω gehen, was (3,3V – 1,3V)/100Ω = 20mA ergibt. Das erhöht die Reichweite etwas, ist aber riskant. Eine bessere Lösung ist, die IR-Diode über einen Transistor oder MOSFET zu steuern. Und genau das machen wir im nächsten Abschnitt.
IR-Sendediode und MOSFET
Die Reichweite unseres IR-Senders ist begrenzt, weil wir über einen GPIO-Ausgang des ESP8266 nur sicher 10mA an die IR-Diode liefern können. Die IR-Diode selbst könnte mit bis zu 100mA betrieben werden, was die Reichweite unseres Senders dramatisch erhöhen würde. Das folgende Schaltbild zeigt, wie wir das machen können.

In dieser Schaltung ist die IR-Diode mit einer 9V-Batterie und einem Strombegrenzungswiderstand R1 von 100Ω verbunden. Das ergibt einen Strom von (9V-1,3V)/100Ω = 77mA durch die IR-Diode, was innerhalb ihres Limits von 100mA liegt. Mit dieser Schaltung erreiche ich eine Reichweite von etwa 8 bis 10 Metern.
Der MOSFET fungiert als Schalter. Wenn der GPIO-Ausgang (D2) des ESP8266 auf High geht, öffnet das Gate (G) des MOSFET die Verbindung vom Drain (D) zum Source (S) und Strom kann von der 9V-Batterie durch die IR-Diode zur Masse (GND) fließen.
Der 2N7000 MOSFET, den ich hier verwende, kann bis zu 60V und 200mA dauerhaft schalten. Das reicht für die 70mA Strom, die unsere IR-Diode zieht.
Der 100Ω-Widerstand (R2) in der Schaltung ist ein weiterer Strombegrenzungswiderstand zum Schutz des GPIO. Der zweite Widerstand (R1) mit 10KΩ ist ein Pulldown-Widerstand, der sicherstellt, dass der MOSFET abschaltet, wenn das Gate nicht verbunden ist. Wenn Sie mehr über MOSFETs und deren Steuerung elektrischer Lasten erfahren möchten, schauen Sie sich unser Tutorial How To a Control Fan using Arduino an.
Vollständige Schaltung auf dem Breadboard
Das Bild unten zeigt die komplette Schaltung auf einem Breadboard.

Die Breadboard-Schaltung folgt dem oben gezeigten Schaltplan. Beginnen Sie damit, den MOSFET und die IR-Diode in das Breadboard einzustecken. Achten Sie auf die richtige Ausrichtung des 2N7000 und der IR-Diode. Schließen Sie die 9V-Batterie zuletzt an und achten Sie auf die richtige Polung. Vergessen Sie auch nicht, dass Batterie und ESP8266 eine gemeinsame Masse haben müssen (Massekabel des ESP8266 mit Batterie verbinden)!
Um die Schaltung zu testen, können Sie zuerst die blink sketch und eine normale LED verwenden, bevor Sie das viel komplexere Programm aus den nächsten Abschnitten ausführen. Beginnen wir mit der Webseite, die wir zur Steuerung unserer Klimaanlage benötigen.
Webseite für die Fernsteuerung
Wir wollen unseren ESP32/ESP8266 über eine Webseite steuern. Webseiten werden typischerweise mit der HTML-Sprache erstellt. Der folgende HTML-Code beschreibt das Layout, die Farben und den Inhalt unserer Webseite.
<!DOCTYPE html>
<html>
<head>
<title>Aircon</title>
<style>
body { text-align: center; font-family: Arial, sans-serif; }
button { background-color: slateblue; color: white; border: none; width: 50px; height: 30px; }
button:hover { background-color: darkslateblue; }
button:active { background-color: mediumslateblue; }
</style>
</head>
<body>
<h1>Aircon</h1>
<p>Power:
<a href="/power/on"><button>ON</button></a>
<a href="/power/off"><button>OFF</button></a>
</p>
</body>
</html>
Wenn Sie diesen HTML-Code in eine Datei namens „test.html“ kopieren und dann per Drag & Drop in Ihren Webbrowser laden, sehen Sie die folgende Webseite.

Sie können die Elemente im HTML-Code und die entsprechenden Elemente auf der Webseite leicht erkennen. Der Titel steht im „h1„-Tag, „p“ definiert den Absatz, der den Text „Power“ und zwei „button„-Elemente mit Hyperlinks „a“ enthält. Der „style„-Abschnitt legt die Farben und das Layout der Seite fest. Wenn Sie mehr über HTML lernen möchten, finden Sie hier eine gute HTML Tutorial.
Um diese Webseite im Webbrowser anzuzeigen, müssen wir einen Webserver betreiben, der diese Seite an den Browser ausliefert. Dieser Webserver läuft auf unserem ESP32/ESP8266, und wir besprechen den Code dazu im nächsten Abschnitt.
Programmierung des ESP32/ESP8266 zur Steuerung der Klimaanlage
Unten sehen Sie den kompletten Code, der es Ihnen ermöglicht, eine Klimaanlage über Infrarot mit einer Webseite zu steuern, die von einem Webserver auf Ihrem ESP32 oder ESP8266 bereitgestellt wird. Es ist ein größerer Codeblock, aber wir zerlegen ihn in überschaubare Teile und erklären ihn detailliert. Schauen Sie ihn sich zunächst einfach an, um einen Überblick zu bekommen.
Beachten Sie, dass dieser Code für eine DAIKIN-Klimaanlage ist. Sie können den Code jedoch leicht an Ihre Klimaanlage anpassen, indem Sie das relevante Kommunikationsprotokoll ändern (suchen Sie nach der Variablen ac.next.protocol im Code). Eine Liste der supported Aircons here finden Sie hier.
// Control Aircon via Infrared Signals using a Webpage
// served by a Webserver running on an ESP32/ESP8266
#if defined(ESP8266)
#include "ESP8266WiFi.h"
#elif defined(ESP32)
#include "WiFi.h"
#else
#error "This ain't a ESP8266 or ESP32"
#endif
#include "Arduino.h"
#include "IRremoteESP8266.h" // ESP32 and ESP8266
#include "IRac.h"
#include "IRutils.h"
const int irPin = D2;
const char* ssid = "*****";
const char* password = "*****";
const char* html = R""""(
HTTP/1.1 200 OK
Content-type:text/html
<!DOCTYPE html>
<html>
<head>
<title>Aircon</title>
<style>
body { text-align: center; font-family: Arial, sans-serif; }
button { background-color: slateblue; color: white; border: none; width: 50px; height: 30px; }
button:hover { background-color: darkslateblue; }
button:active { background-color: mediumslateblue; }
</style>
</head>
<body>
<h1>Aircon</h1>
<p>Power:
<a href="/power/on"><button>ON</button></a>
<a href="/power/off"><button>OFF</button></a>
</p>
</body>
</html>
)"""";
WiFiServer server(80);
IRac ac(irPin);
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void setup_ac() {
pinMode(irPin, OUTPUT);
ac.next.protocol = decode_type_t::DAIKIN; // Set a protocol to use. Here a DAIKIN Aircon
ac.next.model = 1; // Some A/Cs have different models. Try just the first.
ac.next.mode = stdAc::opmode_t::kCool; // Run in cool mode initially.
ac.next.celsius = true; // Use Celsius for temp units. False = Fahrenheit
ac.next.degrees = 25; // 25 degrees.
ac.next.fanspeed = stdAc::fanspeed_t::kMedium; // Start the fan at medium.
ac.next.swingv = stdAc::swingv_t::kOff; // Don't swing the fan up or down.
ac.next.swingh = stdAc::swingh_t::kOff; // Don't swing the fan left or right.
ac.next.light = false; // Turn off any LED/Lights/Display that we can.
ac.next.beep = false; // Turn off any beep from the A/C if we can.
ac.next.econo = false; // Turn off any economy modes if we can.
ac.next.filter = false; // Turn off any Ion/Mold/Health filters if we can.
ac.next.turbo = false; // Don't use any turbo/powerful/etc modes.
ac.next.quiet = false; // Don't use any quiet/silent/etc modes.
ac.next.sleep = -1; // Don't set any sleep time or modes.
ac.next.clean = false; // Turn off any Cleaning options if we can.
ac.next.clock = -1; // Don't set any current time if we can avoid it.
ac.next.power = false; // Initially start with the unit off.
}
void ac_power(bool isOn) {
ac.next.power = isOn;
ac.sendAc();
}
void execute(String& command) {
if (command.endsWith("GET /power/on")) {
ac_power(true);
}
if (command.endsWith("GET /power/off")) {
ac_power(false);
}
}
void run_server() {
WiFiClient client = server.accept();
if (client) {
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println(html);
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
execute(currentLine);
}
}
client.stop();
}
}
void setup() {
Serial.begin(9600);
setup_ac();
setup_wifi();
}
void loop() {
run_server();
}
Um den Code im Detail zu verstehen, zerlegen wir ihn in Teile.
Bibliotheken
Zuerst install und binden die notwendigen Bibliotheken für ESP32 und IR-Funktionalität ein. Je nach Mikrocontroller (ESP32 oder ESP8266) müssen wir eine unterschiedliche Wi-Fi-Bibliothek einbinden. Das erreichen wir mit einer conditional include (#if, #elif, #endif).
#if defined(ESP8266) #include "ESP8266WiFi.h" #elif defined(ESP32) #include "WiFi.h" #else #error "This is not a ESP8266 or ESP32" #endif #include "Arduino.h" #include "IRremoteESP8266.h" // ESP32 and ESP8266 #include "IRac.h" #include "IRutils.h"
Trotz seines Namens funktioniert die IRremoteESP8266.h-Bibliothek für ESP8266 und ESP32 – zumindest theoretisch. Wie in der Einleitung erwähnt, ist aktuell (Jan 2024) die library does not compile for ESP32.
Konstanten und Variablen
Als nächstes definieren wir die Konstante irPin, die angibt, an welchem Pin der IR-Sender angeschlossen ist. Wir definieren auch die Variablen ssid und password für die WLAN-Zugangsdaten. Hier müssen Sie die SSID und das Passwort Ihres lokalen WLANs eintragen. Die SSID ist der Name Ihres Heim-WLANs, z. B. „my_home_wifi“, und das Passwort ist das, das Sie normalerweise zur Verbindung mit diesem Netzwerk verwenden (mit Ihrem Telefon oder Computer).
const int irPin = D2; const char* ssid = "*****"; const char* password = "*****";
HTML-Code für die Webseite
Diesen Teil des Codes haben wir bereits vorgestellt. Es ist der HTML-Code, der vom Webserver ausgeliefert wird. Er beschreibt die Elemente, Farben und das Layout der Webseite.
const char* html = R""""(
HTTP/1.1 200 OK
Content-type:text/html
<!DOCTYPE html>
<html>
<head>
<title>Aircon</title>
<style>
body { text-align: center; font-family: Arial, sans-serif; }
button { background-color: slateblue; color: white; border: none; width: 50px; height: 30px; }
button:hover { background-color: darkslateblue; }
button:active { background-color: mediumslateblue; }
</style>
</head>
<body>
<h1>Aircon</h1>
<p>Power:
<a href="/power/on"><button>ON</button></a>
<a href="/power/off"><button>OFF</button></a>
</p>
</body>
</html>
)"""";
Achten Sie besonders auf den Abschnitt, der die Buttons definiert. Wenn Sie weitere Buttons und Funktionen zu Ihrer Webseite hinzufügen möchten, ist hier der richtige Platz (Sie müssen auch weiter unten im Code Ergänzungen vornehmen). Zum Beispiel, wenn Sie auch die Lichter der Klimaanlage ein- oder ausschalten wollen, würden Sie Folgendes hinzufügen:
<p>Power: <a href="/power/on"><button>ON</button></a> <a href="/power/off"><button>OFF</button></a> </p> <p>Lights: <a href="/light/on"><button>ON</button></a> <a href="/light/off"><button>OFF</button></a> </p>
WLAN-Einrichtung
Die setup_wifi()-Funktion ist verantwortlich für die Verbindung des ESP32 mit dem WLAN. Wir rufen WiFi.begin(ssid, password) auf, um die WLAN-Verbindung mit unseren Zugangsdaten (SSID, Passwort) zu starten. Dann warten wir in einer Schleife, bis die Verbindung hergestellt ist, indem wir WiFi.status() prüfen.
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
Nach der Verbindung geben wir die IP-Adresse des Webservers (der auf unserem ESP8266 läuft) aus. Diese wird im Serial Monitor angezeigt und Sie müssen sie kopieren, da Sie sie benötigen, um von Ihrem Computer aus auf die Webseite zuzugreifen.
Zum Schluss rufen wir server.begin() auf, die den Webserver startet. Wenn Sie keine Verbindung zum WLAN herstellen können, überprüfen Sie Ihre SSID und Ihr Passwort!
Klimaanlagen-Einrichtung
In der setup_ac()-Funktion setzen wir zuerst den IR-Sender-Pin als Ausgang (pinMode(irPin, OUTPUT)). Dann legen wir den Anfangszustand der Klimaanlage fest. Wie Sie sehen, gibt es viele Funktionen der Klimaanlage, die Sie ein- oder ausschalten können. Diese sind für eine DAIKIN-Klimaanlage, ein sehr verbreitetes Modell.
void setup_ac() {
pinMode(irPin, OUTPUT);
ac.next.protocol = decode_type_t::DAIKIN; // Set a protocol to use.
ac.next.model = 1; // Some A/Cs have different models. Try just the first.
ac.next.mode = stdAc::opmode_t::kCool; // Run in cool mode initially.
ac.next.celsius = true; // Use Celsius for temp units. False = Fahrenheit
ac.next.degrees = 25; // 25 degrees.
ac.next.fanspeed = stdAc::fanspeed_t::kMedium; // Start the fan at medium.
ac.next.swingv = stdAc::swingv_t::kOff; // Don't swing the fan up or down.
ac.next.swingh = stdAc::swingh_t::kOff; // Don't swing the fan left or right.
ac.next.light = false; // Turn off any LED/Lights/Display that we can.
ac.next.beep = false; // Turn off any beep from the A/C if we can.
ac.next.econo = false; // Turn off any economy modes if we can.
ac.next.filter = false; // Turn off any Ion/Mold/Health filters if we can.
ac.next.turbo = false; // Don't use any turbo/powerful/etc modes.
ac.next.quiet = false; // Don't use any quiet/silent/etc modes.
ac.next.sleep = -1; // Don't set any sleep time or modes.
ac.next.clean = false; // Turn off any Cleaning options if we can.
ac.next.clock = -1; // Don't set any current time if we can avoid it.
ac.next.power = false; // Initially start with the unit off.
}
Ändern Sie die Variable ac.next.protocol = decode_type_t::DAIKIN auf das Modell Ihrer Klimaanlage. Die Namen der verschiedenen Modelle sind here aufgelistet, und die entsprechenden Konstanten finden Sie here. Suchen Sie diesen Codeabschnitt:
enum decode_type_t {
UNKNOWN = -1,
UNUSED = 0,
RC5,
RC6,
NEC,
SONY,
PANASONIC,
...
}
Je nach Modell sind einige dieser Funktionen möglicherweise nicht verfügbar, und Sie müssen nicht alle Variablen setzen. Der obige Code basiert auf der this example of the IRremoteESP8266-Bibliothek. Dort finden Sie viele weitere Beispiele und Informationen.
Schauen Sie sich besonders die Wrapper für einige Klimaanlagen an. Die Verwendung kann weniger Optionen bieten, aber Ihren Code vereinfachen. Für die DAIKIN-Klimaanlage gibt es beispielsweise die Wrapper-Klasse ir_Daikin.h, die Funktionen zur Steuerung der Klimaanlage bereitstellt. Hier ein example:
ac.on(); ac.setFan(1); ac.setTemp(25);
Die Verwendung dieser Funktionen bedeutet, dass wir nicht selbst welche schreiben müssten, wie wir es im nächsten Abschnitt tun.
Klimaanlagensteuerung
Als nächstes definieren wir die ac_power()-Funktion, die dafür verantwortlich ist, die Klimaanlage ein- oder auszuschalten, indem sie die power-Eigenschaft des ac-Objekts setzt und das IR-Signal sendet.
void ac_power(bool isOn) {
ac.next.power = isOn;
ac.sendAc();
}
Wenn Sie weitere Funktionen Ihrer Klimaanlage steuern möchten, fügen Sie zusätzliche Funktionen hinzu. Zum Beispiel würde eine Funktion zum Ein- oder Ausschalten der Klimaanlagenbeleuchtung so aussehen:
void ac_light(bool isOn) {
ac.next.light = isOn;
ac.sendAc();
}
Befehlsausführung
Dann haben wir die execute()-Funktion, die den empfangenen HTTP-Befehl verarbeitet und die entsprechende Aktion ausführt. In diesem Fall schaltet sie die Klimaanlage basierend auf dem Befehl ein oder aus. Beachten Sie, dass die Strings in „GET /power/on“ mit den Hyperlinks href="/power/on" auf der Webseite übereinstimmen müssen. So wird die Schaltfläche mit der Funktion verbunden, die beim Drücken ausgeführt wird.
void execute(String& command) {
if (command.endsWith("GET /power/on")) {
ac_power(true);
}
if (command.endsWith("GET /power/off")) {
ac_power(false);
}
}
Wenn Sie zusätzlich zur Stromversorgung die Beleuchtung steuern möchten, fügen Sie die ac_light()-Funktion so hinzu:
void execute(String& command) {
if (command.endsWith("GET /power/on")) {
ac_power(true);
}
if (command.endsWith("GET /power/off")) {
ac_power(false);
}
if (command.endsWith("GET /light/on")) {
ac_light(true);
}
if (command.endsWith("GET /light/off")) {
ac_light(false);
}
}
Webserver
Die run_server()-Funktion behandelt eingehende Client-Anfragen und liefert die HTML-Seite aus. Sie ruft auch die execute()-Funktion auf, um die Befehle zu verarbeiten.
Der untenstehende Code basiert weitgehend auf dem SimpleWiFiServer-Beispiel der WiFi library. Wenn Sie detailliertere Informationen oder Anwendungen benötigen, schauen Sie dort nach.
void run_server() {
WiFiClient client = server.accept();
if (client) {
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println(html);
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
execute(currentLine);
}
}
client.stop();
}
}
Setup und Loop
Schließlich initialisieren wir in der setup()-Funktion die serielle Kommunikation, richten die Klimaanlage ein und verbinden uns mit dem WLAN.
void setup() {
Serial.begin(9600);
setup_ac();
setup_wifi();
}
Und die loop()-Funktion läuft kontinuierlich und betreibt den Webserver, um eingehende Anfragen zu bearbeiten.
void loop() {
run_server();
}
Und das war’s! Jetzt haben Sie einen voll funktionsfähigen webbasierten Controller für Ihre Klimaanlage. Im nächsten Abschnitt zeige ich Ihnen, wie Sie ihn tatsächlich verwenden.
Verwendung des Webservers
Wenn Sie Ihren ESP32/ESP8266 zurücksetzen und den Serial Monitor öffnen, sollten Sie einen Text sehen, der die IP-Adresse Ihres ESP32/ESP8266 anzeigt. In meinem Fall für meinen ESP32 ist das zum Beispiel 192.168.1.168.

Sie sehen eine andere IP-Adresse, die Ihrem ESP32/ESP8266-Board zugewiesen wurde. Kopieren Sie diese Adresse in die Suchleiste Ihres Browsers. Sie sollten die Webseite sehen, die der Webserver auf Ihrem ESP32/ESP8266 erstellt:

Jetzt können Sie die Tasten drücken, um Ihre Klimaanlage von einer Webseite aus ein- oder auszuschalten.
Zusammenfassend funktioniert das Gesamtsystem so: Der ESP8266/ESP32 betreibt einen Webserver, der an einen Webbrowser ausgeliefert wird. Webbrowser und Webserver kommunizieren über Wi-Fi durch Ihren WLAN-Router. Der ESP8266/ESP32 steuert die Klimaanlage über Infrarotsignale (IR), die die Befehle Ihrer Fernbedienung nachahmen. Das bedeutet auch, dass Sie Ihre Fernbedienung weiterhin verwenden können.

Beachten Sie, dass die Webseite relativ sicher ist, da sie nur innerhalb Ihres lokalen WLAN-Netzwerks zugänglich ist. Sie ist nicht öffentlich aus dem Internet erreichbar! Wenn Sie das möchten, erfordert das mehr Arbeit und Sicherheitsmaßnahmen, da es riskant ist, Ihr WLAN-Netzwerk für das Internet zu öffnen!
Ansonsten war’s das!
Fazit
In diesem Blogbeitrag haben wir gelernt, wie man eine Klimaanlage mit Infrarot-(IR)-Signalen und einem ESP32/ESP8266-Mikrocontroller steuert. Mit der Schritt-für-Schritt-Anleitung können Sie Ihr Kühlsystem automatisieren und die Bequemlichkeit der Fernsteuerung genießen.
Der Code in diesem Tutorial ist nur ein Anfang. Es gibt noch viel mehr, was Sie tun können! Angefangen bei der Steuerung weiterer Funktionen Ihrer Klimaanlage, könnten Sie zusätzliche Sensoren (Bewegung, Temperatur, Luftfeuchtigkeit) hinzufügen, um Ihre Klimaanlage automatisch abhängig von den Umweltbedingungen zu steuern. Praktisch jede fehlende Funktion Ihrer Klimaanlage können Sie selbst bauen.
Viel Spaß!
Häufig gestellte Fragen
Hier sind einige häufig gestellte Fragen zur Steuerung einer Klimaanlage mit Infrarotsignalen und einem ESP32/ESP8266-Mikrocontroller:
F: Kann ich für dieses Projekt jedes ESP32/ESP8266-Board verwenden?
A: Ja, Sie können jedes ESP32/ESP8266-Board verwenden, solange es die notwendigen GPIO-Pins zum Anschluss der IR-Diode hat und ein integriertes WLAN-Modul besitzt.
F: Wie steuert der ESP32/ESP8266 die Klimaanlage mit Infrarotsignalen?
A: Der ESP32/ESP8266 ist so programmiert, dass er die notwendigen Infrarotsignale erzeugt, die die Fernbedienungssignale der Klimaanlage nachahmen. Durch den Anschluss der IR-Diode an den ESP32/ESP8266 und die entsprechende Programmierung können Sie spezifische Infrarotbefehle an die Klimaanlage senden, z. B. zum Ändern der Temperatur, des Modus oder der Lüftergeschwindigkeit.
F: Kann ich mehrere Klimaanlagen mit einem einzigen ESP32/ESP8266 steuern?
A: Ja, Sie können mehrere Klimaanlagen mit einem einzigen ESP32/ESP8266 steuern, indem Sie für jede Klimaanlage unterschiedliche IR-Codes verwenden. Durch die Programmierung des ESP32/ESP8266, die passenden IR-Codes für jede Klimaanlage zu senden, können Sie diese einzeln oder gleichzeitig steuern.
F: Wie erhöhe ich die Reichweite des IR-Senders?
A: Sie können zwei (oder mehr) IR-Sender parallel verwenden, die an zwei verschiedene GPIO-Ports Ihres ESP8266 oder ESP32 angeschlossen sind. Die bessere Option ist, den IR-Sender separat mit Strom zu versorgen und einen MOSFET (oder Transistor) zur Steuerung zu verwenden. Wenn das immer noch nicht ausreicht, können Sie eine zweite IR-Diode anschließen und beide über den MOSFET steuern. Sie benötigen weiterhin nur einen GPIO-Ausgang. Hier ist ein Beispiel-Schaltplan:

Dies sind einige der häufig gestellten Fragen zur Steuerung einer Klimaanlage mit Infrarotsignalen und einem ESP32/ESP8266-Mikrocontroller. Wenn Sie weitere Fragen haben, stellen Sie diese gerne im Kommentarbereich unten.

