
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 oder HC-08
- Leitungsdrähte
Beispiele für DHT11/DHT22 Sensoren

Die Pinbelegung kann sich von der hier gezeigten unterscheiden. Achte auf die Beschriftung auf dem Modul!
Das Bluetooth-Modul HM-10

Die Bluetooth-Module HM-10 ud HC-08 arbeiten mit BLE (Bluetooth Low Energy) und können 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #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
1 2 3 4 5 6 7 8 9 | void setup() { BTSerial.begin(9600); Serial.begin(9600); delay(500); // DHT-Sensor starten dht.begin(); } |
Der loop-Teil
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 | 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)
[Wetter-Bluetooth]
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:
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 | #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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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
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 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 | 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:
letzte Aktualisierung:






















