DHT11/DHT22 - Wet­ter­da­ten mit Bluetooth

Daten anzei­gen

#include "SoftwareSerial.h"
#include "DHT.h"

SoftwareSerial BTSerial(2, 3);

// über Bluetooth vom Smartphone gesendeter Wert
char btDaten;

// Pin des DHT-Sensors
int SENSOR_DHT = 8;

// Sensortyp festlegen
// DHT22 oder DHT11
#define SensorTyp DHT11

// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);

void setup() 
{
  BTSerial.begin(9600);
  Serial.begin(9600);
  delay(500);

  // DHT-Sensor starten
  dht.begin();
}

void loop() 
{
  if (BTSerial.available()) 
  {
    // vom Smartphone gesendeten Wert lesen
    btDaten = BTSerial.read();

    if (btDaten == '1') 
    {
      // Daten lesen
      String Temperatur = String(dht.readTemperature());
      String Luftfeuchtigkeit = String(dht.readHumidity());

      // in Strings umwandeln, . durch , ersetzen
      Temperatur.replace(".", ",");
      Luftfeuchtigkeit.replace(".", ",");

      // Daten in der App ausgeben
      BTSerial.println("Temperatur: ");
      BTSerial.println(Temperatur);
      BTSerial.println("Luftfeuchtigkeit:");
      BTSerial.println(Luftfeuchtigkeit + "%");
      BTSerial.println("----------");

      // Daten im Seriellen Monitor ausgeben
      Serial.print("Temperatur: ");
      Serial.println(Temperatur + " °C");
      Serial.print("Luftfeuchtigkeit: ");
      Serial.println(Luftfeuchtigkeit);
      Serial.println("-------------------------");
    }
  }
}

Daten anzei­gen und speichern

#include "SoftwareSerial.h"
#include "DHT.h"
#include "RTClib.h"
#include "SdFat.h"

// Bezeichnung der SD-Karte
SdFat SD;

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

// Bezeichnung der Textdatei
File Temperaturmessung;

RTC_DS3231 rtc;

SoftwareSerial BTSerial(2, 3);

// über Bluetooth vom Smartphone gesendeter Wert
char btDaten;

// Pin des DHT-Sensors
int SENSOR_DHT = 8;

// Sensortyp festlegen
// DHT22 oder DHT11
#define SensorTyp DHT11

// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);

void setup() 
{
  BTSerial.begin(9600);
  Serial.begin(9600);
  delay(500);

  rtc.begin();
  /*
    wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
    Jahr, Monat, Tag, Stunde, Minute, Sekunde
    rtc.adjust(DateTime(2023, 3, 30, 10, 30, 30));
  */

  // SD-Kartenmodul starten
  if (!SD.begin(DatenPin)) Serial.println(F("Initialisierung fehlgeschlagen!"));
  else Serial.println(F("Initialisierung abgeschlossen"));

  // DHT-Sensor starten
  dht.begin();
}

void loop() 
{
  if (BTSerial.available()) 
  {
    // vom Smartphone gesendeten Wert lesen
    btDaten = BTSerial.read();

    if (btDaten == '1') 
    {
      DateTime aktuell = rtc.now();
      char Datum[] = "DD.MM.YYYY ";
      char Zeit[] = "hh:mm:ss";

      // Daten lesen
      String Temperatur = String(dht.readTemperature());
      String Luftfeuchtigkeit = String(dht.readHumidity());

      // in Strings umwandeln, . durch , ersetzen
      Temperatur.replace(".", ",");
      Luftfeuchtigkeit.replace(".", ",");

      // Daten in der App ausgeben
      BTSerial.print(aktuell.toString(Datum));
      BTSerial.print(" ");
      BTSerial.println(aktuell.toString(Zeit));
      BTSerial.println(F("Temperatur: "));
      BTSerial.println(Temperatur);
      BTSerial.println("Luftfeuchtigkeit:");
      BTSerial.println(Luftfeuchtigkeit + "%");
      BTSerial.println(F("----------"));

      // Daten im Seriellen Monitor ausgeben
      Serial.print(aktuell.toString(Datum));
      Serial.println(aktuell.toString(Zeit));
      Serial.print(F("Temperatur: "));
      Serial.println(Temperatur + " C");
      Serial.print("Luftfeuchtigkeit:");
      Serial.println(Luftfeuchtigkeit);
      Serial.println(F("-------------------------"));
    }

    // Daten in Datei Messung.csv schreiben
    if (btDaten == '2') 
    {
      // Daten lesen
      String Temperatur = String(dht.readTemperature());
      String Luftfeuchtigkeit = String(dht.readHumidity());

      // in Strings umwandeln, . durch , ersetzen
      Temperatur.replace(".", ",");
      Luftfeuchtigkeit.replace(".", ",");

      /*
        O_CREAT -> Datei erstellen, wenn sie nicht existiert
        O_WRITE -> in die Date schreiben
        O_AT_END -> Startposition zum Schreiben an das Ende der Datei setzen
      */
      Temperaturmessung.open("Messung.csv", O_CREAT | O_WRITE | O_AT_END);

      // wenn die Datei geöffnet werden konnte ...
      if (Temperaturmessung) 
      {
        BTSerial.println(F("Schreibe Messdaten"));

        // Überschrift schreiben
        schreibeUeberschrift();

        DateTime aktuell = rtc.now();
        char Datum[] = "DD.MM.YYYY ";
        char Zeit[] = "hh:mm:ss";
     
        Temperaturmessung.print(aktuell.toString(Datum) + ';');
        Temperaturmessung.print(aktuell.toString(Zeit) +  ';');
        Temperaturmessung.print(Temperatur + ";");
        Temperaturmessung.print(Luftfeuchtigkeit);
        Temperaturmessung.println();

        // Datei schließen
        Temperaturmessung.close();
        BTSerial.println(F("Abgeschlossen."));
      } 
    }

    // Daten lesen
    if (btDaten == '3') 
    {
      Temperaturmessung = SD.open("Messung.csv", O_RDONLY);
      if (Temperaturmessung) 
      {
        // solange sich Zeilen in der Datei befinden ...
        while (Temperaturmessung.available()) 
        {
          // ... bis return lesen ('\n')
          String GeleseneZeile = Temperaturmessung.readStringUntil('\n');

          // für die bessere Lesbarkeit ; durch Leerzeichen ersetzen
          GeleseneZeile.replace(";", " ");

          // in der App und im Seriellen Monitor ausgeben
          Serial.println(GeleseneZeile);
          BTSerial.print(GeleseneZeile);         
        }

        // Datei schließen
        Temperaturmessung.close();
      }
    }

    // Datei entfernen
    if (btDaten == '4') 
    {
      if (SD.exists("Messung.csv")) 
      {
        SD.remove("Messung.csv");
        Serial.println(F("Datei 'Messung.csv' entfernt!"));
        BTSerial.println(F("Datei 'Messung.csv' entfernt!"));
      }
    }
  }
}

void schreibeUeberschrift() 
{
  Temperaturmessung.println();
  Temperaturmessung.print(F("Datum"));
  Temperaturmessung.print(";");
  Temperaturmessung.print(F("Zeit"));
  Temperaturmessung.print(";");
  Temperaturmessung.print(F("Temperatur in C"));
  Temperaturmessung.print(";");
  Temperaturmessung.print(F("Luftfeuchtigkeit in %"));
  Temperaturmessung.println();
}

Letzte Aktualisierung: Apr 13, 2024 @ 19:58