Benötigte Bibliotheken




Selbsttest
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
#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
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#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
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#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 SH1122 // 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
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
#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 // 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); u8g2Schriften.setCursor(1, 60); u8g2Schriften.setFont(u8g2_font_fub20_tf); u8g2Schriften.setForegroundColor(GRUEN); u8g2Schriften.setBackgroundColor(SCHWARZ); u8g2Schriften.print("Sensor starten ..."); 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); // Sensor-Test erfolgreich if(sensorStatus == 0) { Serial.println("Der Sensor funktioniert einwandfrei!"); tft.fillScreen(SCHWARZ); u8g2Schriften.setCursor(1, 60); u8g2Schriften.setFont(u8g2_font_fub20_tf); u8g2Schriften.setForegroundColor(GRUEN); u8g2Schriften.setBackgroundColor(SCHWARZ); u8g2Schriften.print("Der Sensor funktioniert"); u8g2Schriften.setCursor(1, 100); u8g2Schriften.print("einwandfrei!"); } // Sensor-Test gescheitert -> Programm beenden else { Serial.println("Fehler beim Test des Sensors!"); u8g2Schriften.setCursor(1, 60); u8g2Schriften.setForegroundColor(ROT); u8g2Schriften.setBackgroundColor(SCHWARZ); u8g2Schriften.print("Fehler beim Test des Sensors!"); u8g2Schriften.setCursor(1, 90); u8g2Schriften.print("Programm beendet!"); 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); // wenn der Richtwert überschritten wurde -> Angabe in rot if (CO2 > 800) u8g2Schriften.setForegroundColor(ROT); else u8g2Schriften.setForegroundColor(GRUEN); u8g2Schriften.setBackgroundColor(SCHWARZ); u8g2Schriften.setCursor(1, 60); u8g2Schriften.setFont(u8g2_font_logisoso50_tf); u8g2Schriften.print(String(CO2) + " ppm"); u8g2Schriften.setFont(u8g2_font_inb53_mf); u8g2Schriften.setCursor(1, 140); u8g2Schriften.setForegroundColor(BLAU); u8g2Schriften.setBackgroundColor(SCHWARZ); u8g2Schriften.print(AnzeigeTemperatur + "°C"); u8g2Schriften.setCursor(1, 220); u8g2Schriften.setForegroundColor(GELB); u8g2Schriften.setBackgroundColor(SCHWARZ); u8g2Schriften.print(AnzeigeLuftfeuchtigkeit + "%"); } } |
SingleShot SCD41
LCD
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
#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
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
#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: