Temperatursensoren für Arduino: 8 Sensoren im großen Vergleich
Temperatursensoren für Arduino im Vergleich: DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675 und MLX90614 nach Genauigkeit, Messbereich, Kabel und Preis.
Bei den vielen Temperatursensoren für Arduino die richtige Wahl zu treffen, ist wichtiger, als es zunächst scheint: Ein DHT11 und ein DS18B20 im selben Raum können 2 °C auseinanderliegen, und wer einen 300 °C heißen Ofen mit dem falschen Sensor messen will, kann ihn schlicht schmelzen. In der Hobbyelektronik dominieren acht Temperatursensoren: DHT11, DHT22, DS18B20, LM35, der NTC-Thermistor, BME280, MAX6675 (Thermoelement Typ K) und MLX90614 (berührungslos, Infrarot). Jeder hat einen anderen Messbereich, eine andere Genauigkeit, Anschlussart und Preisklasse. Welcher der richtige ist, hängt davon ab, was du messen willst: Raumluft, Wasser, einen Ofen oder einen drehenden Motor, den du nicht berühren kannst?
In diesem Ratgeber stellen wir die acht Sensoren in zwei großen Tabellen nebeneinander: Messbereich, Genauigkeit, Auflösung, Messrate, Schnittstelle, Versorgungsspannung, Kabellänge und relativer Preis. Danach erfährst du, wie jeder funktioniert, wo seine Stärken und Schwächen liegen und wie du ihn an Arduino Uno, ESP32 und Raspberry Pi Pico anschließt. Dazu bekommst du Beispielcode für NTC, MAX6675 und MLX90614, einen Testaufbau, der drei Sensoren gegeneinander antreten lässt, und eine Übersicht, welcher Sensor zu welchem Projekt passt. Zu den meisten Sensoren gibt es auch ausführliche Anleitungen; die Links findest du in den passenden Abschnitten.





