Messdaten des DHT in einer Bluetooth-App anzeigen
Zunächst sollen die Messdaten des DHT in einer Bluetooth-App angezeigt werden:
Bluetooth DHT Messdaten anzeigen
BLE Serial tiny | BLE Terminal |
---|---|
Die Hardware
Benötigte Bauteile
- Temperatur-/Feuchtigkeitssensor DHT11/DHT22
- Bluetooth-Module HM10
- Leitungsdrähte
Beispiele für DHT11/DHT22 Sensoren
Die Pinbelegung kann sich von der hier gezeigten unterscheiden. Achte auf die Beschriftung auf dem Modul!
Beispiele für Bluetooth-Module HM-10
Das Bluetooth-Modul HM-10 arbeitet mit BLE (Bluetooth Low Energy) und kann mit Android-Betriebssystemen und iOS umgehen.
Die Schaltplan
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
BLE Serial tiny
Start | verbinden | Daten anzeigen |
---|---|---|
Das Programm
Benötigte Bibliothek
Bibliothek und Variablen
Binde die benötigte Bibliothek ein und definiere die Variablen:
#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);
Der setup-Teil
void setup()
{
BTSerial.begin(9600);
Serial.begin(9600);
delay(500);
// DHT-Sensor starten
dht.begin();
}
Der loop-Teil
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 + " Grad C");
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("-------------------------");
}
}
}
Messdaten sammeln, anzeigen und speichern
Das Programm soll die Messdaten des Sensors DHT11 oder DHT22 sammeln, auf dem Smartphone anzeigen und auf der SD-Karte speichern.
Die Aktionen werden durch die Bildschirmtastatur der jeweiligen App gestartet.
Taste 1: Daten sammeln und anzeigen
Taste 2: Daten auf der SD-Karte im CSV-Format speichern
Taste 3: Datei öffnen und im Seriellen Monitor anzeigen
Taste 4: Datei löschen
CSV-Dateien (Comma Seperated Value) trennen Datensätze nach bestimmten Zeichen. Das Komma kann nicht verwendet werden, weil es in der Anzeige von Temperatur und Luftfeuchtigkeit benutzt wird. Deshalb dient das Semikolon als Trennzeichen.
Zusätzlich benötigte Bauteile:
- RTC-Modul DS3231
- SD-Karten-Modul
Wenn du ein ⇒Ethernet-Shield hast, kannst du das Programm ohne Änderung mit dem dort verbauten SD-Karten-Modul verwenden.
Mit einem ⇒Datenlogger-Shield musst du den Wert für den Datenpin auf 10 setzen.
Der Schaltplan
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Anzeige auf dem Smartphone
Daten mit der App "Bluetooth for Arduino" (iOS) anzeigen:
Daten mit der App "DSD-Tech" (iOS und Android) anzeigen
Daten mit der App "BLE Terminal" (iOS) anzeigen
Das Programm
Zusätzlich benötigte Bibliotheken
Bibliotheken und Variable
Binde die benötigten Bibliotheken ein und definiere die Variablen:
#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);
Der setup-Teil
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();
}
Der loop-Teil
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 + " °C");
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!"));
}
}
}
}
Die Funktion schreibeUeberschrift:
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();
}
Verwandte Anleitungen:
- BME280 -Messdaten anzeigen
- DHT11/DHT22 - Durchschnittstemperatur berechnen und auf einem OLED-Display anzeigen
- DHT11/DHT22 - Wetterdaten aufzeichnen
- DHT11/DHT22 - Wetterstation LAN
- DHT11/DHT22 - Wetterstation Anzeige auf einem LCD
- DHT11/DHT22 - Wetterstation WiFi
- ESP - DHT Messdaten auf Waveshare 1,54 Zoll E-Ink anzeigen
- Wetterdaten von Openweather mit der API 3.0 auf einem TFT anzeigen
- Klimaanlage mit 12V-Lüfter und Transistor
- Messdaten mit BME680 und ESP32 anzeigen
- Temperatur/Feuchtigkeit als Lauftext auf der LED-Matrix des UNO R4 WiFi anzeigen
- BMP280 - Temperatur und Luftdruck messen
- Temperaturanzeige auf einem LCD mit einem ESP32-Wroom
- TMP36 - Temperatur messen
- Wetterstation mit CO2-Messung
- Wetterstation mit Nano ESP32, ESP32-Wroom, NodeMCU, DHT11/DHT22 und OLED
- Wetterstation mit UNO R4 WiFi und BME280
- Wetterstation mit UNO R4 WiFi und LCD
- DHT11/DHT22 - Wetterstation LAN Daten speichern
letzte Aktualisierung: