Der ESP32-Mikrocontroller ist über die RMII-Schnittstelle mit dem LAN8720 PHY-Ethernet-Modul verbunden. Der ESP32 stellt die MAC-Schicht für das PHY-Ethernet über den WiFi-Controller bereit. Mithilfe des in der Arduino Core implementierten Webservers kann das Thermostat im LAN-Netzwerk über einen Browser gesteuert werden. Der ESP32 ist unter einer zugewiesenen IP-Adresse im DHCP-Bereich verfügbar. Die Thermostatlogik läuft unabhängig davon, ob die Webseite des Webservers für den Client geöffnet ist. Änderungen an der Logik und den Schwellentemperaturen erfolgen über HTTP-Anfragen von Clients im Netzwerk mithilfe eines HTML-Formulars. Alternativ kann die Anforderung auch direkt über eine HTTP-POST-Anfrage mit den Standardargumenten "fname" und "fname2" gesendet werden. Je nach Anforderung einer bestimmten Unterseite kann die Ausgabe gesteuert werden, beispielsweise manuell oder automatisch. Es besteht auch die Möglichkeit, die Steuerdaten mit einem auf einen bestimmten Wert gesetzten Argument zu überschreiben. Diese Daten werden im emulierten EEPROM-Speicher im Flash-Speicher gespeichert, wobei die Lebensdauer dieses Sektors bei 10.000 Neuschreibungen liegt. Es ist möglich, die (angeforderte) Referenztemperatur und Hysterese zu steuern. Der Webserver läuft auf dem Standard-HTTP-Port - 80.
Über den GPIO-Ausgang kann der Thermostat automatisch das Melderelais steuern, um den Boiler ein- oder auszuschalten. Dadurch kann er das vorhandene Raumthermostat ersetzen und allen Clients im Netzwerk zur Verfügung stellen. Der Thermostat kann von jedem Gerät mit einem Browser bedient werden, sei es ein Computer, Smartphone, Tablet, Smart TV oder ähnliches. Als Entscheidungsalgorithmus wird eine Zieltemperatur mit Hysterese verwendet, die mit der gemessenen Temperatur des digitalen Temperatursensors Dallas DS18B20 verglichen wird. Solltemperatur und Hysterese werden aus dem EEPROM-Speicher ausgelesen und sind auch bei einem Stromausfall dauerhaft gespeichert. Beim Schreiben neuer Daten werden sie überschrieben. Die Auflösung des DS18B20-Sensors beträgt während der Messung 12 Bit, was einer Temperaturauflösung von 0,0625 °C entspricht, was gleichzeitig der minimale Auflösungsschritt zwischen verschiedenen Messungen ist. Daten über den OneWire-Bus können auf Anfrage in 500 bis 1000 ms beim Mikrocontroller eintreffen, abhängig von der Anzahl der Sensoren am OneWire-Bus, der Länge des Busses usw. Die Entscheidungslogik des Thermostats wird alle 10 Sekunden unabhängig von der Webanwendung ausgeführt. Eine Keep-Alive-Verbindung ist nicht erforderlich, um die Logik auszuführen. Das System arbeitet autonom und erfordert somit keine laufende Aufmerksamkeit des Benutzers.
In Bezug auf die Hardware verwendet das Projekt:ESP32 | Dallas DS18B20 |
---|---|
3V3 | Vcc |
GND | GND |
D5 | DATA |
ESP32 | Relais (OMRON G3MB-202P / SRD-05VDC-SL-C) |
---|---|
5V | Vcc |
GND | GND |
D4 | IN |
ESP32 | PHY Ethernet LAN8720 |
---|---|
3V3 | Vcc |
GND | GND / RBIAS |
D18 | MDIO |
D19 | TXD0 |
D21 | TXEN |
D22 | TXD1 |
D23 | MDC |
D25 | RXD0 |
D26 | RXD1 |
D27 | CRS_DV |
HTML-Seiten, die auf ESP32 ausgeführt werden:
Die Weboberfläche wurde so gestaltet, dass sie sich an verschiedene Bildschirmgrößen anpasst und somit responsiv ist. Sie unterstützt sowohl hochauflösende Widescreens als auch mobile Endgeräte. Die Schnittstelle verwendet importierte Bootstrap-Framework-CSS-Stile von einem externen CDN-Server, der beim Öffnen einer Seite auf dem ESP32 das entsprechende Stylesheet clientseitig lädt. Um sicherzustellen, dass die eingestellten Werte des Thermostats auch nach einem Stromausfall erhalten bleiben, werden diese im EEPROM-Speicher des ESP gespeichert. Da die Plattform keinen physischen EEPROM-Chip besitzt, wird der EEPROM-Speicher im Flash-Speicher emuliert. Die Referenztemperatur liegt bei Offset 10, die Hysterese bei Offset 100. Jeder dieser Werte belegt maximal 5 Byte im EEPROM-Speicher, zusätzlich zum Abschlusszeichen. Die Daten werden erst beim Absenden des HTML-Formulars überschrieben. Der Betrieb des Thermostats ist daher maximal schonend für den EEPROM-Speicher, um seine maximale Lebensdauer zu gewährleisten. Der Zustand des Ausgangs existiert ausschließlich im RAM-Speicher, wo er bei Änderungen überschrieben wird. Der Wert wird nicht im emulierten EEPROM-Speicher im Flash-Speicher gespeichert.
Durch die Verwendung des Refresh-Meta-Tags aktualisiert der Webserver alle 30 Sekunden die gesamte Seite. Zusätzlich wird per JavaScript eine ungefähre Refresh-Zeit in die HTML-Seite eingefügt. Bis zu diesem Zeitpunkt müssen Änderungen für das Thermostat protokolliert werden, da andernfalls die Eingabefenster für numerische Eingaben im Formular beim Aktualisieren der Seite zurückgesetzt werden. Aufgrund des Feedbacks von Benutzern von Android-Geräten wurde die Aktualisierungszeit von 10 auf 30 Sekunden verlängert. Die dynamischen Daten, die sich hauptsächlich ändern, beziehen sich auf den aktuellen Wert der Ausgabe - EIN / AUS, der zusammen mit der Farbmarkierung den Benutzer über den aktuellen Zustand der Ausgabe informiert. Da die Logik des Systems unabhängig vom Webserver ausgeführt wird, kann die Ausgabe bereits vor dem Refresh in einem anderen Zustand sein, als er in der Webanwendung angezeigt wird. Eine Änderung der Ausgabe wird sofort, beispielsweise auf dem UART-Monitor mit einer Baudrate von 115200 Baud, ausgegeben. Auf der Website des Thermostats findet der Benutzer auch Informationen über die Betriebszeit des Geräts, angegeben in Tagen, Stunden, Minuten und Sekunden, um zu verfolgen, wie lange es bereits in Betrieb ist.
Der Thermostat heizt ab einer gemessenen Temperatur von 22,49 °C und darunter. Erreicht die Temperatur 23,01 °C und mehr, wird der Ausgang abgeschaltet, das Melderelais abgeschaltet und der Gaskessel heizt nicht mehr. Die Beheizung und Kühlung des Raumes, in dem die Messungen durchgeführt werden, erfolgt. Der Thermostat wird erst wieder aktiviert, wenn die Temperatur 22,49 °C oder weniger erreicht.
Die Implementierung enthält Programme für die Zuweisung einer dynamischen IPv4-Adresse an das Ethernet-Shield. Der Thermostat ist ausschließlich für Innentemperaturen ausgelegt! (über 0°C), und die Logik des Systems ist entsprechend darauf abgestimmt. Das Thermostat kann genutzt werden, um ein bestehendes Raumthermostat zu ersetzen oder temporär eine Heizung in einem Aquarium/Terrarium zu übernehmen, um eine konstante Temperatur aufrechtzuerhalten.