Worauf solltest du bei der Wahl eines Temperatursensors achten?
Bevor du Sensoren vergleichst, musst du die Begriffe im Datenblatt richtig lesen. Am häufigsten verwechselt werden Genauigkeit und Auflösung. Die Genauigkeit sagt, wie nah dein Messwert an der echten Temperatur liegt; die Auflösung ist der kleinste Schritt, den der Sensor unterscheiden kann. Der BME280 liefert die Temperatur in Schritten von 0,01 °C, seine Genauigkeit liegt aber bei etwa ±1 °C. Die letzten beiden Stellen der 23,47 °C auf deinem Display helfen also, kleine Änderungen zu verfolgen, verraten dir die echte Temperatur aber nicht so genau. Achte bei der Auswahl auf diese sieben Kriterien:
- Messbereich: Der Sensor sollte die niedrigste und höchste Temperatur, die du messen willst, bequem abdecken. Der DHT11 sieht nichts unter null; für den Kühlschrank brauchst du einen DS18B20, für den Ofen ein Thermoelement.
- Genauigkeit: Für ein Raumthermometer sind ±2 °C in Ordnung, ein Aquarium oder ein Brutapparat braucht dagegen ±0,5 °C.
- Schnittstelle: Analoge Sensoren brauchen einen ADC-Pin, digitale einen oder mehrere digitale Pins und meist eine Bibliothek. Wie viele Pins auf deinem Board frei sind, bestimmt, wie viele Sensoren du anschließen kannst.
- Kabellänge: Sitzt der Sensor 5 Meter vom Board entfernt, im Garten oder am Boden eines Wassertanks, kommen analoge und I2C-Sensoren an ihre Grenzen; 1-Wire und das Eindrahtprotokoll der DHTs vertragen lange Leitungen deutlich besser.
- Ansprechzeit: Ein Fühler in einer Edelstahlhülse oder ein DHT im Kunststoffgehäuse erfasst einen plötzlichen Temperaturwechsel erst nach Sekunden oder sogar Minuten; ein kleiner, blanker NTC ist viel schneller.
- Zusätzliche Messwerte: Brauchst du auch die Luftfeuchtigkeit, reicht ein DHT22 oder BME280; brauchst du außerdem Luftdruck und Höhe, erledigt der BME280 alles in einem Modul.
- Versorgungsspannung: Beim ESP32 und Pico mit 3,3 V musst du auf Sensoren wie den LM35 achten, die mindestens 4 V brauchen, und darauf, dass am ADC-Eingang nie mehr als 3,3 V ankommen.
Vergleichstabelle: 8 Temperatursensoren
Die erste Tabelle fasst die Messleistung zusammen, die zweite Anschluss und Kosten. Die Werte stammen aus den Datenblättern; wenn nicht anders angegeben, gilt die Genauigkeit um Raumtemperatur und wird zu den Bereichsgrenzen hin schlechter.
| Sensor | Messbereich | Genauigkeit | Auflösung | Messrate |
|---|---|---|---|---|
| DHT11 | 0 … +50 °C | ±2 °C | 1 °C | 1-mal pro Sekunde |
| DHT22 (AM2302) | −40 … +80 °C | ±0,5 °C | 0,1 °C | 1-mal alle 2 Sekunden |
| DS18B20 | −55 … +125 °C | ±0,5 °C (von −10 bis +85 °C) | 0,0625 °C (12 Bit) | 750 ms (12 Bit), 94 ms (9 Bit) |
| LM35DZ | 0 … +100 °C (LM35: −55 … +150 °C) | Typisch ±0,6 °C, garantiert ±1,5 °C | Am Uno 0,49 °C (5-V-Ref.), 0,11 °C (1,1-V-Ref.) | Sofort (ADC-Tempo) |
| NTC 10 kΩ, B 3950 | −40 … +125 °C (glasgekapselte ≈ 300 °C) | Bei 25 °C: ±0,25 °C (1 %) … ±1 °C (5 %) | Am Uno bei Raumtemperatur ≈ 0,1 °C | Sofort (ADC-Tempo) |
| BME280 | −40 … +85 °C | ±0,5 °C (25 °C), ±1 °C (0 … 65 °C) | 0,01 °C | Dutzende pro Sekunde |
| MAX6675 + Thermoelement Typ K | 0 … +1023,75 °C | Einige °C (Wandler ≈ ±2 °C, Vergleichsstelle bis ±3 °C) | 0,25 °C | ≈ 4 pro Sekunde (0,22 s Wandlung) |
| MLX90614 | Objekt −70 … +380 °C, Umgebung −40 … +125 °C | ±0,5 °C (um Raumtemperatur) | 0,02 °C | Mehrmals pro Sekunde |
| Sensor | Schnittstelle | Versorgung | Kabellänge | Zusätzlicher Messwert | Relativer Preis |
|---|---|---|---|---|---|
| DHT11 | Eindraht digital, 1 Pin | 3–5,5 V | Bis 20 m | Luftfeuchtigkeit | Sehr niedrig |
| DHT22 | Eindraht digital, 1 Pin | 3,3–6 V | Bis 20 m | Luftfeuchtigkeit | Mittel |
| DS18B20 | 1-Wire, viele Sensoren an 1 Pin | 3,0–5,5 V | Dutzende Meter | Keiner | Niedrig |
| LM35 | Analog, 1 ADC-Pin | 4–30 V | Kurz, ≈ 1 m (länger nur mit Maßnahmen) | Keiner | Niedrig |
| NTC | Analog, 1 ADC-Pin über Spannungsteiler | 3,3 oder 5 V über den Teiler | Einige Meter | Keiner | Am niedrigsten |
| BME280 | I2C (2 Pins) oder SPI | Chip 1,71–3,6 V; Modul mit Regler 5 V | Kurz, unter 50 cm | Luftfeuchtigkeit und Luftdruck | Mittel |
| MAX6675 | SPI, 3 Pins (nur lesen) | 3,0–5,5 V | Thermoelementdraht kann meterlang sein | Keiner | Mittel |
| MLX90614 | I2C (SMBus), 2 Pins | 3-V- oder 5-V-Version (Modul ggf. mit Regler) | Kurz (I2C); misst berührungslos | Umgebungstemperatur | Hoch |
DHT11 und DHT22: Temperatur und Luftfeuchtigkeit zusammen
Im Kunststoffgitter eines DHT-Sensors stecken ein Feuchteelement (resistiv beim DHT11, kapazitiv beim DHT22), ein Thermistor und ein kleiner Controller, der die Messwerte digitalisiert. Der Sensor schickt sein Ergebnis über eine einzige Datenleitung als 40-Bit-Paket: 16 Bit Feuchte, 16 Bit Temperatur und 8 Bit Prüfsumme. Das ist kein 1-Wire, sondern ein eigenes Eindrahtprotokoll des Herstellers; deshalb braucht jeder DHT einen eigenen Pin. Der DHT11 ist billig und reicht für die Raumtemperatur, doch sein Bereich von 0–50 °C und der Fehler von ±2 °C machen ihn für draußen und genaue Aufgaben schwach. Mit derselben Verdrahtung misst der DHT22 (AM2302) von −40 bis +80 °C mit ±0,5 °C Genauigkeit und liefert die Luftfeuchtigkeit von 0–100 %; dafür schafft er nur eine Messung alle zwei Sekunden. Beide teilen eine Schwäche, die Trägheit: Sie zeigen Änderungen spät an, weil die Luft im Gitter erst ins Gleichgewicht mit der Umgebung kommen muss. Anschluss, Bibliothek und Code findest du im Artikel DHT11 Temperatur- und Feuchtigkeitssensor; derselbe Code läuft mit dem DHT22, wenn du ein einziges Wort änderst.
DS18B20: wasserdicht, robust und viele Sensoren an einem Pin

