Du bist dabei, ein spannendes Projekt zu starten: die Anzeige von Umweltdaten mithilfe des SSD1306 OLED-Displays und eines SCD30 Luftqualitätssensors. Falls du schon den früheren Beitrag zum Einsatz des SCD30 Sensors ohne Display gelesen hast, wirst du feststellen, dass dieses Skript eine erweiterte Anwendung darstellt, indem es die Anzeigefähigkeiten des SSD1306 nutzt.
Zunächst, lass uns die benötigte Hardware durchgehen. Du brauchst:
Hardware
- Sensirion SCD30 Luftqualitätssensor.
- Ein OLED-Display, gesteuert durch den SSD1306 Chip. Dieser Chip ist ein Standard in der Industrie und unterstützt viele gängige Displays. Für dein Projekt musst du lediglich die Pixelgröße anpassen.
- Ein Arduino oder ESP32 Mikrocontroller. Beide sind mit diesem Skript kompatibel.
- Verbindungskabel: Zum Anschluss des Sensors an den Mikrocontroller.
Wichtig ist, dass du das Display und den Sensor an die I2C-Anschlüsse deines Mikrocontrollers anschließt. Für den ESP32 sind dies typischerweise die Pins 21 (SDA) und 22 (SCL), während du beim Arduino Uno die A4 (SDA) und A5 (SCL) Pins verwenden solltest.
In deinem Skript initialisierst du zuerst die erforderlichen Bibliotheken und definierst die Bildschirmdimensionen deines Displays. Anschließend initialisierst du den SCD30-Sensor und das SSD1306-Display. Das setup()
-Verfahren ist entscheidend, um eine erfolgreiche Kommunikation über I2C sicherzustellen.
In der loop()
-Funktion fragst du dann die Daten vom SCD30-Sensor ab und zeigst sie auf dem Display an. Du zeigst den CO2-Wert, die Temperatur und die Luftfeuchtigkeit an. Beachte, dass das Display regelmäßig aktualisiert wird, um die neuesten Messwerte anzuzeigen.
Durch die Kombination von SCD30 und SSD1306 kannst du ein leistungsfähiges Überwachungssystem für die Luftqualität aufbauen, das sowohl informativ als auch visuell ansprechend ist.
#include <Wire.h> // Einbinden der Wire-Bibliothek für I2C-Kommunikation
#include "SparkFun_SCD30_Arduino_Library.h" // Einbinden der Bibliothek für den SCD30-Sensor
#include <Adafruit_GFX.h> // Grafikbibliothek für das Display
#include <Adafruit_SSD1306.h> // Bibliothek für das SSD1306 OLED-Display
#define SCREEN_WIDTH 128 // Breite des OLED-Displays in Pixeln
#define SCREEN_HEIGHT 64 // Höhe des OLED-Displays in Pixeln
SCD30 airSensor; // Erstellen eines SCD30-Sensorobjekts
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Erstellen eines Displayobjekts
void setup() {
Wire.begin(); // Start der I2C-Kommunikation
Serial.begin(9600); // Start der seriellen Kommunikation
airSensor.begin(); // Initialisierung des SCD30-Sensors
// Initialisierung des OLED-Displays
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed")); // Fehlermeldung, falls die Initialisierung scheitert
for(;;); // Endlosschleife bei Fehlschlag
}
display.clearDisplay(); // Display säubern
display.setTextSize(2); // Textgröße einstellen
display.setTextColor(SSD1306_WHITE); // Textfarbe einstellen
}
void loop() {
if (airSensor.dataAvailable()) { // Überprüfen, ob Daten vom Sensor verfügbar sind
display.clearDisplay(); // Display säubern für neue Daten
display.setCursor(0,0); // Cursor auf Anfang setzen
display.print(F("CO2: ")); // CO2-Wert anzeigen
display.println(airSensor.getCO2()); // CO2-Wert vom Sensor abrufen und anzeigen
display.setCursor(0, 16); // Cursor für die nächste Zeile setzen
display.print(F("Temp: ")); // Temperatur anzeigen
display.println(airSensor.getTemperature(), 1); // Temperaturwert vom Sensor abrufen und anzeigen
display.setCursor(0, 32); // Cursor für die nächste Zeile setzen
display.print(F("Hum: ")); // Luftfeuchtigkeit anzeigen
display.println(airSensor.getHumidity(), 1); // Luftfeuchtigkeitswert vom Sensor abrufen und anzeigen
display.display(); // Angezeigte Daten auf dem Display aktualisieren
}
delay(500); // Kurze Verzögerung vor dem nächsten Durchlauf der Schleife
}
Schreibe einen Kommentar