DS18B20 Temperatursensor am Arduino, ESP32 und Pico nutzen
DS18B20 am Arduino anschließen: 1-Wire, 4,7-kΩ-Pull-up, wasserdichter Fühler, viele Sensoren an einem Pin, OneWire- und DallasTemperature-Code, ESP32 und Pico.
Der DS18B20 ist ein digitaler Temperatursensor und eine der genauesten und flexibelsten Möglichkeiten, mit dem Arduino Temperaturen zu messen. Er misst von −55 °C bis +125 °C, ist zwischen −10 °C und +85 °C auf ±0,5 °C genau und überträgt das Ergebnis nicht als analoge Spannung, sondern direkt als digitale Zahl. Deshalb wird der Messwert auch über lange Kabel nicht verfälscht. Sein größter Trumpf ist die 1-Wire-Kommunikation: Du kannst Dutzende DS18B20 an einen einzigen Datenpin hängen und jeden über seine eigene, eindeutige Adresse einzeln auslesen.
In diesem Artikel erfährst du, wie der DS18B20 funktioniert, wie der 1-Wire-Bus arbeitet, warum er unbedingt einen 4,7-kΩ-Pull-up-Widerstand braucht und was es mit dem wasserdichten Fühler und seinen Aderfarben auf sich hat. Danach gehen wir Schritt für Schritt Code für einen und für mehrere Sensoren mit den Bibliotheken OneWire und DallasTemperature durch, lesen am ESP32 ohne Blockieren aus und nutzen den Sensor mit MicroPython auf dem Raspberry Pi Pico. Am Ende findest du Ursachen und Lösungen für die häufigen Fehlerwerte −127 °C und 85 °C.

Was ist der DS18B20 und wie funktioniert er?
Im DS18B20 stecken ein Temperaturfühler, ein Analog-Digital-Wandler, ein kleiner Speicher (Scratchpad) und eine ab Werk eingebrannte, eindeutige 64-Bit-Seriennummer. Sendet der Mikrocontroller den Messbefehl, misst der Sensor die Temperatur, legt das Ergebnis als Zwei-Byte-Zahl im Speicher ab und wartet darauf, ausgelesen zu werden. Weil der Sensor selbst misst, entstehen keine Fehler durch den Analogeingang des Arduino, seine Referenzspannung oder den Kabelwiderstand. Anders als bei einem NTC-Thermistor brauchst du auch keine Kalibriertabelle oder Formel: Der gelesene Wert ist direkt in Grad Celsius.
| Eigenschaft | Wert |
|---|---|
| Messbereich | −55 °C … +125 °C |
| Genauigkeit | ±0,5 °C (zwischen −10 °C und +85 °C) |
| Auflösung | Wählbar von 9 bis 12 Bit (0,5 °C … 0,0625 °C) |
| Versorgungsspannung | 3,0–5,5 V (passt zu Arduino, ESP32 und Pico) |
| Stromaufnahme | Etwa 1 mA beim Messen, unter 1 µA im Ruhezustand |
| Schnittstelle | 1-Wire (eine Datenleitung + GND) |
| Adresse | 64-Bit-ROM-Code; Familiencode 0x28 |
| Gehäuse | TO-92 (3 Beine) oder wasserdichter Edelstahlfühler |
Die Auflösung des Sensors stellst du per Software ein. Je höher die Auflösung, desto feiner die Schritte, desto länger aber auch die Wandlungszeit. Standard sind 12 Bit, für die meisten Projekte die richtige Wahl; brauchst du sehr schnelle Messungen, kannst du auf 9 oder 10 Bit heruntergehen.
| Auflösung | Schrittweite | Maximale Wandlungszeit |
|---|---|---|
| 9 Bit | 0,5 °C | 93,75 ms |
| 10 Bit | 0,25 °C | 187,5 ms |
| 11 Bit | 0,125 °C | 375 ms |
| 12 Bit (Standard) | 0,0625 °C | 750 ms |
Was ist 1-Wire? Kommunikation über eine einzige Leitung
Wie der Name schon sagt, überträgt 1-Wire die Daten über eine einzige Leitung, die Masse (GND) ist gemeinsam. Am Bus hängen ein Master (der Arduino) und ein oder mehrere Slaves (die DS18B20). Ist der Bus frei, hält ihn ein Pull-up-Widerstand auf HIGH. Wer senden will, zieht die Leitung kurz auf LOW; die Bits stecken in der Länge dieser LOW-Impulse, gemessen in Mikrosekunden. Jede Übertragung beginnt mit einem Reset-Impuls, und die Sensoren antworten mit einem „Ich bin da“-Impuls (Presence Pulse).
Da kein Gerät die Leitung aktiv auf HIGH treibt (Open-Drain-Aufbau), kannst du beliebig viele Sensoren an denselben Bus hängen, ohne dass es Konflikte gibt. Der Master findet zuerst mit einem Suchbefehl alle 64-Bit-Adressen am Bus, wählt dann den gewünschten Sensor über seine Adresse aus und spricht mit ihm. So brauchst du für Temperaturen an fünf verschiedenen Stellen nicht fünf Pins, sondern nur einen.
DS18B20, DHT11, DHT22 und NTC im Vergleich
| Eigenschaft | DS18B20 | DHT11 | DHT22 | NTC-Thermistor |
|---|---|---|---|---|
| Temperaturbereich | −55 … +125 °C | 0 … 50 °C | −40 … +80 °C | Etwa −40 … +125 °C (je nach Typ) |
| Genauigkeit | ±0,5 °C | ±2 °C | ±0,5 °C | Hängt von der Kalibrierung ab |
| Ausgang | Digital (1-Wire) | Digital (Eindrahtleitung) | Digital (Eindrahtleitung) | Analog (veränderlicher Widerstand) |
| Luftfeuchte | Nein | Ja | Ja | Nein |
| Wasserdichte Ausführung | Ja (Edelstahlfühler) | Nein | Nein | Ja (Fühler) |
| Mehrere Sensoren an einem Pin | Ja | Nein | Nein | Nein |
Kurz gesagt: Brauchst du auch die Luftfeuchtigkeit, ist der DHT11 oder DHT22 die richtige Wahl. Willst du die Temperatur von Wasser, Erde, einem Rohr oder einer Gefriertruhe messen, mehrere Messstellen mit einem Pin überwachen oder mit Minusgraden arbeiten, ist der DS18B20 unschlagbar.
DS18B20 Pinbelegung und Aderfarben
| Pin | TO-92 (flache Seite zu dir) | Kabel des wasserdichten Fühlers | Funktion |
|---|---|---|---|
| GND | 1 (links) | Schwarz | Masse |
| DQ | 2 (Mitte) | Gelb (bei manchen Fühlern weiß) | 1-Wire-Datenleitung |
| VDD | 3 (rechts) | Rot | 3,0–5,5 V Versorgung |
DS18B20 anschließen: Arduino Uno, ESP32 und Pico
| DS18B20 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| VDD (rot) | 5V | 3V3 | 3V3(OUT), Pin 36 |
| GND (schwarz) | GND | GND | GND, Pin 38 |
| DQ (gelb) | D2 | GPIO 4 | GP22, Pin 29 |
| 4,7-kΩ-Pull-up | Zwischen DQ und 5V | Zwischen DQ und 3V3 | Zwischen DQ und 3V3 |
Der Pull-up-Widerstand ist in dieser Schaltung unverzichtbar. Geräte am 1-Wire-Bus können die Leitung nur auf LOW ziehen; erst dieser Widerstand bringt sie wieder auf HIGH. Fehlt er, hängt die Leitung in der Luft, der Sensor wird nicht gefunden und die Bibliothek liefert −127 °C. Ein Wert von 4,7 kΩ zieht die Leitung schnell genug hoch und hält den Strom trotzdem klein: Ist die Leitung LOW, fließen nach dem ohmschen Gesetz I = 5 V / 4700 Ω ≈ 1,06 mA. Ein 4,7-kΩ-Widerstand mit vier Ringen ist gelb, violett, rot und gold beringt; zur Sicherheit kannst du das Farbcode-Werkzeug nutzen. Manche DS18B20-Module (Sensor auf einer kleinen Platine mit Widerstand und LED) haben den Widerstand schon eingebaut; dann musst du keinen zusätzlichen einsetzen.
Bibliotheken installieren
- Öffne in der Arduino IDE Werkzeuge > Bibliotheken verwalten.
- Gib DallasTemperature in das Suchfeld ein und installiere die Bibliothek von Miles Burton.
- Wenn nach Abhängigkeiten gefragt wird, wähle Install all; so wird auch die OneWire-Bibliothek von Paul Stoffregen installiert. Kommt keine Abfrage, suche OneWire und installiere sie separat.
- Wenn du magst, öffne Datei > Beispiele > DallasTemperature > Simple, passe die Pinnummer an deine Schaltung an und probiere es aus.
Erster Sketch: einen DS18B20 auslesen
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2 // DS18B20 veri pini (DQ) / data pin (DQ)
5
6OneWire oneWire(ONE_WIRE_BUS); // 1-Wire hattı / 1-Wire bus
7DallasTemperature sensors(&oneWire); // sensör kütüphanesi / sensor library
8
9void setup() {
10 Serial.begin(9600);
11 sensors.begin(); // hattaki sensörleri bul / find sensors on the bus
12 Serial.print(F("Sensor sayisi / Sensor count: "));
13 Serial.println(sensors.getDeviceCount());
14}
15
16void loop() {
17 sensors.requestTemperatures(); // ölçümü başlat, bitmesini bekle / start conversion and wait
18 float tempC = sensors.getTempCByIndex(0); // ilk sensörün sıcaklığı / first sensor's temperature
19
20 if (tempC == DEVICE_DISCONNECTED_C) { // -127: sensör yanıt vermedi / sensor did not respond
21 Serial.println(F("Hata: sensor yok / Error: no sensor"));
22 } else {
23 Serial.print(F("Sicaklik / Temperature: "));
24 Serial.print(tempC, 2);
25 Serial.println(F(" C"));
26 }
27 delay(1000);
28}| Funktion | Was sie tut |
|---|---|
| sensors.begin() | Durchsucht den 1-Wire-Bus und registriert die gefundenen Sensoren |
| sensors.getDeviceCount() | Liefert die Anzahl der Sensoren am Bus |
| sensors.requestTemperatures() | Schickt allen Sensoren am Bus den Messbefehl und wartet standardmäßig, bis er fertig ist |
| sensors.getTempCByIndex(0) | Liefert die Temperatur des ersten Sensors in der Liste in Grad Celsius |
| sensors.getTempFByIndex(0) | Liefert denselben Wert in Fahrenheit |
| sensors.setResolution(12) | Stellt die Auflösung zwischen 9 und 12 Bit ein |
| DEVICE_DISCONNECTED_C | Rückgabewert, wenn der Sensor nicht antwortet: −127 |
Stellst du den seriellen Monitor auf 9600 Baud, siehst du jede Sekunde eine Zeile wie „Sicaklik / Temperature: 23.44 C“. Dir wird auffallen, dass sich die letzten Stellen in Schritten von 0,0625 ändern, der Schrittweite bei 12 Bit. Hältst du den Sensor zwischen den Fingern, sollte die Temperatur innerhalb weniger Sekunden steigen. Zeigt der Monitor −127, wird der Sensor gar nicht gefunden; zeigt er 85, wurde er gefunden, aber ausgelesen, bevor die Messung fertig war. Die Lösung für beides steht in der Tabelle am Ende des Artikels.
Mehrere DS18B20 an einem Pin betreiben
Um mehrere Sensoren anzuschließen, verbindest du einfach alle VDD-, GND- und DQ-Anschlüsse parallel; für den ganzen Bus genügt ein einziger 4,7-kΩ-Pull-up-Widerstand. Das Auslesen mit getTempCByIndex() ist bequem, die Reihenfolge richtet sich aber nach den Adressen der Sensoren, nicht danach, in welcher Reihenfolge du sie angesteckt hast. Tauschst du einen Sensor aus, kann sich die Reihenfolge ändern. Deshalb solltest du in dauerhaften Projekten jeden Sensor über seine eigene Adresse auslesen. Der folgende Sketch findet alle Sensoren am Bus, gibt ihre Adressen aus und liest die Temperatur jedes Sensors über seine Adresse:
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2 // tüm sensörler aynı pinde / all sensors on the same pin
5
6OneWire oneWire(ONE_WIRE_BUS);
7DallasTemperature sensors(&oneWire);
8DeviceAddress addr; // 8 baytlık sensör adresi / 8-byte sensor address
9int count = 0;
10
11void printAddress(const DeviceAddress a) {
12 for (uint8_t i = 0; i < 8; i++) {
13 Serial.print(F("0x"));
14 if (a[i] < 0x10) Serial.print('0'); // tek haneyi sıfırla tamamla / pad single digit
15 Serial.print(a[i], HEX);
16 if (i < 7) Serial.print(F(", "));
17 }
18}
19
20void setup() {
21 Serial.begin(9600);
22 sensors.begin();
23 count = sensors.getDeviceCount(); // hatta kaç sensör var? / how many sensors on the bus?
24 Serial.print(F("Sensor sayisi / Sensor count: "));
25 Serial.println(count);
26 sensors.setResolution(12); // hepsi 12 bit (0,0625 C) / all 12-bit (0.0625 C)
27}
28
29void loop() {
30 sensors.requestTemperatures(); // tüm sensörler aynı anda ölçer / all sensors convert at once
31 for (int i = 0; i < count; i++) {
32 if (!sensors.getAddress(addr, i)) continue; // adresi al / get the address
33 Serial.print(F("Sensor "));
34 Serial.print(i);
35 Serial.print(F(" { "));
36 printAddress(addr);
37 Serial.print(F(" }: "));
38 Serial.print(sensors.getTempC(addr), 2); // adrese göre oku / read by address
39 Serial.println(F(" C"));
40 }
41 Serial.println();
42 delay(2000);
43}Lass den Sketch einmal laufen und erwärme die Sensoren nacheinander (zum Beispiel in der Hand), um herauszufinden, welche Adresse zu welcher Messstelle gehört. Trage dann die im seriellen Monitor angezeigte Adresse fest in deinen Code ein: Füge eine Zeile wie DeviceAddress wasserSensor = {0x28, 0xFF, 0x64, 0x1E, 0x0F, 0x16, 0x03, 0x90}; hinzu und lies sie mit sensors.getTempC(wasserSensor) aus. Beim DS18B20 ist das erste Byte der Adresse immer 0x28, das letzte Byte ist eine Prüfsumme (CRC), die die Gültigkeit der Adresse sicherstellt. So kommen die Werte für „Wasser“, „außen“ oder „Kessel“ immer von der richtigen Stelle, egal in welcher Reihenfolge die Sensoren liegen.
DS18B20 am ESP32: auslesen ohne zu blockieren
Am ESP32 funktioniert der DS18B20 mit denselben Bibliotheken OneWire und DallasTemperature. Für die Datenleitung ist GPIO 4 eine gute Wahl. Nutze nicht GPIO 34–39, denn diese Pins sind reine Eingänge und können die 1-Wire-Leitung nicht auf LOW ziehen; meide außerdem GPIO 0, 2, 12 und 15, deren Pegel beim Booten wichtig ist. Schließe Sensor und Pull-up-Widerstand unbedingt an 3V3 an: Hängst du den Pull-up an 5 V, legst du 5 V an einen ESP32-Pin.
requestTemperatures() wartet standardmäßig bei 12 Bit 750 ms. In dieser Zeit kann das Board nichts anderes tun; Webserver, Taster oder Display frieren ein. Die Lösung: Schalte das Warten mit setWaitForConversion(false) ab und lies das Ergebnis 750 ms später mit millis() aus. Im folgenden ESP32-Sketch blinkt die LED auch während der Temperaturmessung ruckelfrei weiter:
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4const int ONE_WIRE_PIN = 4; // ESP32 GPIO 4 (DQ)
5const int LED_PIN = 2; // dahili LED (çoğu kartta) / onboard LED (most boards)
6
7OneWire oneWire(ONE_WIRE_PIN);
8DallasTemperature sensors(&oneWire);
9
10unsigned long requestTime = 0;
11unsigned long lastBlink = 0;
12bool converting = false;
13
14void setup() {
15 Serial.begin(115200);
16 pinMode(LED_PIN, OUTPUT);
17 sensors.begin();
18 sensors.setResolution(12);
19 sensors.setWaitForConversion(false); // requestTemperatures() beklemesin / do not block
20}
21
22void loop() {
23 unsigned long now = millis();
24
25 if (!converting) {
26 sensors.requestTemperatures(); // ölçümü başlat, hemen dön / start and return at once
27 requestTime = now;
28 converting = true;
29 }
30
31 if (converting && now - requestTime >= 750) { // 12 bit için 750 ms / 750 ms for 12-bit
32 float t = sensors.getTempCByIndex(0);
33 if (t == DEVICE_DISCONNECTED_C) {
34 Serial.println("Sensor yok / No sensor");
35 } else {
36 Serial.printf("Sicaklik / Temperature: %.2f C\n", t);
37 }
38 converting = false; // bir sonraki ölçüme geç / move to the next reading
39 }
40
41 if (now - lastBlink >= 250) { // bu arada LED yanıp söner / meanwhile the LED blinks
42 lastBlink = now;
43 digitalWrite(LED_PIN, !digitalRead(LED_PIN));
44 }
45}Dieses Muster ist vor allem bei WLAN-Projekten wichtig: Der ESP32 kann Temperaturen messen und gleichzeitig eine Webseite ausliefern, Daten ins Internet schicken oder ein Display aktualisieren. Wenn du neu beim ESP32 bist, findest du Pinwahl und Einrichtung im Artikel Was ist der ESP32?; die Pinbelegung deines Boards zeigt dir das Pinout-Werkzeug.
DS18B20 mit Raspberry Pi Pico und MicroPython
In MicroPython für den Raspberry Pi Pico sind die Module onewire und ds18x20 bereits enthalten; du musst keine zusätzliche Datei hochladen. Schließe den Sensor an 3V3(OUT) und GND an, die Datenleitung an GP22, und vergiss den 4,7-kΩ-Pull-up zwischen DQ und 3V3 nicht. Die internen Pull-up-Widerstände des Pico sind für 1-Wire zu schwach.
1from machine import Pin
2import onewire, ds18x20, time, binascii
3
4ds_pin = Pin(22) # DQ -> GP22 (fiziksel pin 29 / physical pin 29)
5sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
6
7roms = sensor.scan() # hattaki sensör adresleri / sensor addresses on the bus
8print("Sensor sayisi / Sensor count:", len(roms))
9
10while True:
11 sensor.convert_temp() # hepsi aynı anda ölçer / all sensors convert at once
12 time.sleep_ms(750) # 12 bit dönüşüm süresi / 12-bit conversion time
13 for rom in roms:
14 t = sensor.read_temp(rom) # adrese göre oku / read by address
15 print(binascii.hexlify(rom).decode(), "{:.2f} C".format(t))
16 time.sleep(2)scan() liefert eine Liste mit den 8-Byte-Adressen aller Sensoren am Bus. convert_temp() schickt allen Sensoren gleichzeitig den Messbefehl, deshalb wartest du danach 750 ms. read_temp(rom) liest die Temperatur des Sensors mit dieser Adresse in Grad Celsius. Bleibt die Liste leer, prüfe zuerst den Pull-up-Widerstand und die Pinnummer. Wenn du neu beim Pico bist, hilft dir der Artikel Was ist der Raspberry Pi Pico? bei der Einrichtung von MicroPython.
Der wasserdichte DS18B20-Fühler
Die beliebteste Bauform des DS18B20 ist der wasserdichte Fühler, bei dem der Chip in einem Edelstahlröhrchen sitzt und mit Harz vergossen ist. Er besteht meist aus einer Spitze mit 6 mm Durchmesser und 50 mm Länge und einem 1 Meter langen, dreiadrigen Kabel (es gibt auch Versionen mit 2, 3 und 5 Metern). Er eignet sich ideal für Aquarien, Wassertanks, Warmwasserspeicher, Erde, Kühlschränke und Gefriertruhen. Die Edelstahlspitze kannst du kurz in kochendes Wasser halten; da das Kabel aber meist aus PVC besteht, sollten Kabel und Übergang nicht lange über 85–100 °C bleiben. Das Fühlergehäuse verzögert den Wärmeübergang zum Sensor; nach einem plötzlichen Temperaturwechsel kann es einige Sekunden bis einige Dutzend Sekunden dauern, bis sich der Wert eingependelt hat.
Auf dem Markt gibt es viele DS18B20-Nachbauten. Manche erreichen die angegebene Genauigkeit nicht oder funktionieren nicht im parasitären Betrieb. Zwei Sensoren in dasselbe Glas Wasser zu tauchen und ihre Werte zu vergleichen, ist ein einfacher Weg, um zu erkennen, ob deiner zuverlässig ist. Weichen sie um mehr als 0,5 °C ab, kannst du im Code einen kleinen Korrekturwert (Offset) verwenden.
Projektideen mit dem DS18B20
- Aquarium-Thermostat: Schalte mit dem wasserdichten Fühler und einem Relaismodul die Heizung ein und aus; mit einer Hysterese hältst du das Wasser zwischen 25 und 26 °C.
- Temperaturüberwachung an mehreren Stellen: Hänge fünf Sensoren an einen Pin und überwache gleichzeitig Raum, außen, Kühlschrank sowie Vor- und Rücklauf der Heizung.
- OLED-Thermometer: Zeige die Temperatur mit großen Ziffern auf einem OLED-Display an, zusammen mit dem Tagesminimum und -maximum.
- LCD-Temperaturanzeige: Gib die Werte zweier Sensoren auf den beiden Zeilen eines I2C-LCD-Displays aus.
- WLAN-Temperaturseite: Verfolge die vom ESP32 gemessene Temperatur live auf einer Webseite, die du auf dem Handy öffnest.
- Gewächshaus-Steuerung: Miss die Bodentemperatur mit einem DS18B20 und die Bodenfeuchte mit einem Bodenfeuchtesensor und entscheide, wann gegossen wird.
Häufige Fehler und Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Temperatur −127 °C | Sensor nicht gefunden: kein Pull-up, Kabel unterbrochen, falscher Pin oder VDD und GND vertauscht | 4,7-kΩ-Widerstand und Verdrahtung prüfen; schauen, ob getDeviceCount() 0 liefert |
| Temperatur immer 85 °C | Ausgelesen, bevor die Messung fertig war, oder zu schwache Versorgung (85 °C ist der Einschaltwert) | Nach requestTemperatures() die Wandlungszeit abwarten; VDD direkt versorgen |
| Sensoranzahl 0 | Kein Pull-up an DQ oder falsche Pinnummer im Code | Pinnummer und Widerstand prüfen, Kabel kurz halten |
| Sensor wird sehr heiß | VDD und GND sind vertauscht | Sofort die Versorgung trennen und die Pinreihenfolge korrigieren |
| Wert springt ab und zu auf −127 | Langes Kabel, schwacher Pull-up oder Störungen | Pull-up auf 2,2–3,3 kΩ senken, verdrilltes Kabel nutzen, Fehlmessungen im Code verwerfen |
| Reihenfolge der Sensoren hat sich geändert | Die Index-Reihenfolge richtet sich nach den Adressen, nicht nach der Montage | Jeden Sensor über seine Adresse lesen: getTempC(adresse) |
| Programm hängt, Taster reagieren verzögert | requestTemperatures() blockiert bei jeder Messung 750 ms | setWaitForConversion(false) und millis() verwenden |
Dank seiner Robustheit, des wasserdichten Fühlers und der Möglichkeit, viele Sensoren an einem Pin zu betreiben, gehört der DS18B20 zu den nützlichsten Temperatursensoren in der Hobbyelektronik. Du kannst die Temperatur auf einem Display anzeigen, mit einem Relais eine Heizung oder einen Lüfter schalten oder sie mit dem ESP32 ins Internet bringen. In der BlueGrays-App findest du Projekte zur Temperaturmessung mit DHT11 und NTC, mit I2C-LCD-Displays, einen ESP32-Temperaturlogger und eine smarte Bewässerung für Arduino und ESP32 mit Schritt-für-Schritt-Schaltplänen und Code.
Häufige Fragen
Welchen Widerstand braucht der DS18B20?
Zwischen die Datenleitung (DQ) und die Versorgung (VDD) des DS18B20 kommt ein 4,7-kΩ-Pull-up-Widerstand. Ein einziger Widerstand reicht, egal wie viele Sensoren am Bus hängen. Ist das Kabel länger als etwa 10 Meter, macht ein Wert von 2,2–3,3 kΩ die Kommunikation stabiler.
Warum zeigt mein DS18B20 −127 Grad an?
−127 ist der Fehlerwert, den die Bibliothek DallasTemperature liefert, wenn der Sensor nicht antwortet. Die häufigsten Ursachen sind ein fehlender Pull-up-Widerstand, eine falsche Pinnummer, ein unterbrochenes oder lockeres Kabel und vertauschte VDD- und GND-Anschlüsse. Prüfe zuerst mit getDeviceCount(), ob der Sensor überhaupt gefunden wird.
Warum zeigt mein DS18B20 85 Grad an?
85 °C ist der Speicherwert des DS18B20 nach dem Einschalten. Er erscheint, wenn die Temperatur ausgelesen wird, bevor die Messung abgeschlossen ist, oder wenn der Sensor während der Messung zu wenig Energie bekommen hat. Abhilfe schafft es, nach dem Messbefehl die Wandlungszeit abzuwarten und den Sensor direkt über den VDD-Pin zu versorgen.
Wie viele DS18B20 kann man an einen Arduino-Pin anschließen?
Da jeder DS18B20 eine eindeutige 64-Bit-Adresse hat, können theoretisch sehr viele Sensoren an einem Pin hängen. In der Praxis laufen 10–20 Sensoren problemlos; darüber hinaus müssen Kabellänge, Pull-up-Wert und Versorgung sorgfältig gewählt werden. Alle Sensoren teilen sich dieselbe Datenleitung und einen einzigen Pull-up-Widerstand.
Ist der DS18B20 wasserdicht?
Der nackte DS18B20 im TO-92-Gehäuse ist nicht wasserdicht. Die Fühlerversion im Edelstahlröhrchen kann dagegen in Wasser und andere Flüssigkeiten getaucht oder in die Erde gesteckt werden. Da das Fühlerkabel meist aus PVC besteht, sollten Kabel und Übergang nicht lange hohen Temperaturen ausgesetzt sein.
Was ist besser, DS18B20 oder DHT22?
Beide sind auf ±0,5 °C genau, sind aber für unterschiedliche Aufgaben gedacht. Der DHT22 misst neben der Temperatur auch die Luftfeuchte und eignet sich ideal für Innenräume. Der DS18B20 misst keine Feuchte, reicht aber bis −55 °C hinab, ist als wasserdichter Fühler erhältlich und erlaubt mehrere Sensoren an einem Pin.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
Temperatur und Luftfeuchtigkeit mit DHT11
Projekt zur Messung der Umgebungstemperatur und der Luftfeuchtigkeit mit einem DHT11-Sensor und Anzeige auf einem I2C-LCD-Bildschirm. Lehrt die Verwendung eines digitalen Temperatur-/Luftfeuchtigkeits

Temperaturmessung mit NTC und 2x16 Lcd Display
Das Projekt misst die Umgebungstemperatur mit einem NTC-Thermistor und zeigt sie in Celsius auf dem I2C-LCD-Bildschirm an. Es lehrt die Berechnung der Temperatur aus dem Analogwert mit der Steinhart-H

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 alle 10 Sekunden, 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

Verwendung des LCD-Bildschirms mit I2C
Dank des I2C-Moduls druckt das Projekt Nachrichten, indem es den LCD-Bildschirm mit nur 2 Kabeln (SDA, SCL) steuert. Es lehrt, wie man Pins mit dem I2C-Protokoll speichern kann.

ESP32 I2C-LCD-Display (16×2)
In diesem Projekt zeigen wir Text an, indem wir ein 16x2-Zeichen-LCD-Display über das I2C-Protokoll an den ESP32 anschließen. Dank I2C können wir das Display mit nur zwei Datenpins (SDA und SCL) steuern; die Verschwendung von 6+ Pins bei einer klassischen parallelen Verbindung entfällt. Der Code schreibt in die erste Zeile eine feste Meldung und in die zweite Zeile einen Zähler, der sich jede Sekunde erhöht. Außerdem lassen wir zu Beginn den I2C-Scanner laufen und geben die Adresse des Displays

Punktmatrix-Uhr, Kalender und Wetterstation (MAX7219, DS1307)
DS1307 RTC-Modul und DHT22 Temperatur-Feuchtigkeitssensor ist ein Projekt, das Echtzeitdaten auf einem MAX7219 8x32 Punktmatrix-LED-Display anzeigt. Das Display zeigt die Temperatur in Celsius und Fah

ESP 32 Intelligentes Pflanzenbewässerungssystem
In diesem Projekt wurde mithilfe eines ESP32 und eines Bodenfeuchtesensors ein automatisches Pflanzenbewässerungssystem entwickelt. Der Sensor misst kontinuierlich den Feuchtigkeitsgehalt des Bodens. Wenn die Feuchtigkeit unter einen festgelegten Wert fällt, aktiviert der ESP32 das Relais, schaltet die Wasserpumpe ein und bewässert die Pflanze. Sobald der Boden ausreichend feucht ist, schaltet sich die Pumpe automatisch ab. Dank dieses Projekts können Pflanzen regelmäßig bewässert und Wasser ein
Weitere Artikel
Lerne Schritt für Schritt, wie du den digitalen Temperatursensor DS18B20 mit 4,7-kΩ-Pull-up anschließt, den wasserdichten Fühler nutzt, mehrere Sensoren an einem Pin ausliest und ihn mit Arduino, ESP32 und Pico betreibst.