Der DS18B20 misst die Temperatur im Chip und sendet sie als digitale Zahl mit wählbarer Auflösung von 9 bis 12 Bit. Er misst von −55 bis +125 °C, ist zwischen −10 und +85 °C auf ±0,5 °C genau, und dank des 1-Wire-Protokolls kannst du Dutzende Sensoren an einen einzigen Datenpin hängen; jeder hat eine ab Werk einprogrammierte, eindeutige 64-Bit-Adresse. Die wasserdichte Fühlerversion in der Edelstahlhülse ist unschlagbar für Aquarium, Wassertank, Heizungsrohre, Erde und Gefrierschrank. Seine einzige Bedingung ist ein 4,7-kΩ-Pull-up-Widerstand zwischen Datenleitung und Versorgung; fehlt er, liefert die Bibliothek −127 °C. Im 12-Bit-Modus dauert eine Messung 750 ms, daher musst du die Auflösung eventuell senken, um schnell wechselnde Temperaturen zu verfolgen. Den Code für mehrere Sensoren und das nicht blockierende Auslesen am ESP32 findest du im Artikel DS18B20-Temperatursensor.
LM35: der einfachste Analogsensor, ganz ohne Bibliothek
Der LM35 wandelt die Temperatur direkt in eine Spannung um: Sein Ausgang steigt pro Grad um 10 mV und liefert bei 25 °C 250 mV. Eine Bibliothek brauchst du nicht; das Ergebnis erhältst du mit der Formel Temperatur = analogRead × 5,0 / 1024 × 100. Diese Einfachheit macht ihn zum perfekten Einstieg, um den ADC kennenzulernen. Seine Schwächen haben denselben Ursprung: Mit 5-V-Referenz liefert der 10-Bit-ADC des Arduino Uno nur Schritte von etwa 0,49 °C, jede Abweichung der 5 V vom USB geht direkt in die Temperatur ein, und je länger das Kabel, desto mehr Störungen fängt der Ausgang ein. Die meisten LM35 im Handel sind LM35DZ und nur für 0–100 °C garantiert. Außerdem braucht er mindestens 4 V und muss am ESP32 und Pico deshalb am 5-V-Pin hängen. An 3,3-V-Boards ist der TMP36 die praktischere analoge Alternative: Er arbeitet mit 2,7–5,5 V, misst −40 bis +125 °C und liefert ebenfalls 10 mV/°C, gibt bei 0 °C aber schon 500 mV aus, daher lautet die Formel Temperatur = (V − 0,5) × 100. Seine typische Genauigkeit liegt bei ±1 °C bei 25 °C und ±2 °C über den gesamten Bereich. Wie du die Schrittweite mit der internen 1,1-V-Referenz auf 0,11 °C senkst, erklären wir Schritt für Schritt im Artikel LM35-Temperatursensor; wie der ADC funktioniert, erfährst du unter Analog-Digital-Wandlung.
NTC-Thermistor: der günstigste und schnellste Sensor
Ein NTC-Thermistor (Negative Temperature Coefficient, Heißleiter) ist ein Widerstand, dessen Widerstandswert mit steigender Temperatur sinkt. Am häufigsten ist in Bastelprojekten der Typ mit 10 kΩ bei 25 °C und einem B-Wert von 3950 K. Da der Arduino Widerstände nicht direkt messen kann, wird der NTC zusammen mit einem Festwiderstand als Spannungsteiler geschaltet, und die Spannung am Mittelpunkt wird über einen Analogpin gelesen. Diese Schaltung hat einen schönen Vorteil: Wird der Teiler aus derselben 5-V-Spannung versorgt, die auch die ADC-Referenz bildet, ist die Messung ratiometrisch; das Ergebnis ändert sich nicht, selbst wenn die Versorgung 4,8 oder 5,1 V beträgt. Die Spannungen im Teiler berechnest du bequem mit dem Spannungsteiler-Rechner.
Der Widerstand eines NTC ändert sich mit der Temperatur nicht linear, sondern exponentiell; deshalb reicht kein einfacher Faktor wie beim LM35. In der Praxis nutzt man die Beta-Gleichung: 1/T = 1/T0 + (1/B) × ln(R/R0). Dabei ist T die Temperatur in Kelvin, T0 = 298,15 K (25 °C), R0 = 10 kΩ und B = 3950. Bei Raumtemperatur ist die Empfindlichkeit sehr hoch: Nach der Formel B/T² ändert sich der Widerstand um etwa 4,4 % pro Grad. Deshalb liegt ein NTC mit 1 % Toleranz bei 25 °C nur etwa ±0,25 °C daneben; zu den Bereichsgrenzen hin kommt aber die Toleranz des B-Werts hinzu, und der Fehler wächst. Für mehr Genauigkeit über einen großen Bereich nutzt man die Steinhart-Hart-Gleichung mit drei Stützpunkten; Details im Artikel NTC-Thermistor.
1const int NTC_PIN = A1; // bölücünün orta noktası / divider midpoint
2const float R_FIXED = 10000.0; // 5V ile A1 arasındaki direnç / resistor between 5V and A1
3const float R0 = 10000.0; // NTC'nin 25 °C'deki direnci / NTC resistance at 25 °C
4const float BETA = 3950.0; // B katsayısı (veri sayfası) / B coefficient (datasheet)
5const float T0 = 298.15; // 25 °C Kelvin cinsinden / 25 °C in kelvin
6const int SAMPLES = 16; // ortalama için ölçüm sayısı / samples to average
7
8void setup() {
9 Serial.begin(9600);
10}
11
12void loop() {
13 long sum = 0;
14 for (int i = 0; i < SAMPLES; i++) {
15 sum += analogRead(NTC_PIN);
16 delay(2);
17 }
18 float adc = sum / (float)SAMPLES;
19
20 if (adc < 1.0 || adc > 1022.0) { // kopuk ya da kısa devre / open or shorted
21 Serial.println(F("NTC baglantisini kontrol et / Check the NTC wiring"));
22 delay(1000);
23 return;
24 }
25
26 float r = R_FIXED * adc / (1023.0 - adc); // NTC direnci (ohm) / NTC resistance (ohm)
27 float invT = 1.0 / T0 + log(r / R0) / BETA; // Beta denklemi / Beta equation
28 float tempC = 1.0 / invT - 273.15; // Kelvin -> °C
29
30 Serial.print(F("R: "));
31 Serial.print(r, 0);
32 Serial.print(F(" ohm Sicaklik / Temp: "));
33 Serial.print(tempC, 1);
34 Serial.println(F(" C"));
35 delay(1000);
36}In dieser Schaltung liegt der 10-kΩ-Festwiderstand zwischen 5V und A1, der NTC zwischen A1 und GND. Steigt die Temperatur, sinken der Widerstand des NTC und damit die Spannung an A1. Der Code berechnet aus dem Rohwert zuerst den Widerstand des NTC, dann mit der Beta-Gleichung die Temperatur in Kelvin und rechnet sie in Celsius um; der Mittelwert aus 16 Messungen senkt das ADC-Rauschen auf ein Viertel. Bei Raumtemperatur entspricht ein ADC-Schritt am Uno etwa 0,09 °C, die Auflösung ist also fünfmal besser als beim LM35 mit 5-V-Referenz. Bei fertigen NTC-Modulen (zum Beispiel KY-013) ist je nach Platine unterschiedlich, auf welcher Seite der Festwiderstand sitzt; sinkt der Messwert, wenn du den NTC mit etwas Warmem berührst, dreh die Widerstandsformel um: r = R_FIXED × (1023 − adc) / adc.
BME280: Temperatur, Luftfeuchtigkeit und Luftdruck in einem Modul
Der BME280 von Bosch misst Temperatur, relative Luftfeuchtigkeit und Luftdruck auf einem nur 2,5 × 2,5 mm großen Chip und kommuniziert über I2C (Adresse 0x76 oder 0x77) oder SPI. Bei der Temperatur bietet er 0,01 °C Auflösung sowie ±0,5 °C Genauigkeit bei 25 °C und ±1 °C zwischen 0 und 65 °C; er schafft Dutzende Messungen pro Sekunde und braucht im Schlafmodus weit unter 1 µA. Damit ist er ideal für batteriebetriebene Wetterstationen. Der Chip selbst verträgt nicht mehr als 3,6 V: Die lila Module mit 6 Pins sind meist nur für 3,3 V gedacht, Module mit 4 Pins und Spannungsregler dürfen an 5 V. Misst er dauerhaft, erwärmt sich der Chip leicht und zeigt einige Zehntelgrad zu viel an; für Wettermessungen genügt der Forced Mode mit ein paar Messungen pro Minute. Wie der I2C-Bus funktioniert, erklären wir in Was ist I2C?.
MAX6675 und Thermoelement Typ K: bis 1000 °C
Ein Thermoelement besteht aus zwei Drähten aus unterschiedlichen Metallen, die an einem Ende verschweißt sind. Der Temperaturunterschied zwischen der Schweißstelle (Messstelle) und dem Punkt, an dem die Drähte am Gerät angeschlossen sind (Vergleichsstelle), erzeugt eine winzige Spannung; beim Typ K sind das etwa 41 µV pro Grad. So eine kleine Spannung kann der ADC des Arduino nicht lesen, und außerdem musst du die Temperatur der Vergleichsstelle kennen. Der MAX6675 erledigt beides: Er verstärkt die Thermospannung, führt durch Messung seiner eigenen Temperatur die Vergleichsstellenkompensation durch und liefert das Ergebnis über SPI mit 12 Bit und 0,25 °C Auflösung. Sein Messbereich reicht von 0 bis +1023,75 °C; damit ist er hier die einzige Wahl für Orte, an denen die anderen Sensoren nicht überleben, etwa Lötkolben, Pizzaofen, Grill, Brennofen oder Auspuff.
Kenne auch die Grenzen des MAX6675: Unter 0 °C misst er nicht; der Wandler selbst hat zwischen 0 und 700 °C einen Fehler von etwa ±2 °C, dazu kommen bis zu ±3 °C Fehler der Vergleichsstellenkompensation und die Toleranz des Thermoelementdrahts. Rechne insgesamt also mit einer Genauigkeit von einigen Grad; in einem 800 °C heißen Ofen spielt das keine Rolle. Eine Wandlung dauert 0,17–0,22 Sekunden, warte zwischen zwei Messungen also mindestens 250 ms. Brauchst du auch Minustemperaturen, ist der neuere MAX31855 (−200 bis +1350 °C, 14 Bit) die bessere Wahl. Wie der SPI-Bus funktioniert, liest du in Was ist SPI?. Installiere in der Arduino IDE über den Bibliotheksverwalter die MAX6675 library von Adafruit und lade dann diesen Code hoch:
1#include "max6675.h"
2
3const int thermoDO = 4; // SO: veri çıkışı / data out
4const int thermoCS = 5; // CS: çip seçimi / chip select
5const int thermoCLK = 6; // SCK: saat / clock
6
7MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
8
9void setup() {
10 Serial.begin(9600);
11 delay(500); // ilk ölçümü bekle / wait for the first conversion
12}
13
14void loop() {
15 float c = thermocouple.readCelsius();
16 if (isnan(c)) { // D2 biti: termokupl açık / bit D2: thermocouple open
17 Serial.println(F("Termokupl takili degil / Thermocouple not connected"));
18 } else {
19 Serial.print(F("Sicaklik / Temp: "));
20 Serial.print(c, 2);
21 Serial.println(F(" C"));
22 }
23 delay(500); // en az 250 ms bekle / wait at least 250 ms
24}MLX90614: Temperatur berührungslos messen
Der MLX90614 ist ein berührungsloser Temperatursensor, der die von Objekten abgegebene Infrarotstrahlung mit einer Thermosäule erfasst. Er liefert gleichzeitig zwei Werte: die Umgebungstemperatur, also die Temperatur seines eigenen Gehäuses (−40 bis +125 °C), und die Objekttemperatur der Oberfläche, auf die er gerichtet ist (−70 bis +380 °C). Um Raumtemperatur bietet er ±0,5 °C Genauigkeit und 0,02 °C Auflösung; er ist ab Werk kalibriert, kommuniziert über I2C (SMBus) unter der Adresse 0x5A, und der Bustakt darf höchstens 100 kHz betragen. Ideal ist er, um einen drehenden Motor, ein Lager, einen heißen Chip auf der Platine oder eine Pfanne auf dem Herd zu messen, ohne sie zu berühren.
Beim berührungslosen Messen gibt es zwei Kniffe. Der erste ist das Sichtfeld: Der Sensor misst den Mittelwert von allem, was in seinem Sichtkegel liegt. Die häufigste Version, der MLX90614ESF-BAA, hat ein Sichtfeld von 90°; in 5 cm Abstand mittelt er also über eine Fläche von etwa 10 cm Durchmesser. Für kleine Objekte bringst du den Sensor näher heran oder wählst eine Version mit engem Winkel wie 35° (BCC) oder 5° (BCI). Der zweite ist der Emissionsgrad: Ab Werk ist der Sensor auf 1,0 eingestellt. Für matten Lack, Kunststoff, Holz, Haut und Wasser liegt dieser Wert zwischen 0,9 und 0,98, das Ergebnis stimmt also nahezu; glänzende Metalloberflächen strahlen dagegen sehr wenig ab und wirken viel kälter, als sie sind. Ein Stück mattschwarzes Klebeband darauf ist eine einfache und wirksame Lösung. Installiere über den Bibliotheksverwalter die Bibliothek Adafruit MLX90614 und probiere diesen Code aus:
1#include <Wire.h>
2#include <Adafruit_MLX90614.h>
3
4Adafruit_MLX90614 mlx = Adafruit_MLX90614();
5
6void setup() {
7 Serial.begin(9600);
8 if (!mlx.begin()) { // varsayılan adres 0x5A / default address 0x5A
9 Serial.println(F("MLX90614 bulunamadi / not found"));
10 while (true) delay(10);
11 }
12 Serial.print(F("Emisivite / Emissivity: "));
13 Serial.println(mlx.readEmissivity(), 2); // fabrika ayarı 1.00 / factory default 1.00
14}
15
16void loop() {
17 Serial.print(F("Ortam / Ambient: "));
18 Serial.print(mlx.readAmbientTempC(), 2); // sensör gövdesi / sensor body
19 Serial.print(F(" C Nesne / Object: "));
20 Serial.print(mlx.readObjectTempC(), 2); // baktığı yüzey / surface in view
21 Serial.println(F(" C"));
22 delay(500);
23}Anschlussübersicht: Arduino Uno, ESP32 und Raspberry Pi Pico
| Sensor und Pin | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| DHT11 / DHT22: DATA | D2 | GPIO 27 | GP15 |
| DS18B20: DQ (+ 4,7-kΩ-Pull-up) | D3 | GPIO 4 | GP22 |
| LM35: Vout (Versorgung 5 V) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| NTC: Mittelpunkt des Teilers | A1 (Teiler an 5V) | GPIO 35 (ADC1, Teiler an 3V3) | GP27 (ADC1, Teiler an 3V3) |
| BME280: SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| MLX90614: SDA / SCL | A4 / A5 (gleicher I2C-Bus) | GPIO 21 / 22 | GP4 / GP5 |
| MAX6675: SO / CS / SCK | D4 / D5 / D6 | GPIO 19 / 23 / 18 | GP16 / GP17 / GP18 |
| Versorgung (VCC) | 5V (3.3V beim BME280 mit 6 Pins) | 3V3 (5V/VIN beim LM35) | 3V3(OUT) (VBUS beim LM35) |
ESP32 und Pico arbeiten mit 3,3 V; versorgst du den NTC-Teiler aus 3V3, kann keine unzulässige Spannung an den ADC-Eingang gelangen. Schließe analoge Sensoren am ESP32 nur an ADC1-Pins (GPIO 32–39) an, denn die ADC2-Pins funktionieren bei eingeschaltetem WLAN nicht; für bidirektionale Datenleitungen wie beim DHT und DS18B20 meidest du dagegen GPIO 34–39, weil diese Pins nur Eingänge sind. BME280 (0x76) und MLX90614 (0x5A) haben unterschiedliche Adressen und können sich problemlos dieselben zwei I2C-Leitungen teilen. Alle Pins deines Boards findest du im Pinout-Tool, die Farbcodes der Pull-up-Widerstände im Widerstands-Farbcode-Rechner.
Vergleichstest mit dem ESP32: drei Sensoren am selben Ort
Die Unterschiede zwischen Sensoren siehst du am besten mit eigenen Augen. Der folgende ESP32-Code liest gleichzeitig einen DS18B20, einen DHT22 und einen BME280 aus und zeigt die Ergebnisse im seriellen Plotter der Arduino IDE als drei getrennte Linien. Setze die Sensoren nebeneinander aufs Breadboard, mindestens 10 cm vom ESP32 entfernt; der ESP32 erwärmt sich im Betrieb und beeinflusst jeden Sensor in seiner Nähe. Der Code benötigt die Bibliotheken OneWire, DallasTemperature, DHT sensor library und Adafruit BME280.
1#include <OneWire.h>
2#include <DallasTemperature.h>
3#include <DHT.h>
4#include <Wire.h>
5#include <Adafruit_Sensor.h>
6#include <Adafruit_BME280.h>
7
8const int ONE_WIRE_PIN = 4; // DS18B20 DQ (4,7 kΩ pull-up -> 3V3)
9const int DHT_PIN = 27; // DHT22 DATA
10
11OneWire oneWire(ONE_WIRE_PIN);
12DallasTemperature ds(&oneWire);
13DHT dht(DHT_PIN, DHT22);
14Adafruit_BME280 bme; // I2C: SDA GPIO 21, SCL GPIO 22
15bool bmeOk = false;
16
17void setup() {
18 Serial.begin(115200);
19 ds.begin();
20 dht.begin();
21 bmeOk = bme.begin(0x76) || bme.begin(0x77); // iki adresi de dene / try both addresses
22 if (!bmeOk) Serial.println("BME280 bulunamadi / not found");
23}
24
25void loop() {
26 ds.requestTemperatures(); // 12 bitte ~750 ms sürer / takes ~750 ms at 12-bit
27 float tDs = ds.getTempCByIndex(0); // sensör yoksa -127 / -127 if missing
28 float tDht = dht.readTemperature(); // hata olursa NAN / NAN on error
29 float tBme = bmeOk ? bme.readTemperature() : NAN;
30
31 // Seri Çizici için etiket:değer biçimi / label:value format for the Serial Plotter
32 Serial.printf("DS18B20:%.2f,DHT22:%.1f,BME280:%.2f\n", tDs, tDht, tBme);
33 delay(2000); // DHT22 en fazla 2 sn'de bir / DHT22 at most every 2 s
34}Warte zuerst ein paar Minuten und sieh dir an, wie weit die Linien auseinanderliegen: Abweichungen von 0,5–1 °C liegen innerhalb der Genauigkeitsgrenzen dieser Sensoren. Stell dann ein Glas warmes Wasser daneben oder puste sanft auf alle drei. DS18B20 und BME280 reagieren innerhalb weniger Sekunden, die Linie des DHT22 hinkt wegen seines Kunststoffgitters deutlich hinterher. Liegt der BME280 dauerhaft einige Zehntelgrad über den anderen, ist das die Eigenerwärmung des Chips. Dieses kleine Experiment zeigt dir Unterschiede, die in keinem Datenblatt stehen. Um Messwerte über längere Zeit aufzuzeichnen, kannst du ein SD-Kartenmodul verwenden oder die Daten an Google Sheets schicken.
Temperatur messen mit dem Raspberry Pi Pico und MicroPython
Die MicroPython-Firmware des Pico bringt die Module dht, onewire und ds18x20 bereits mit; für DHT und DS18B20 musst du also keine zusätzlichen Dateien auf den Pico kopieren. Außerdem hat der RP2040-Chip einen internen Temperatursensor am Kanal 4 des ADC. Der folgende Code liest alle drei zusammen aus:
1from machine import Pin, ADC
2import dht, onewire, ds18x20, time
3
4dht22 = dht.DHT22(Pin(15)) # DHT22 DATA -> GP15
5ds = ds18x20.DS18X20(onewire.OneWire(Pin(22))) # DS18B20 DQ -> GP22 (4,7 kΩ pull-up)
6roms = ds.scan() # hattaki sensörler / sensors on the bus
7cpu = ADC(4) # RP2040 dahili sensörü / internal sensor
8
9def cpu_temp():
10 v = cpu.read_u16() * 3.3 / 65535 # ham değer -> volt / raw value -> volts
11 return 27 - (v - 0.706) / 0.001721 # RP2040 veri sayfası formülü / datasheet formula
12
13while True:
14 t_ds = None
15 if roms:
16 ds.convert_temp() # ölçümü başlat / start conversion
17 time.sleep_ms(750) # 12 bit dönüşüm süresi / 12-bit conversion time
18 t_ds = round(ds.read_temp(roms[0]), 2)
19 try:
20 dht22.measure()
21 t_dht, nem = dht22.temperature(), dht22.humidity()
22 except OSError: # okuma hatası / read error
23 t_dht = nem = None
24 print("DS18B20:", t_ds, "DHT22:", t_dht, "Nem / RH:", nem,
25 "Pico:", round(cpu_temp(), 1))
26 time.sleep(2)Der interne Sensor misst die Temperatur des Chips, nicht die des Raums, und kleine Abweichungen der ADC-Referenz können das Ergebnis um einige Grad verschieben. Er eignet sich daher nicht zur Umgebungsmessung, wohl aber, um zu prüfen, ob das Board überhitzt. Vergiss den 4,7-kΩ-Pull-up an der Datenleitung des DS18B20 nicht; die internen Pull-ups des Pico sind für 1-Wire zu schwach. Bist du neu beim Pico, fang mit Was ist der Raspberry Pi Pico? an.
Welcher Temperatursensor für welches Projekt?
| Projekt oder Bedarf | Empfohlener Sensor | Warum? |
|---|---|---|
| Erstes Projekt, Raumthermometer | DHT11 | Am günstigsten, liefert auch die Luftfeuchtigkeit; ±2 °C reichen für einen Raum |
| Wetterstation für innen und außen | BME280 oder DHT22 | Misst bis −40 °C und die Luftfeuchtigkeit; der BME280 zusätzlich Luftdruck und Höhe |
| Aquarium, Wassertank, Heizungswasser | Wasserdichter DS18B20-Fühler | Edelstahlhülse, ±0,5 °C, langes Kabel |
| Kühlschrank und Gefriertruhe | DS18B20 | Misst bis −55 °C; der DHT11 sieht nichts unter null |
| Viele Messpunkte (Räume, Gewächshaus, Leitungen) | DS18B20 | Dutzende Sensoren an einem Pin, jeder mit eigener Adresse |
| Brutapparat | DHT22 oder BME280 | ±0,5 °C um 37,5 °C plus Feuchteregelung |
| Ofen, Grill, Lötkolben | MAX6675 + Thermoelement Typ K | Hält bis 1000 °C aus |
| 3D-Drucker-Hotend, Akkupack | NTC-Thermistor | Klein, billig und schnell; 3D-Drucker nutzen glasgekapselte 100-kΩ-NTCs |
| Motor, Lager, Platine, bewegte Teile | MLX90614 | Misst berührungslos |
| ADC und Analogmessung lernen | LM35 oder NTC | Keine Bibliothek nötig, funktioniert mit einer Formel |
Projektideen mit Temperatursensoren
- Smartes Gewächshaus: Miss Lufttemperatur und Luftfeuchtigkeit mit einem DHT22 und die Bodentemperatur mit einem DS18B20-Fühler; steuere Lüfter und Bewässerung mit einem Relaismodul. Das komplette Projekt findest du unter smartes Gewächshaus.
- Aquarienheizung mit Thermostat: Halte das Wasser mit einem wasserdichten DS18B20 zwischen 25 und 26 °C; nutze 0,5 °C Hysterese, damit das Relais nicht bei jeder kleinen Änderung schaltet.
- Batteriebetriebene Wetterstation: Kombiniere einen BME280 mit dem Deep-Sleep-Modus des ESP32 und miss alle zehn Minuten, damit das System monatelang mit Batterien läuft.
- Pizzaofen- oder Grillthermometer: Zeige die Ofentemperatur mit MAX6675 und Typ-K-Fühler in großen Ziffern auf einem OLED-Display an.
- Berührungsloser Motortemperaturalarm: Überwache mit einem MLX90614 die Oberflächentemperatur eines Motors oder eines 3D-Druckerbetts und lass einen Summer ertönen, wenn ein Grenzwert überschritten wird.
- Hausautomation: Schicke die Temperatur jedes Raums mit einem ESP32 per MQTT an Home Assistant und steuere die Heizung danach.
- Gefriertruhenwächter: Löse mit einem DS18B20 einen Alarm aus, wenn das Innere der Gefriertruhe über −12 °C steigt, und zeige den Wert auf einem I2C-LCD-Display an.
Häufige Fehler und ihre Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| DHT: nan oder "Failed to read from DHT sensor!" | Falscher Typ im Code (DHT11/DHT22), kein Pull-up oder zu häufiges Auslesen | Typ korrigieren, 10-kΩ-Pull-up ergänzen, 2 Sekunden zwischen den Messungen warten |
| DS18B20: −127 °C | Sensor nicht gefunden: kein Pull-up, Kabel defekt oder falscher Pin | 4,7 kΩ zwischen DQ und VCC setzen, Verbindungen prüfen |
| DS18B20: immer 85 °C | Vor Ende der Wandlung gelesen oder Versorgung unzureichend | Wandlungszeit abwarten, VDD direkt versorgen |
| LM35: unnormal hoher Wert, Sensor wird heiß | Versorgungsbeinchen vertauscht | Sofort Strom trennen, Pinreihenfolge korrigieren |
| LM35 oder NTC: Wert springt ständig | ADC-Rauschen, langes Kabel, schwankende USB-Versorgung | Mittelwert bilden, 0,1-µF-Kondensator ergänzen, Kabel kürzen |
| NTC: Temperatur sinkt beim Erwärmen | Richtung des Teilers passt nicht zum Code | Widerstandsformel umdrehen |
| BME280: "Could not find a valid BME280 sensor" | Falsche Adresse (0x76/0x77) oder der Chip ist in Wahrheit ein BMP280 | Adresse ändern, Chip-ID lesen (0x60 / 0x58) |
| BME280 oder DHT: 1–3 °C zu hoch | Eigenerwärmung, ESP32 oder Spannungsregler in der Nähe | Sensor vom Board weg, seltener messen, Offset anwenden |
| MAX6675: nan | Thermoelement nicht angeschlossen oder Draht gebrochen | Schraubklemmen und Fühler prüfen |
| MAX6675: Wert sinkt beim Erhitzen | Polarität des Thermoelements vertauscht | Adern + und − tauschen |
| MLX90614: glänzendes Metall wirkt sehr kalt | Niedriger Emissionsgrad | Mattschwarzes Klebeband aufkleben oder Emissionsgrad einstellen |
| MLX90614: kleines Objekt falsch gemessen | Sichtfeld größer als das Objekt | Sensor näher heran oder Version mit engem Winkel nutzen |
Kurz gesagt: DHT22 oder BME280 für Raum und Wetter, DS18B20 für Wasser und Kälte, LM35 oder NTC zum Lernen der Analogmessung und für schnelle Reaktion, MAX6675 für hohe Temperaturen und MLX90614 für Oberflächen, die du nicht berühren kannst, sind die richtigen Startpunkte. Wenn du auch andere Sensortypen kennenlernen möchtest, schau in den Ratgeber zu Arduino-Sensoren. In der BlueGrays-App findest du Projekte wie Temperatur- und Feuchtemessung mit dem DHT11, ein Thermometer mit NTC und LCD, eine Temperaturanzeige mit ESP32, DHT22 und LCD, einen ESP32-Temperaturlogger und eine smarte Bewässerung, jeweils mit Schaltplan und Code Schritt für Schritt.
Häufige Fragen
Welcher Temperatursensor ist für Arduino am genauesten?
Unter den Hobbysensoren sind um Raumtemperatur DS18B20, DHT22, BME280 (bei 25 °C) und MLX90614 mit ±0,5 °C am genauesten. Für kabelgebundene und wasserdichte Messungen sticht der DS18B20 heraus, für Messungen zusammen mit der Luftfeuchtigkeit der DHT22 oder BME280. Egal welchen du wählst: Ein einmaliger Vergleich mit einem zuverlässigen Thermometer und eine Offset-Korrektur im Code verbessern die Genauigkeit deutlich.
DHT11 oder DHT22: Welchen soll ich kaufen?
Willst du nur Raumtemperatur und Luftfeuchtigkeit grob überwachen, reicht der DHT11. Für draußen, Minusgrade oder ±0,5 °C Genauigkeit nimm den DHT22; er misst von −40 bis +80 °C und liefert auch die Luftfeuchtigkeit genauer. Beide laufen mit derselben Bibliothek und demselben Code, du änderst im Sketch nur den Sensortyp.
Wie messe ich die Wassertemperatur mit Arduino?
Am besten eignet sich der wasserdichte DS18B20-Fühler in einer Edelstahlhülse. Du tauchst den Fühler ins Wasser und schließt die Datenader mit einem 4,7-kΩ-Pull-up-Widerstand an einen Digitalpin des Arduino an. Kabel und Verbindungsstellen sind meist nicht dafür gemacht, lange in heißem Wasser zu liegen, also tauche nur die Edelstahlspitze ein.
Kann man mit Arduino hohe Temperaturen wie 500 °C messen?
Ja. Mit einem Thermoelement Typ K und einem MAX6675-Modul misst du von 0 bis etwa 1024 °C. Die Spitze des Thermoelements kommt in den Ofen, das MAX6675-Modul muss dagegen fern der Hitze bleiben. Prüfe unbedingt, bis zu welcher Temperatur Mantel und Kabel deines Fühlers ausgelegt sind.
Kann man mit Arduino ein kontaktloses Thermometer bauen?
Mit einem MLX90614 kannst du ein berührungsloses Infrarotthermometer am Arduino bauen; die Standardversion ist um Raumtemperatur auf ±0,5 °C genau. Für die Körpertemperatur braucht es die Version mit medizinischer Genauigkeit (±0,2 °C) und den richtigen Messabstand, und selbst dann ersetzt dieser Aufbau kein Medizinprodukt. Achte beim Messen darauf, dass die Zielfläche das Sichtfeld des Sensors vollständig ausfüllt.
Warum zeigt mein Temperatursensor zu viel an?
Am häufigsten liegt es an Wärmequellen in der Nähe des Sensors: einem ESP32, einem Spannungsregler oder Sonnenlicht. Sensoren wie der BME280 erwärmen sich außerdem leicht selbst, wenn sie dauerhaft messen. Setze den Sensor 10–15 cm vom Board weg, miss seltener und korrigiere die verbleibende konstante Abweichung im Code nach einem Vergleich mit einem Thermometer, dem du vertraust.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
Temperatur und Luftfeuchtigkeit mit DHT11
Wie warm ist dein Zimmer, und ist die Luft feucht oder trocken? Der DHT11-Sensor misst Temperatur und Luftfeuchtigkeit, und der Arduino schreibt die Werte auf ein zweizeiliges LCD und aktualisiert sie

Temperaturmessung mit NTC und 2x16 Lcd Display
Miss die Umgebungstemperatur mit einem Sensor, der aussieht wie eine kleine Perle. Dieses Bauteil namens NTC lässt Strom umso leichter durch, je wärmer es wird; der Arduino liest diese Änderung, rechn

ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)
Bei diesem Projekt werden die Umgebungstemperatur und die Luftfeuchtigkeit mit einem DHT22-Sensor gemessen und in Echtzeit auf einem 16x2 I2C-LCD angezeigt. Mithilfe der Adafruit-DHT-Bibliothek werden die Daten über das One-Wire-Protokoll vom Sensor ausgelesen. Dieses Projekt bildet die Grundlage für IoT-Wetterstationen, Smart-Home-Automatisierung oder Umgebungsüberwachungssysteme in Gewächshäusern. Die Kommunikation mit dem DHT22 erfolgt über den GPIO-4-Pin des ESP32.

ESP32 Temperatur-Datenlogger (DHT22 + DS1307 RTC + microSD + OLED)
Baue einen zeitgestempelten Temperaturlogger mit ESP32! Lese Temperatur/Feuchtigkeit vom DHT22 jede Minute, hole die aktuelle Zeit vom DS1307 RTC und protokolliere auf microSD-Karte als CSV. Das OLED zeigt live Temperatur (große Schrift), Luftfeuchtigkeit, Zeitstempel und Logzähler. Die /temp_log.csv-Datei auf der SD-Karte öffnet sich in Excel, Google Sheets oder Python pandas zur Analyse — perfekt für Gewächshausüberwachung, Raumtemperaturverfolgung, Laboraufzeichnung, Lebensmittellageru

Punktmatrix-Uhr, Kalender und Wetterstation (MAX7219, DS1307)
Eine Laufschrift-Tafel für Tisch oder Wand, die abwechselnd Uhrzeit, Datum und das Raumklima zeigt. Auf dem 8x32-LED-Display erscheint zuerst die Temperatur in Celsius und Fahrenheit, dann die Luftfeu

Intelligente Bewässerungsstation
Ein Gärtner, der deine Pflanzen von selbst gießt, damit sie im Urlaub nicht vertrocknen. Ein Bodenfeuchtesensor misst, wie nass die Erde ist; wird sie trocken, lässt der Arduino die Wasserpumpe ein pa

Verwendung des LCD-Bildschirms mit I2C
Gib deinem Arduino ein eigenes Display und lass es seine erste Nachricht schreiben. Das zweizeilige LCD wird mit nur wenigen Kabeln angeschlossen; oben erscheint ein Gruß, dann unten eine zweite Zeile
Weitere Artikel
BlueGrays-App
Diese Schaltung Schritt für Schritt auf dem Handy nachbauen
Schaltplan, Code und Teileliste auf einem Bildschirm. Über 200 Arduino-, ESP32- und Pico-Projekte zum Nachbauen.
Mit dem Handy scannen
Richte die Kamera auf den Code, dann öffnet sich der App-Store deines Handys.
oder im Store öffnen

