ESPHome Air Quality Sensor System (SEN6x)
Table of Contents
Für die präzise Überwachung der Raumluftqualität reicht ein einfacher CO2-Sensor oft nicht aus. In diesem Projekt zeige ich den Aufbau eines volldynamischen Luftqualitätsmonitors auf Basis von ESPHome. Die Besonderheit: Das System lässt sich komplett ohne erneutes Flashen zur Laufzeit über ein Webinterface konfigurieren und löst spezifische Hardware-Herausforderungen professioneller Sensoren.
Die Hardware-Basis
Das System setzt auf hochwertige und kompakte Komponenten:
-
Mikrocontroller: Ein ESP32-C3-DevKitM-1 liefert ausreichend Leistung für das Display und sorgt für eine stabile WLAN-Anbindung.
-
Sensorik: Der Sensirion SEN66 (kompatibel mit SEN6x/SEN5x) ist ein All-in-One-Sensor für die Messung von CO2, Feinstaub (PM1.0, PM2.5, PM4.0, PM10), flüchtigen organischen Verbindungen (VOC), Stickoxiden (NOx) sowie Temperatur und Luftfeuchtigkeit.
-
Display: Ein rundes 1.28 Zoll LCD mit GC9A01 Controller, angesteuert über SPI.
Für das Projekt habe ich zudem ein passendes Gehäuse konstruiert, das einen optimalen Airflow für den Sensor gewährleistet und alle Komponenten kompakt aufnimmt.
Software-Features und technische Highlights
Die Firmware basiert auf ESPHome und nutzt die LVGL-Bibliothek für die grafische Oberfläche. Der Fokus bei der Entwicklung lag auf maximaler Flexibilität und physikalischer Genauigkeit.
1. Volldynamisches UI & Headless-Betrieb
Das Gerät ist als echtes Standalone-System konzipiert. Es benötigt zwingend keine Cloud und nicht einmal eine aktive Home Assistant Instanz. Dank des integrierten ESPHome-Webservers lässt sich das Gerät headless über jeden Browser im lokalen Netzwerk bedienen. Alle Zuweisungen (welcher Messwert auf welchem Display-Slot angezeigt wird), Farben, Theme-Einstellungen (Dark-/Light-Mode) und Refresh-Raten lassen sich live im Web-UI ändern. Das Display passt sich in Echtzeit an.
2. Spezifische Sensirion Gas-Engine Logik
Gassensoren für CO2, VOC und NOx benötigen eine kontinuierliche Aufwärmphase („Warm-up“), um korrekte Basislinien zu berechnen. Ein simples Neustarten des Abfrage-Timers würde den Sensor hart zurücksetzen (Reset) und die Messwerte verfälschen. Die Firmware nutzt daher eine entkoppelte Abfrage-Logik: Der Sensor läuft intern in einem 24-Stunden-Intervall auf Dauerbetrieb, während ein separates, anpassbares Skript die Daten schonend und asynchron im gewünschten Intervall (z.B. alle 30 Sekunden) über den I2C-Bus abholt.
3. Dynamische Feuchtigkeitskompensation (Magnus-Formel)
Kompakte Gehäuse erzeugen Abwärme, was einen Temperatur-Offset in der Software erfordert. Die relative Luftfeuchtigkeit ist physikalisch jedoch direkt von der Temperatur abhängig. Wird nur die Temperatur kalibriert, sinkt die Genauigkeit der angezeigten Luftfeuchtigkeit. Die Firmware berechnet daher über die Magnus-Tetens-Formel den aktuellen Sättigungsdampfdruck und korrigiert die relative Luftfeuchtigkeit passend zum eingestellten Temperatur-Offset. So bleiben die angezeigten Messwerte physikalisch konsistent.
4. Individuelle Alarm-Grenzwerte
Um die Luftqualität auf einen Blick beurteilen zu können, wurden 21 individuelle Grenzwerte (jeweils drei Stufen für sieben Sensoren) implementiert. Überschreitet ein Wert das definierte Limit, färbt sich der entsprechende Bogen oder Text auf dem Display automatisch in die gewünschte Warnfarbe (z.B. Gelb, Orange oder Rot). Auch diese Schwellenwerte und Farben lassen sich komfortabel über die Benutzeroberfläche festlegen.
Ressourcen & Download
Das Projekt ist vollständig Open Source. Den kompletten ESPHome-Code (YAML) sowie das 3D-Modell für das Gehäuse stelle ich auf GitHub und Thingiverse zur Verfügung:
-
Firmware / Quellcode: Hier geht es zum GitHub-Repository
-
3D-Druck Gehäuse (STL/STEP): Hier geht es zum Thingiverse-Projekt
-
Treiber: Als Custom Component wird der exzellente SEN6x-Treiber aus dem Repository von tuct/esphome-projects verwendet.









Hi, in picture #3 there is what looks like a gray foam insert where the sensor is placed in the housing. Does that come with the sensor? Looks like it was cut with a machine. If not, where did you get that?
Hi, this is correct it is cut from EVA foam with a laser. The sensor does not come with it. I uploaded the shape on thingiverse.com (hopefully). These came from sensirion from the sensors fact page.
Best regards
You got an awesome project here and I’m trying to do it myself. I found your thingiverse page (the link in the article points to github instead), but cannot find the cutout for the foam. It’s the missing piece for me, if you could upload that,I’d really appreciate it. How thick was the foam you used to fit it well to the case? I assume you’re located in Germany. I’m in Switzerland. Any recommendations on EVA cutting? I’ve never done that before.
Modifications I’m planning to do to your design: I’ll upgrade to ESP32-C6 (about 3mm longer) and will try to add an ambient light sensor to control the screen. I understand you have hard-coded that (or are controlling it through HA)?
Also happy if you send me the details via email.
Display brightness and Day/Night mode are available in HA for manipulation. Nothing is hardcoded. I use the sun modifier for decision to alter brightness. It’s all in the ESPHome code.
EVA is 2 or 3 mm from a multiple color sheet pack, nothing special. I cut this on a cheap 5W UV-laser at „medium“ power/speed.
I found the foam STEP file on the sensiron page, see link below.
Link?
I tried to manhandle it but got bun all over it.
What happened?
Hello iam interested in building the same project can you please ask for more details?
Cause i dont know how to program arduino.
Thx
Can you send me the diagram of the cables? how to connect?