Programmierung des Climate Cubes
Der ESP32 des Climate Cubes wird mit einem knapp 300 zeiligen Programm gesteuert. In dieser Version ist die Integration über MQTT mit eingebaut. Wie einige von euch vielleicht bei der Platine bereits bemerkt haben, ist der Climate Cube auch für einen Betrieb mit RTC und SD-Karte geeignet. Hierfür muss allerdings ein anderer Code noch erstellt werden. Den Code zum Betreiben des ESP32 könnt ihr hier herunterladen. Im Folgenden wird der Code noch kurz erklärt. Bei genauerem Bedarf können LLMs schnell helfen, um den Code gut verstehen zu können...
Der Code beginnt mit dem Einbinden aller notwendigen Bibliotheken für WLAN, MQTT, Display und Sensoren. Anschließend werden die verwendeten Pins, WLAN-Zugangsdaten und eine eindeutige Gerätekennung (CUBE_ID) definiert. Diese ID wird später genutzt, um die MQTT-Themen für jedes Gerät eindeutig zu benennen.
Im setup()-Teil startet der ESP32 mit der Initialisierung der seriellen Schnittstelle und der I²C-Verbindung. Danach werden die Sensoren (SHT21 für Temperatur und Luftfeuchtigkeit, CCS811 für CO₂) überprüft und gestartet. Erkennt der Code einen Sensor nicht, wird das Programm gestoppt. Auch das E-Paper-Display wird hier initialisiert und zeigt beim Start eine Begrüßung an. Der PIR-Bewegungssensor wird als Eingang gesetzt.
Dann erfolgt die Verbindung mit dem Schul-WLAN über WPA2-Enterprise und die Einrichtung des MQTT-Clients. Das Programm meldet sich beim Broker an und abonniert ein MQTT-Thema zur Kommunikation mit dem Server.
In der loop()-Funktion passiert der Hauptteil des Programms. Zunächst wird geprüft, ob die Verbindung zum MQTT-Broker besteht – wenn nicht, wird sie neu aufgebaut. Danach wird einmal am Tag ein Neustart ausgelöst, um Speicherprobleme langfristig zu vermeiden. Wird über einen längeren Zeitraum keine Bewegung erkannt, wird der Raum als „inaktiv“ markiert.
Der Sensor SHT21 liefert die aktuellen Temperatur- und Feuchtigkeitswerte, wobei ein kleiner Korrekturwert auf die Temperatur angewendet wird. Der CO₂-Sensor CCS811 nutzt diese Umgebungsdaten, um genauere Werte zu berechnen. Da dieser Sensor etwas Rechenzeit braucht, sind entsprechende Delays eingebaut. Die gemessenen CO₂- und TVOC-Werte werden anschließend ausgelesen.
Der PIR-Sensor prüft, ob sich jemand im Raum bewegt hat. Wird Bewegung erkannt, wird der Raumstatus auf „aktiv“ gesetzt und die Uhr für die Anzeigeaktualisierung zurückgesetzt.
Je nach Raumstatus wird das E-Paper-Display entweder häufiger (ca. alle 52 Sekunden) oder seltener (etwa stündlich) aktualisiert. Die Temperatur und der CO₂-Wert werden dabei formatiert und in zwei Zeilen auf dem Display angezeigt.
Zum Schluss werden alle aktuellen Messwerte (Temperatur, Luftfeuchtigkeit, CO₂ und Bewegung) über MQTT an den Server gesendet. Die verwendeten Themen bauen sich dynamisch aus der CUBE_ID und einem passenden Suffix wie „/temperature“ oder „/CO2“ zusammen. Nach jedem Zyklus wartet der ESP32 etwa 10 Sekunden, bis der nächste Durchlauf startet. Insgesamt dauert ein Messzyklus inklusive aller Delays etwa 13 Sekunden.