Inhaltsverzeichnis
Daten anzeigen
#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 anzeigen 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: