DHT22 vs. BME280 vs. DS18B20: Welcher Temperatursensor passt zu deinem Projekt?
"Ich will nur die Temperatur messen" – klingt einfach, endet aber schnell in Verwirrung. DHT22, BME280, DS18B20: Drei Sensoren, drei völlig unterschiedliche Anschlussarten, drei Preisklassen. Welcher ist der richtige für deine Wetterstation, dein Aquarium oder dein Smart-Home-Projekt? Statt Marketing-Versprechen bekommst du hier den ehrlichen Vergleich: Wie genau messen sie wirklich, wie schnell, wie kompliziert ist der Anschluss – und wann lohnt sich welcher. Mit fertigem Code für alle drei und einer klaren Empfehlung am Ende. Danach weißt du genau, welchen Sensor du bestellst.
Die drei Kandidaten auf einen Blick
Alle drei messen Temperatur – aber sie unterscheiden sich in fast allem anderen. Der eine kann zusätzlich Luftfeuchte, der nächste sogar Luftdruck, der dritte ist wasserdicht. Fangen wir mit dem Überblick an:
| Merkmal | DHT22 (AM2302) | BME280 | DS18B20 |
|---|---|---|---|
| Misst | Temp + Feuchte | Temp + Feuchte + Druck | nur Temperatur |
| Temp-Genauigkeit | ±0,5 °C | ±1,0 °C (typ. besser) | ±0,5 °C |
| Temp-Bereich | -40 bis +80 °C | -40 bis +85 °C | -55 bis +125 °C |
| Schnittstelle | 1-Draht (proprietaer) | I2C / SPI | OneWire (Dallas) |
| Messrate | alle 2 s | > 100x/s moeglich | ~1x/s (bei 12 Bit) |
| Bauform | Platine, offen | Mini-Platine | wasserdichte Sonde |
| Mehrere am Bus | nein | begrenzt (2 Adressen) | ja, viele |
| Preisklasse | guenstig | mittel | guenstig |
Kandidat 1: DHT22 – der günstige Raumklima-Allrounder
Der DHT22 (baugleich AM2302) ist der Klassiker für Einsteiger. Er misst Temperatur und relative Luftfeuchte, kostet wenig und braucht nur einen einzigen Datenpin. Genau deshalb steckt er in unzähligen Wetterstations-Tutorials.
Seine Schwäche ist die Geschwindigkeit: Er liefert nur alle zwei Sekunden einen neuen Wert. Für Raumklima völlig ausreichend, für schnelle Regelungen ungeeignet. Der Anschluss ist denkbar simpel – ein Pull-Up-Widerstand (10 kΩ) zwischen Datenleitung und VCC, fertig. Viele Module haben ihn schon an Bord.
#include "DHT.h"
#define DHT_PIN 4
#define DHT_TYP DHT22 // wichtig: NICHT DHT11!
DHT dht(DHT_PIN, DHT_TYP);
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("DHT22 Test");
}
void loop() {
// DHT22 braucht mind. 2 Sekunden zwischen Messungen
delay(2000);
float temp = dht.readTemperature();
float feuchte = dht.readHumidity();
// NaN = Messung fehlgeschlagen
if (isnan(temp) || isnan(feuchte)) {
Serial.println("Lesefehler – Verkabelung/Pull-Up pruefen");
return;
}
// Hitzeindex (gefuehlte Temperatur) gratis dazu
float gefuehlt = dht.computeHeatIndex(temp, feuchte, false);
Serial.print("Temp: "); Serial.print(temp); Serial.print(" C ");
Serial.print("Feuchte: "); Serial.print(feuchte); Serial.print(" % ");
Serial.print("gefuehlt: ");Serial.print(gefuehlt);Serial.println(" C");
}
⚠️ DHT22 ist nicht DHT11: Der billigere blaue DHT11 sieht ähnlich aus, misst aber viel gröber (±2 °C, ±5 % Feuchte) und nur ab 0 °C. Der weiße DHT22 ist die deutlich bessere Wahl. Achte im Code auf #define DHT_TYP DHT22 – mit der falschen Einstellung bekommst du Unsinn. Mehr zum DHT22 im Detail steht im Artikel ESP32 Wetterstation mit DHT22.
Kandidat 2: BME280 – der präzise Profi mit Luftdruck
Der BME280 spielt in einer anderen Liga. Er misst Temperatur, Luftfeuchte und Luftdruck, hängt am schnellen I2C-Bus und liefert Werte in einer Auflösung und Geschwindigkeit, von der der DHT22 nur träumt. Der Luftdruck ist der Clou: Damit kannst du Wettertendenzen vorhersagen (fällt der Druck, kommt schlechtes Wetter) und sogar die Höhe über dem Meeresspiegel berechnen.
Der Anschluss über I2C bedeutet: nur zwei Datenleitungen (SDA, SCL), die er sich mit anderen I2C-Sensoren teilt. Das macht ihn ideal, wenn ohnehin schon ein OLED oder eine RTC am Bus hängt.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
// Referenzdruck auf Meereshoehe (aktueller QNH deiner Region)
#define QNH_HPA 1013.25
void setup() {
Serial.begin(9600);
// viele Module auf 0x76, manche auf 0x77
if (!bme.begin(0x76)) {
Serial.println("BME280 nicht gefunden – Adresse 0x77 versuchen?");
while (1) delay(100);
}
}
void loop() {
float temp = bme.readTemperature();
float feuchte = bme.readHumidity();
float druck = bme.readPressure() / 100.0F; // Pa -> hPa
float hoehe = bme.readAltitude(QNH_HPA); // Meter
Serial.print("Temp: "); Serial.print(temp); Serial.print(" C ");
Serial.print("Feuchte: "); Serial.print(feuchte); Serial.print(" % ");
Serial.print("Druck: "); Serial.print(druck); Serial.print(" hPa ");
Serial.print("Hoehe: "); Serial.print(hoehe); Serial.println(" m");
delay(1000);
}
💡 BME280 oder BMP280? Aufpassen beim Kauf: Der BMP280 (mit P) misst nur Temperatur und Druck – keine Feuchte. Der BME280 (mit E) kann alle drei Größen. Für eine Wetterstation willst du den BME280. Sie sind auf den ersten Blick fast identisch, der Unterschied kostet dich sonst die Feuchtemessung. Vertiefung zum Luftdruck-Teil im Artikel BMP280 Luftdruck-Sensor.
Kandidat 3: DS18B20 – die wasserdichte Sonde
Der DS18B20 kann nur eines – Temperatur – aber das unter Bedingungen, bei denen die anderen beiden längst kapituliert haben. Als wasserdichte Edelstahlsonde misst er im Aquarium, im Pool, im Boden oder am Heizungsrohr. Sein Bereich reicht bis 125 °C, und dank OneWire-Bus kannst du Dutzende Sensoren an einem einzigen Pin betreiben – jeder hat eine eindeutige 64-Bit-Adresse.
Der Anschluss braucht einen 4,7-kΩ-Pull-Up zwischen Datenleitung und VCC. Dann liefert er saubere digitale Werte, ohne Kalibrierung, ohne Störungen über lange Kabel.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONEWIRE_PIN 2 // 4,7k Pull-Up nach VCC nicht vergessen!
OneWire oneWire(ONEWIRE_PIN);
DallasTemperature sensoren(&oneWire);
void setup() {
Serial.begin(9600);
sensoren.begin();
sensoren.setResolution(12); // 12 Bit = 0,0625 C Aufloesung
Serial.print("Gefundene Sensoren: ");
Serial.println(sensoren.getDeviceCount());
}
void loop() {
sensoren.requestTemperatures();
int anzahl = sensoren.getDeviceCount();
for (int i = 0; i < anzahl; i++) {
float t = sensoren.getTempCByIndex(i);
if (t == DEVICE_DISCONNECTED_C) {
Serial.print("Sensor "); Serial.print(i);
Serial.println(": kein Kontakt");
} else {
Serial.print("Sensor "); Serial.print(i);
Serial.print(": "); Serial.print(t); Serial.println(" C");
}
}
delay(1000);
}
ℹ️ Mehrere Sensoren an einem Kabel: Das ist die Superkraft des DS18B20. Für eine Heizungssteuerung mit Vorlauf, Rücklauf und Raumtemperatur hängst du drei Sonden an denselben Pin – der Code oben liest sie automatisch alle. Wie du die einzelnen Sensoren über ihre Adresse gezielt ansprichst, steht im Artikel DS18B20 mit Arduino auslesen.
4Alle drei gleichzeitig: der direkte Vergleichs-Sketch
Der ehrlichste Test ist, alle drei Sensoren nebeneinander laufen zu lassen und die Werte zu vergleichen. Der folgende Sketch liest DHT22, BME280 und DS18B20 gleichzeitig und gibt sie tabellarisch aus – perfekt, um Abweichungen und Reaktionszeiten selbst zu beurteilen.
#include <Wire.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHT_PIN 4
#define ONEWIRE_PIN 2
DHT dht(DHT_PIN, DHT22);
Adafruit_BME280 bme;
OneWire oneWire(ONEWIRE_PIN);
DallasTemperature ds(&oneWire);
bool bmeDa = false;
void setup() {
Serial.begin(9600);
dht.begin();
ds.begin();
bmeDa = bme.begin(0x76);
Serial.println("\n--- Vergleich: 3 Sensoren ---");
Serial.println("DHT22\tBME280\tDS18B20 (Temp in C)");
}
void loop() {
// DHT22 gibt Tempo vor: min. 2 s
delay(2000);
float tDHT = dht.readTemperature();
float tBME = NAN;
if (bmeDa) tBME = bme.readTemperature();
ds.requestTemperatures();
float tDS = ds.getTempCByIndex(0);
Serial.print(isnan(tDHT) ? -99 : tDHT, 2); Serial.print("\t");
Serial.print(isnan(tBME) ? -99 : tBME, 2); Serial.print("\t");
Serial.print(tDS, 2);
Serial.println();
}
Lässt du diesen Sketch laufen und atmest kurz alle drei Sensoren an, siehst du sofort den Charakterunterschied: Der DS18B20 reagiert wegen der Metallhülle etwas träger, der BME280 springt am schnellsten, der DHT22 liegt dazwischen. Die absoluten Werte sollten bei Raumtemperatur innerhalb von etwa 1 °C beieinanderliegen – tun sie das nicht, ist meist ein Pull-Up oder eine schlechte Verbindung schuld.
Welchen Sensor für welches Projekt?
🌡️ DHT22 nehmen, wenn...
- du Raumtemperatur und Luftfeuchte willst
- es günstig sein soll
- ein einziger Datenpin reicht
- langsame Messungen (alle 2 s) okay sind
Perfekt für: Zimmer-Wetterstation, Gewächshaus, Raumklima-Logger
🌤️ BME280 nehmen, wenn...
- du Luftdruck brauchst (Wettertendenz, Höhe)
- maximale Präzision und Geschwindigkeit zählen
- schon ein I2C-Bus vorhanden ist
- der Sensor klein und stromsparend sein soll
Perfekt für: echte Wetterstation, Drohne/Höhenmesser, Smart-Home-Sensor
💧 DS18B20 nehmen, wenn...
- es nass, heiß oder schmutzig wird
- du das Kabel weit weg vom Board brauchst
- mehrere Messpunkte an einem Pin hängen sollen
- Feuchte und Druck egal sind
Perfekt für: Aquarium, Pool, Heizung, Sous-vide, Bodentemperatur
Häufige Fehler bei allen dreien
⚠️ Pull-Up-Widerstand vergessen: DHT22 (10 kΩ) und DS18B20 (4,7 kΩ) brauchen zwingend einen Pull-Up zwischen Daten und VCC. Ohne ihn liefern sie gar keine oder völlig falsche Werte. Der BME280 als I2C-Gerät hat die Pull-Ups meist auf dem Modul.
⚠️ Falsche I2C-Adresse beim BME280: Mal 0x76, mal 0x77 – je nach Modul. Findest du ihn nicht, probiere die andere Adresse oder lass einen I2C-Scanner laufen.
⚠️ Sensor zu nah an Wärmequellen: Setzt du den Sensor direkt neben den Spannungsregler des ESP32 oder in ein geschlossenes Gehäuse ohne Belüftung, misst du die Eigenwärme der Elektronik mit – oft 2–3 °C zu viel. Sensor immer nach außen oder gut belüftet platzieren.
⚠️ 3,3V vs. 5V: Am ESP32 (3,3V-Logik) laufen alle drei Sensoren mit 3,3V. Hängst du ein 5V-Modul an einen 3,3V-Pin, kann es zu Fehlmessungen kommen – im Zweifel das Datenblatt des Moduls prüfen.
🚀 Die drei Sensoren bei MAKEROO
Am besten legst du dir alle drei zu – dann hast du für jedes Projekt den richtigen:
Fazit
Es gibt keinen "besten" Temperatursensor – es gibt nur den richtigen für deinen Anwendungsfall. Der DHT22 ist der günstige Einstieg für Raumklima mit Feuchte. Der BME280 ist die Wahl, sobald es präzise werden soll oder du Luftdruck brauchst – die klare Empfehlung für jede ernsthafte Wetterstation. Und der DS18B20 ist konkurrenzlos, sobald es nass, heiß oder räumlich verteilt wird.
Die gute Nachricht: Alle drei sind günstig, gut dokumentiert und in wenigen Zeilen Code ausgelesen. Wer viel bastelt, hat am Ende ohnehin alle drei in der Schublade – und greift je nach Projekt zum passenden. Fang mit dem einen an, der zu deinem aktuellen Vorhaben passt, und bau dir nach und nach dein Sensor-Arsenal auf.