DHT22 Wet­ter­da­ten aufzeichnen

// Bibliothek für die SD-Karte
# include <SdFat.h>

// Bezeichnung der SD-Karte
SdFat SD;

// Bibliothek für den DHT22
# include <SimpleDHT.h>

// Bibliothek für das RTC-Modul
# include <RTClib.h>
RTC_DS3231 rtc;

// Bezeichnung der Textdatei
File Temperaturmessung;

// Datenpin für das SD-Kartenmodul
int DatenPin = 4;
int SENSOR_DHT22 = 8;

// Namen des Sensors (dht22)
SimpleDHT22 dht22(SENSOR_DHT22);
int SensorLesen;

// Trennzeichen für die CSV-Datei
const String TrennZeichen = ";";
String AktuellesDatum;
String AktuelleZeit;

void setup()
{
  pinMode(SENSOR_DHT22, INPUT);

  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial) {;}

  Serial.println(F("Initialisiere SD-Karte"));
  if (!SD.begin(DatenPin))
  {
    Serial.println(F("Initialisierung fehlgeschlagen!"));
  }
  else Serial.println(F("Initialisierung abgeschlossen"));
  rtc.begin();

  /*
    wenn Datum und Zeit nicht korrekt → Datum/Zeit setzen
    Jahr, Monat, Tag, Stunde, Minute, Sekunde
    rtc.adjust(DateTime(2020, 10, 25, 17, 28, 30));
  */
}

void loop()
{
  DateTime aktuell = rtc.now();
  float Temperatur;
  float Luftfeuchtigkeit;

  // Daten lesen
  dht22.read2(&Temperatur, &Luftfeuchtigkeit, NULL);

  // Funktion aufrufen
  ZeitAusgeben(aktuell);

  // in Strings umwandeln, . durch , ersetzen
  String AnzeigeTemperatur = String(Temperatur);
  AnzeigeTemperatur.replace(".", ",");
  String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
  AnzeigeLuftfeuchtigkeit.replace(".", ",");
  Serial.print(F("Temperatur:\t\t"));
  Serial.println(AnzeigeTemperatur);
  Serial.print(F("Luftfeuchtigkeit in %:\t"));
  Serial.println(AnzeigeLuftfeuchtigkeit);

  /*
    Datei zum Schreíben (FILE_WRITE) öffnen
    wenn sie noch nicht existiert, wird sie erstellt
    wenn Schreiben nicht möglich → Fehlermeldung
  */
  if (!Temperaturmessung.open("Messung.csv", FILE_WRITE))
  {
    Serial.print(F("Datei kann nicht ge\u00f6ffnet werden!"));
  }

  // wenn die Datei geöffnet werden konnte ...
  if (Temperaturmessung)
  {
    Serial.println(F("Schreibe Messdaten in die Datei Messung.csv ... "));
    Serial.println(F("-----------------------------------"));

    // Überschrift in Datei schreiben
    // Funktion aufrufen
    schreibeUeberschrift();
    Temperaturmessung.print(AktuellesDatum + TrennZeichen);
    Temperaturmessung.print(AktuelleZeit + TrennZeichen);
    Temperaturmessung.print(AnzeigeTemperatur + TrennZeichen);
    Temperaturmessung.print(AnzeigeLuftfeuchtigkeit);
    Temperaturmessung.println();

    // Schreibfehler abfragen
    if (!Temperaturmessung.sync() || Temperaturmessung.getWriteError())
    {
      Serial.print(F("Schreibfehler!"));
    }
    else
    {
      // Datei schließen
      Temperaturmessung.close();
      Serial.println(F("Abgeschlossen."));
      Serial.println();
    }
  }

  // Zeit bis zur nächsten Messung (eine Minute)
  delay(60000);
}

void ZeitAusgeben(DateTime aktuell)
{
  char Datum[] = "DD.MM.YYYY";
  AktuellesDatum = aktuell.toString(Datum);

  char Zeit[] = "Uhrzeit: hh:mm:ss";
  AktuelleZeit = aktuell.toString(Zeit);
  Serial.println(AktuellesDatum + " " + AktuelleZeit);
}

void schreibeUeberschrift()
{
  Temperaturmessung.println();
  Temperaturmessung.print(F("Datum"));

  // Trennzeichen für die CSV-Datei
  Temperaturmessung.print(TrennZeichen);
  Temperaturmessung.print(F("Zeit"));
  Temperaturmessung.print(TrennZeichen);
  Temperaturmessung.print(F("Temperatur in °C"));
  Temperaturmessung.print(TrennZeichen);
  Temperaturmessung.print(F("Luftfeuchtigkeit in %"));
  Temperaturmessung.println();
}

Letzte Aktualisierung: 16. Okt 2022 @ 13:37