

Das Programm liest Temperatur und Luftfeuchtigkeit, berechnet nach jeweils fünf Messungen einen Durchschnittswert für die Temperatur und zeigt diesen Wert ausführlich im Seriellen Monitor und in einer Kurzfassung auf einem OLED an.

Der Sensor DHT22 misst die Temperatur und die Luftfeuchtigkeit. Das hier verwendete Bauteil besitzt drei Anschlüsse.
Die Version mit vier Pins muss in der Reihenfolge 5V → Daten (Pin) → leer → GND geschaltet werden.
So sieht es aus: (Messung an unterschiedlichen Tagen)

Benötigte Bauteile:
- Temperatursensor DHT22
- OLED-Display 0,96 Zoll/1,3 Zoll
- Leitungsdrähte

Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliotheken:
![]() | ![]() |
Binde die benötigten Bibliotheken ein und definiere die Variablen.
# include <SimpleDHT.h>
# include <SSD1306Ascii.h>
# include <SSD1306AsciiWire.h>
// mögliche Adressen I2C: 0x3C 0x3D
# define I2C_ADDRESS 0x3C
// Name des OLED festlegen (oled)
SSD1306AsciiWire oled;
int SENSOR_DHT22 = 9;
// Sensor einen Namen zuweisen (dht22)
SimpleDHT22 dht22(SENSOR_DHT22);
int AnzahlMessungen = 0;
// Array für die Anzahl der Messungen
float Messung[5];
// Variable für die Berechnung der Durchschnittstemperatur
float Durchschnitt;
// Länge des Arrays Messung
int Anzahl = sizeof(Messung) / sizeof(Messung[0]);
Der setup-Teil. Beachte die Kommentare.
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// OLED starten
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x64, I2C_ADDRESS);
// Schriftart bestimmen
oled.setFont(Callibri11);
oled.clear();
}
Im loop-Teil zwei Funktionen aufgerufen. Die Funktion DurchschnittBerechnen berechnet den Durchschnitt der letzten Messungen. Die Anzahl wird durch die im Kopf definierte Größe des Arrays Messung festgelegt. Als Variable werden ihr das Array Messung und die Größe des Arrays Messung übergeben.
float DurchschnittBerechnen(float Messung[], int Anzahl)
{
float Durchschnitt = 0;
for (int i = 0; i < Anzahl; i ++)
{
Durchschnitt = Durchschnitt + Messung[i];
// Funktion PunktErsetzen -> , durch . ersetzen
String AnzeigeDurchschnitt = PunktErsetzen(String(Messung[i]));
// aktuelle Messung anzeigen
Serial.println("Messung " + String(i + 1) + ": " + AnzeigeDurchschnitt);
}
// Durchschnitt berechnen
Durchschnitt = Durchschnitt / Anzahl;
return Durchschnitt;
}
Die Funktion PunktErsetzen ersetzt in den gemessenen Werten den Punkt durch ein Komma.
String PunktErsetzen(String ErsatzString)
{
ErsatzString.replace(".", ",");
return ErsatzString;
}
Der loop-Teil. Beachte die Kommentare.
void loop()
{
float Temperatur;
float Luftfeuchtigkeit;
// Daten lesen
dht22.read2(&Temperatur, &Luftfeuchtigkeit, NULL);
Serial.println("Messung: " + String(AnzahlMessungen + 1));
// . durch , ersetzen
String AnzeigeTemperatur = PunktErsetzen(String(Temperatur));
String AnzeigeLuftfeuchtigkeit = PunktErsetzen(String(Luftfeuchtigkeit));
// Ausgabe im Seriellen Monitor mit Tabstopps formatieren
Serial.print("Temperatur: \t\t");
Serial.println(AnzeigeTemperatur + " Grad");
Serial.print("Luftfeuchtigkeit: \t");
Serial.println(AnzeigeLuftfeuchtigkeit + " %");
Serial.println("---------------------------------------");
// Ausgabe auf dem OLED
oled.setCursor(0, 0);
oled.print("Temperatur: ");
oled.print(AnzeigeTemperatur + " Grad");
oled.println();
oled.print("Feuchtigkeit: ");
oled.println(AnzeigeLuftfeuchtigkeit + " %");
// aktuelle Temperatur in das Array Messung schreiben
Messung[AnzahlMessungen] = Temperatur;
AnzahlMessungen ++;
// wenn jeweils Anzahl Messungen erfolgt sind
// AnzahlMessungen lässt sich ohne Rest durch Anzahl teilen
if (AnzahlMessungen % Anzahl == 0)
{
/*
Durchschnitt berechnen
der Funktion DurchschnittBerechnen wird das Array Messung
und die Länge des Arrays Messung (Anzahl übergeben
*/
Durchschnitt = DurchschnittBerechnen(Messung, Anzahl);
// . durch , ersetzen
String AnzeigeDurchschnitt = PunktErsetzen(String(Durchschnitt));
// Ausgabe der Durchschnittstemperatur Serieller Monitor
Serial.print("Durchschnitt der letzten " + String(Anzahl));
Serial.println(" Messungen: " + AnzeigeDurchschnitt + " Grad");
Serial.println("---------------------------------------");
// Ausgabe der Durchschnittstemperatur OLED
oled.println("------------------------------");
oled.print("Durchschnitt: " + AnzeigeDurchschnitt + " Grad");
AnzahlMessungen = 0;
}
// mindestens 2 Sekunden Pause
delay(2000);
}
Verwandte Aufgaben:
- DHT22 - Wetterdaten aufzeichnen
- DHT22 - Wetterdaten mit Bluetooth-Modul übermitteln
- DHT22 - Wetterstation LAN
- DHT22 - Wetterstation Anzeige auf einem LCD
- DHT22 - Wetterstation WiFi
- BMP280 - Temperatur und Luftdruck messen
- TMP36 - Temperatur messen
- DHT22 - Wetterstation LAN Daten speichern
Letzte Aktualisierung: