[Mikrocontroller]

Luftqualitätssensor mittels ESP32 (CO2, Luftfeuchtigkeit, Temperatur)

/luftqualitaetssensor-mittels-esp32-co2-luftfeuchtigkeit-temperatur
Luftqualitätssensor mittels ESP32 (CO2, Luftfeuchtigkeit, Temperatur)

Einfacher CO₂-Monitor mit Arduino, SCD30 und OLED

In diesem Blogbeitrag zeige ich dir, wie du mit einem Arduino, dem Sensirion SCD30 CO₂-Sensor und einem kleinen, schicken OLED-Display einen einfachen, aber effektiven CO₂-Monitor erstellst.


Verkabelung

Sowohl das Display als auch der Sensor unterstützen die I2C-Kommunikation und können beide mit einer Spannung zwischen 3 und 5 Volt betrieben werden.

Wenn du einen ESP32 verwendest, werden normalerweise folgende Pins genutzt:

  • SDA: Pin 21
  • SCL: Pin 22

Die Pins auf dem Display und dem Sensor sind beschriftet, daher musst du sie einfach korrekt miteinander verbinden.

I2C ist ein Bussystem, das bedeutet:
- SDA von allen I2C-Geräten gemeinsam auf Pin 21
- SCL von allen I2C-Geräten gemeinsam auf Pin 22

Ich habe dafür eine Wagoklemme verwendet, du kannst die Verbindungen aber genauso gut verlöten.


Code

Stelle sicher, dass du alle notwendigen Bibliotheken in deiner Arduino-IDE installiert hast.

Benötigte Bibliotheken

  • Wire.h – I2C-Kommunikation
  • SparkFun_SCD30_Arduino_Library – SCD30-Sensor
  • Adafruit_GFX – Grafikbibliothek
  • Adafruit_SH110X – OLED-Display

Arduino-Sketch

```cpp

include

include "SparkFun_SCD30_Arduino_Library.h"

include

include

SCD30 airSensor;
Adafruit_SH1106G display(128, 64, &Wire, -1);

unsigned long previousMillis = 0; // Zeitstempel für das letzte Update
const long interval = 180000; // Intervall für die Verschiebung (3 Minuten)
int offsetX = 0; // Anfangswerte für die Verschiebung
int offsetY = 0;

void setup() {
Wire.begin();
Serial.begin(9600);
airSensor.begin();

display.begin(0x3C, true);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SH110X_WHITE);
}

void loop() {
unsigned long currentMillis = millis();

// Überprüft, ob das Intervall abgelaufen ist
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;

// Verschiebt die Cursorposition leicht
offsetX = (offsetX + 1) % 5;
offsetY = (offsetY + 1) % 5;

}

if (airSensor.dataAvailable()) {
display.clearDisplay();

// CO2-Wert in ppm
display.setCursor(offsetX, offsetY);
display.print(airSensor.getCO2());
display.println(" ppm");

// Temperatur in Grad Celsius
display.setCursor(offsetX, 20 + offsetY);
display.print(airSensor.getTemperature(), 1);
display.println(" C");

// Relative Luftfeuchtigkeit in Prozent
display.setCursor(offsetX, 40 + offsetY);
display.print(airSensor.getHumidity(), 1);
display.println(" %");

display.display();

}

delay(500);
}
````


Setup

Zuerst initialisierst du die Komponenten:

  • Wire.begin() startet die I2C-Kommunikation
  • Serial.begin(9600) öffnet die serielle Schnittstelle
  • airSensor.begin() initialisiert den SCD30
  • Das Display wird vorbereitet (Adresse, Auflösung, Textgröße und Farbe)

So ist sichergestellt, dass alle Komponenten korrekt starten und sauber anzeigen.


Der Hauptteil

Im loop()-Teil des Skripts passiert die eigentliche Arbeit:

  • Zeitgesteuerte Verschiebung der Anzeige
  • Abfrage neuer Sensordaten
  • Aktualisierung des Displays

Anzeige auf dem Display

Die Messwerte werden mit einer leichten Positionsverschiebung angezeigt.
Das sorgt nicht nur für ein dynamischeres Bild, sondern schützt das OLED auch zuverlässig vor Einbrennen.


3D-Druck-Gehäuse

Der Druck erfordert keine besonderen Einstellungen.

Empfehlungen:

  • Support vorne, um die Struktur oberhalb des Displays zu stützen
  • Deckel mit Tree Support drucken

Die 3D-Druck-Dateien folgen separat.


Abschluss

Mit diesem Projekt hast du einen kompakten und leistungsfähigen CO₂-Monitor gebaut.
Eine Home-Assistant-Integration wird in wenigen Tagen folgen.

Anzeige

/comments0 Einträge

Kommentare

> NO_COMMENTS_FOUND

> INITIATE_COMMENT_PROTOCOL

MARKDOWN_SUPPORT: ENABLED
CHARS: 0