Inhaltsverzeichnis
Selbsttest
#include "Arduino.h"
#include "SensirionI2cScd4x.h"
#include "Wire.h"
SensirionI2cScd4x sensor;
float TemperaturAbweichung;
uint32_t LuftdruckAnpassung;
uint16_t HoeheAnpassung;
uint16_t ASCaktiviert;
uint16_t ASCZiel;
uint16_t KalibrierungInitialPeriode;
uint16_t KalibrierungStandardPeriode;
uint16_t sensorStatus;
void setup()
{
Serial.begin(9600);
// I2C
Wire.begin();
sensor.begin(Wire, SCD41_I2C_ADDR_62);
// R4 WiFi mit QWIIC-Anschluss
// Wire1.begin();
// sensor.begin(Wire1, SCD41_I2C_ADDR_62);
delay(30);
sensor.wakeUp();
sensor.stopPeriodicMeasurement();
sensor.reinit();
sensor.getTemperatureOffset(TemperaturAbweichung);
Serial.print(F("Temperatur Anpassung °C: "));
Serial.println(TemperaturAbweichung);
sensor.getAmbientPressure(LuftdruckAnpassung);
Serial.print(F("Luftdruck Anpassung in Pa: "));
Serial.println(LuftdruckAnpassung);
sensor.getSensorAltitude(HoeheAnpassung);
Serial.print(F("Anpassung Höhe in m: "));
Serial.println(HoeheAnpassung);
Serial.println();
Serial.println(F("Automatische Selbstkalibrierung (ASC):"));
sensor.getAutomaticSelfCalibrationEnabled(ASCaktiviert);
if (ASCaktiviert)
{
Serial.println(F("aktiviert"));
}
else Serial.println(F("nicht aktiviert"));
sensor.getAutomaticSelfCalibrationTarget(ASCZiel);
Serial.print(F(" - Ziel für die automatische Kalibrierung in ppm: "));
Serial.println(ASCZiel);
sensor.getAutomaticSelfCalibrationInitialPeriod(KalibrierungInitialPeriode);
Serial.print(F(" - Periode für die Initielisierung in Stunden: "));
Serial.println(KalibrierungInitialPeriode);
sensor.getAutomaticSelfCalibrationStandardPeriod(KalibrierungStandardPeriode);
Serial.print(F(" - Standard-Periode in Stunden: "));
Serial.println(KalibrierungStandardPeriode);
Serial.println();
Serial.print(F("Selbsttest durchführen ... "));
sensor.performSelfTest(sensorStatus);
if(sensorStatus == 0) Serial.println("Der Sensor funktioniert einwandfrei!");
else
{
Serial.println("Fehler beim Test des Sensors!");
while(1);
}
}
void loop()
{
// bleibt leer
}Periodische Messung
LCD
#include "Arduino.h"
#include "SensirionI2cScd4x.h"
#include "Wire.h"
#include "LCDIC2.h"
// 4-zeiliges LCD
LCDIC2 lcd(0x27, 20, 4);
uint16_t sensorStatus = 1;
SensirionI2cScd4x sensor;
void setup()
{
// LCD starten
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
// auf Seriellen Monitor warten
Serial.begin(9600);
while (!Serial)
{
delay(200);
}
// I2C
Wire.begin();
sensor.begin(Wire, SCD41_I2C_ADDR_62);
// auf Werkseinstellungen zurücksetzen
// sensor.performFactoryReset();
delay(30);
// Sensor aufwecken
sensor.wakeUp();
// periodische Messung stoppen
sensor.stopPeriodicMeasurement();
// Voreinstellungen aus dem EEPROM lesen
sensor.reinit();
sensor.performSelfTest(sensorStatus);
if(sensorStatus == 0) Serial.println("Der Sensor funktioniert einwandfrei!");
else
{
Serial.println("Fehler beim Test des Sensors!");
while(1);
}
// Höhe des Standorts in m
sensor.setSensorAltitude(80);
// Temperaturschwankung berücksichtigen
sensor.setTemperatureOffset(2.0);
// Mittelwert des Luftdrucks hPa *100
// nur sinnvoll, wenn ein präzises Messgerät verfügbar ist
// sensor.setAmbientPressure(100400);;
// Periodic: alle 5 Sekunden messen
// auskommentieren bei SingleShot
sensor.startPeriodicMeasurement();
}
void loop()
{
bool SensorBereit = false;
uint16_t CO2 = 0;
float Temperatur = 0.0;
float Luftfeuchtigkeit = 0.0;
sensor.getDataReadyStatus(SensorBereit);
// wenn der Sensor bereit ist -> Messung durchführen
if (SensorBereit)
{
// periodische Messung
sensor.readMeasurement(CO2, Temperatur, Luftfeuchtigkeit);
String AnzeigeTemperatur = String(Temperatur);
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit.replace(".", ",");
// Anzeige Serieller Monitor
Serial.print("CO2 Konzentration: ");
Serial.print(CO2);
Serial.println(" ppm");
Serial.print("Temperatur: ");
Serial.print(AnzeigeTemperatur);
Serial.println("°C");
Serial.print("Luftfeuchtigkeit: ");
Serial.print(AnzeigeLuftfeuchtigkeit);
Serial.println("%");
Serial.println("------------------------");
// Anzeige LCD
lcd.setCursor(0, 0);
lcd.print("Temperatur: ");
lcd.print(AnzeigeTemperatur);
lcd.print("\337C ");
lcd.setCursor(0, 1);
lcd.print("Luftfeuchtigkeit: ");
lcd.setCursor(0, 2);
lcd.print(AnzeigeLuftfeuchtigkeit);
lcd.print("% ");
lcd.setCursor(0, 3);
lcd.print("CO2: ");
lcd.print(String(CO2));
lcd.print(" ppm ");
}
}OLED
#include "Arduino.h"
#include "SensirionI2cScd4x.h"
#include "Wire.h"
#include "U8g2lib.h"
// 0,96 Zoll SSD1306
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0);
// 2,08 Zoll SH122
// U8G2_SH1122_256X64_1_HW_I2C oled(U8G2_R0);
uint16_t sensorStatus = 1;
SensirionI2cScd4x sensor;
void setup()
{
oled.begin();
// Schriftart OLED 2,08
oled.setFont(u8g2_font_helvB14_tf);
Serial.begin(9600);
while (!Serial)
{
delay(200);
}
Wire.begin();
sensor.begin(Wire, SCD41_I2C_ADDR_62);
// auf Werkseinstellungen zurücksetzen
// sensor.performFactoryReset();
delay(30);
// Sensor aufwecken
sensor.wakeUp();
// periodische Messung stoppen
sensor.stopPeriodicMeasurement();
// Voreinstellungen aus dem EEPROM lesen
sensor.reinit();
sensor.performSelfTest(sensorStatus);
if(sensorStatus == 0) Serial.println("Der Sensor funktioniert einwandfrei!");
else
{
Serial.println("Fehler beim Test des Sensors!");
while(1);
}
// Höhe des Standorts in m
sensor.setSensorAltitude(80);
// Temperaturschwankung berücksichtigen
sensor.setTemperatureOffset(0.5);
// Periodic: alle 5 Sekunden messen
// auskommentieren bei SingleShot
sensor.startPeriodicMeasurement();
// LowPower: alle 30 Sekunden messen
// sensor.startLowPowerPeriodicMeasurement();
}
void loop()
{
bool SensorBereit = false;
uint16_t CO2 = 0;
float Temperatur = 0.0;
float Luftfeuchtigkeit = 0.0;
sensor.getDataReadyStatus(SensorBereit);
// wenn der Sensor bereit ist -> Messung durchführen
if (SensorBereit)
{
// periodische Messung
sensor.readMeasurement(CO2, Temperatur, Luftfeuchtigkeit);
String AnzeigeTemperatur = String(Temperatur);
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit.replace(".", ",");
// Anzeige Serieller Monitor
Serial.print("CO2 Konzentration: ");
Serial.print(CO2);
Serial.println(" ppm");
Serial.print("Temperatur: ");
Serial.print(AnzeigeTemperatur);
Serial.println("°C");
Serial.print("Luftfeuchtigkeit: ");
Serial.print(AnzeigeLuftfeuchtigkeit);
Serial.println("%");
Serial.println("------------------------");
oled.clearDisplay();
do
{
oled.setCursor(5, 14);
// OLED 2,08
// oled.print("Temperatur: ");
oled.print(AnzeigeTemperatur);
// Grad-Zeichen
oled.print((char)176);
oled.print("C");
oled.setCursor(5, 34);
// OLED 2,08
// oled.print("Luftfeuchtigkeit: ");
oled.print(AnzeigeLuftfeuchtigkeit);
oled.print("%");
oled.setCursor(5, 56);
// OLED 2,08
// oled.print("CO2: ");
oled.print(String(CO2));
oled.print(" ppm");
}
while (oled.nextPage());
}
}TFT mit ESP32
Beachte die ⇒SPI-Pins der Mikrocontroller.
#include "Arduino.h"
#include "SensirionI2cScd4x.h"
#include "Wire.h"
#include "Adafruit_ILI9341.h"
#include "U8g2_for_Adafruit_GFX.h"
// Objekt u8g2Schriften
U8G2_FOR_ADAFRUIT_GFX u8g2Schriften;
// Wemos D1 Mini
// #define TFT_CS D8
// #define TFT_RST D1
// #define TFT_DC D2
// XIAO
// #define TFT_CS D7
// #define TFT_RST D1
// #define TFT_DC D2
// ESP32-C3
// #define TFT_RST 2
// #define TFT_DC 3
// #define TFT_CS 7
// ESP32-C3 Super Mini
// #define TFT_RST 2
// #define TFT_DC 3
// #define TFT_CS 7
// Arduino Nano ESP 32
// #define TFT_CS 10
// #define TFT_RST 9
// #define TFT_DC 8
// ESP32-C6
// #define TFT_CS 18
// #define TFT_RST 3
// #define TFT_DC 2
// ESP32-WROOM
// #define TFT_CS 5
// #define TFT_RST 4
// #define TFT_DC 2
// ESP32-S3
// #define TFT_CS 10
// #define TFT_RST 5
// #define TFT_DC 4
// ESP32-S3
// #define TFT_CS 10
// #define TFT_RST 5
// #define TFT_DC 4
// Farben
#define SCHWARZ 0x0000
#define WEISS 0xFFFF
#define BLAU 0x001F
#define ROT 0xF800
#define GRUEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define GELB 0xFFE0
#define BRAUN 0x9A60
#define GRAU 0x7BEF
#define GRUENGELB 0xB7E0
#define DUNKELCYAN 0x03EF
#define ORANGE 0xFDA0
#define PINK 0xFE19
#define BORDEAUX 0xA000
#define HELLBLAU 0x867D
#define VIOLETT 0x915C
#define SILBER 0xC618
#define GOLD 0xFEA0
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
uint16_t sensorStatus = 1;
SensirionI2cScd4x sensor;
void setup()
{
Serial.begin(9600);
while (!Serial)
{
delay(200);
}
// Schriften von u8g2 tft zuordnen
u8g2Schriften.begin(tft);
tft.begin();
tft.setRotation(3);
tft.fillScreen(SCHWARZ);
Wire.begin();
sensor.begin(Wire, SCD41_I2C_ADDR_62);
// auf Werkseinstellungen zurücksetzen
// sensor.performFactoryReset();
delay(30);
// Sensor aufwecken
sensor.wakeUp();
// periodische Messung stoppen
sensor.stopPeriodicMeasurement();
// Voreinstellungen aus dem EEPROM lesen
sensor.reinit();
sensor.performSelfTest(sensorStatus);
if(sensorStatus == 0) Serial.println("Der Sensor funktioniert einwandfrei!");
else
{
Serial.println("Fehler beim Test des Sensors!");
while(1);
}
// Höhe des Standorts in m
sensor.setSensorAltitude(80);
// Temperaturschwankung berücksichtigen
sensor.setTemperatureOffset(0.5);
// Periodic: alle 5 Sekunden messen
// auskommentieren bei SingleShot
// sensor.startPeriodicMeasurement();
// LowPower: alle 30 Sekunden messen
sensor.startLowPowerPeriodicMeasurement();
}
void loop()
{
bool SensorBereit = false;
uint16_t CO2 = 0;
float Temperatur = 0.0;
float Luftfeuchtigkeit = 0.0;
sensor.getDataReadyStatus(SensorBereit);
// wenn der Sensor bereit ist -> Messung durchführen
if (SensorBereit)
{
// periodische Messung
sensor.readMeasurement(CO2, Temperatur, Luftfeuchtigkeit);
String AnzeigeTemperatur = String(Temperatur);
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit.replace(".", ",");
// Anzeige Serieller Monitor
Serial.print("CO2 Konzentration: ");
Serial.print(CO2);
Serial.println(" ppm");
Serial.print("Temperatur: ");
Serial.print(AnzeigeTemperatur);
Serial.println("°C");
Serial.print("Luftfeuchtigkeit: ");
Serial.print(AnzeigeLuftfeuchtigkeit);
Serial.println("%");
Serial.println("------------------------");
tft.fillScreen(SCHWARZ);
u8g2Schriften.setForegroundColor(BLAU);
u8g2Schriften.setBackgroundColor(SCHWARZ);
u8g2Schriften.setCursor(1, 60);
u8g2Schriften.setFont(u8g2_font_inb53_mf);
u8g2Schriften.print(String(CO2) + " ppm");
u8g2Schriften.setCursor(1, 140);
u8g2Schriften.setForegroundColor(ROT);
u8g2Schriften.setBackgroundColor(SCHWARZ);
u8g2Schriften.print(AnzeigeTemperatur + "°C");
u8g2Schriften.setCursor(1, 220);
u8g2Schriften.setForegroundColor(GRUEN);
u8g2Schriften.setBackgroundColor(SCHWARZ);
u8g2Schriften.print(AnzeigeLuftfeuchtigkeit + "%");
}
}SingleShot SCD41
LCD
#include "Arduino.h"
#include "SensirionI2cScd4x.h"
#include "Wire.h"
#include "LCDIC2.h"
// 4-zeiliges LCD
LCDIC2 lcd(0x27, 20, 4);
uint16_t sensorStatus = 1;
SensirionI2cScd4x sensor;
void setup()
{
// LCD starten
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
Serial.begin(9600);
// warten auf Seriellen Monitor
while (!Serial)
{
delay(200);
}
Wire.begin();
sensor.begin(Wire, SCD41_I2C_ADDR_62);
// auf Werkseinstellungen zurücksetzen
// sensor.performFactoryReset();
// Höhe des Standorts in m
sensor.setSensorAltitude(80);
delay(30);
// Sensor aufwecken
sensor.wakeUp();
// periodische Messung stoppen
sensor.stopPeriodicMeasurement();
// Voreinstellungen aus dem EEPROM lesen
sensor.reinit();
sensor.performSelfTest(sensorStatus);
if (sensorStatus == 0) Serial.println("Der Sensor funktioniert einwandfrei!");
else
{
Serial.println("Fehler beim Test des Sensors!");
while (1);
}
// Temperaturschwankung berücksichtigen
sensor.setTemperatureOffset(2.0);
}
void loop()
{
bool SensorBereit = false;
uint16_t CO2 = 0;
float Temperatur = 0.0;
float Luftfeuchtigkeit = 0.0;
sensor.measureSingleShot();
sensor.measureAndReadSingleShot(CO2, Temperatur, Luftfeuchtigkeit);
String AnzeigeTemperatur = String(Temperatur);
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit.replace(".", ",");
// Anzeige Serieller Monitor
Serial.print("CO2 Konzentration: ");
Serial.print(CO2);
Serial.println(" ppm");
Serial.print("Temperatur: ");
Serial.print(AnzeigeTemperatur);
Serial.println("°C");
Serial.print("Luftfeuchtigkeit: ");
Serial.print(AnzeigeLuftfeuchtigkeit);
Serial.println("%");
Serial.println("------------------------");
// Anzeige LCD
lcd.setCursor(0, 0);
lcd.print("Temperatur: ");
lcd.print(AnzeigeTemperatur);
lcd.print("\337C ");
lcd.setCursor(0, 1);
lcd.print("Luftfeuchtigkeit: ");
lcd.setCursor(0, 2);
lcd.print(AnzeigeLuftfeuchtigkeit);
lcd.print("% ");
lcd.setCursor(0, 3);
lcd.print("CO2: ");
lcd.print(String(CO2));
lcd.print(" ppm ");
}OLED
#include "Arduino.h"
#include "SensirionI2cScd4x.h"
#include "Wire.h"
#include "U8g2lib.h"
// 0,96 Zoll SSD1306
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0);
// 2,08 Zoll SH122
// U8G2_SH1122_256X64_1_HW_I2C oled(U8G2_R0);
uint16_t sensorStatus = 1;
SensirionI2cScd4x sensor;
void setup()
{
oled.begin();
// Schriftart OLED 2,08
oled.setFont(u8g2_font_helvB14_tf);
Serial.begin(9600);
while (!Serial)
{
delay(200);
}
Wire.begin();
sensor.begin(Wire, SCD41_I2C_ADDR_62);
// auf Werkseinstellungen zurücksetzen
// sensor.performFactoryReset();
delay(30);
// Sensor aufwecken
sensor.wakeUp();
// periodische Messung stoppen
sensor.stopPeriodicMeasurement();
// Voreinstellungen aus dem EEPROM lesen
sensor.reinit();
sensor.performSelfTest(sensorStatus);
if (sensorStatus == 0) Serial.println("Der Sensor funktioniert einwandfrei!");
else
{
Serial.println("Fehler beim Test des Sensors!");
while (1);
}
// Höhe des Standorts in m
sensor.setSensorAltitude(80);
// Temperaturschwankung berücksichtigen
sensor.setTemperatureOffset(0.5);
}
void loop()
{
bool SensorBereit = false;
uint16_t CO2 = 0;
float Temperatur = 0.0;
float Luftfeuchtigkeit = 0.0;
sensor.measureSingleShot();
sensor.measureAndReadSingleShot(CO2, Temperatur, Luftfeuchtigkeit);
String AnzeigeTemperatur = String(Temperatur);
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit.replace(".", ",");
// Anzeige Serieller Monitor
Serial.print("CO2 Konzentration: ");
Serial.print(CO2);
Serial.println(" ppm");
Serial.print("Temperatur: ");
Serial.print(AnzeigeTemperatur);
Serial.println("°C");
Serial.print("Luftfeuchtigkeit: ");
Serial.print(AnzeigeLuftfeuchtigkeit);
Serial.println("%");
Serial.println("------------------------");
oled.clearDisplay();
do
{
oled.setCursor(5, 14);
// OLED 2,08
// oled.print("Temperatur: ");
oled.print(AnzeigeTemperatur);
// Grad-Zeichen
oled.print((char)176);
oled.print("C");
oled.setCursor(5, 34);
// OLED 2,08
// oled.print("Luftfeuchtigkeit: ");
oled.print(AnzeigeLuftfeuchtigkeit);
oled.print("%");
oled.setCursor(5, 56);
// OLED 2,08
// oled.print("CO2: ");
oled.print(String(CO2));
oled.print(" ppm");
}
while (oled.nextPage());
}Letzte Aktualisierung: