Meerdere DS18B20 temperatuursensoren aansluiten op een ESP32
De DS18B20 (Dallas sensor) is een digitale temperatuursensor die zeer populair is onder makers vanwege de eenvoudige 1-Wire communicatie, goede nauwkeurigheid en mogelijkheid om meerdere sensoren op één datalijn aan te sluiten. In dit artikel lees je hoe je deze sensor aansluit op een ESP32 en wat de basiscode is om ermee aan de slag te gaan in Arduino.
Er kunnen op een eenvoudige wijze meerdere DS18B20 sensoren aangesloten worden op één ESP32. Hierdoor kan je bijvoorbeeld de binne- en buitentemperatuur meten met één ESP32 of bijvoorbeeld de buitentemperatuur en de temperatuur van het zwembadwater.
Specificaties van de DS18B20
Eigenschap | Waarde |
---|---|
Temperatuurbereik | -55 °C tot +125 °C |
Nauwkeurigheid | ±0.5 °C (tussen -10 °C en +85 °C) |
Voedingsspanning | 3.0 V tot 5.5 V |
Protocol | 1-Wire |
Resolutie | 9 tot 12 bits |
Aansluitschema (ESP32)
Je hebt de DS18B20, een 4.7 kΩ weerstand en een paar Dupont-kabels nodig. Iedere DS18B20 sluit je aan op dezelfde poort.
- GND van de sensor → GND op de ESP32
- VDD van de sensor → 3.3V op de ESP32
- DQ (data) van de sensor → GPIO 4 van de ESP32 via een 4.7 kΩ pull-up naar 3.3V

Arduino basiscode
Installeer eerst de bibliotheken OneWire en DallasTemperature via de Library Manager.
Voordat we met meerdere DS18B20 sensoren kunnen werken moeten we eerst de adressen achterhalen.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 // GPIO 4 op ESP32
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();
Serial.println("DS18B20 adres(sen) gevonden:");
DeviceAddress tempDeviceAddress;
int numberOfDevices = sensors.getDeviceCount();
Serial.print("Aantal sensoren: ");
Serial.println(numberOfDevices);
for (int i = 0; i < numberOfDevices; i++) {
if (sensors.getAddress(tempDeviceAddress, i)) {
Serial.print("Sensor ");
Serial.print(i);
Serial.print(" adres: ");
printAddress(tempDeviceAddress);
Serial.println();
} else {
Serial.print("Sensor ");
Serial.print(i);
Serial.println(" adres niet gevonden.");
}
}
}
void loop() {
// niets nodig hier
}
void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
In de Serial monitor kunnen we bijvoorbeeld de volgende adressen te zien krijgen:
DS18B20 adres(sen) gevonden:
Aantal sensoren: 2
Sensor 0 adres: 28FF64A2C11603A9
Sensor 1 adres: 28FF5C9BC1160412
Nu we de codes weten van de verschillende sensoren kunnen we deze gebruiken om ze uit te lezen.
#include <OneWire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 // GPIO waarop de DS18B20 zit
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Adressen van de sensoren (uit je vorige scan)
// Let op: hexadecimale waarden gescheiden door komma's
DeviceAddress sensor1 = {0x28, 0xFF, 0x64, 0xA2, 0xC1, 0x16, 0x03, 0xA9};
DeviceAddress sensor2 = {0x28, 0xFF, 0x5C, 0x9B, 0xC1, 0x16, 0x04, 0x12};
void setup() {
Serial.begin(115200);
sensors.begin();
}
void loop() {
sensors.requestTemperatures(); // Vraag alle sensoren om hun temperatuur
float temp1 = sensors.getTempC(sensor1);
float temp2 = sensors.getTempC(sensor2);
Serial.print("Temperatuur sensor 1: ");
Serial.print(temp1);
Serial.println(" °C");
Serial.print("Temperatuur sensor 2: ");
Serial.print(temp2);
Serial.println(" °C");
delay(2000);
}
Tips
- Gebruik altijd een 4.7 kΩ pull-up weerstand op de datalijn.
- Gebruik altijd de 3.3 V voor de voeding en niet alleen de GND en DQ (data)
- Elke sensor heeft een unieke ID — ideaal voor meerdere sensoren op één bus.
☕ Steun deze website met een kop koffie
Op matteman.nl deel ik al mijn projecten, schema’s, uitleg en code gratis — zonder advertenties of sponsordeals. Alles wat je hier vindt, is met zorg gemaakt om hobbyisten, makers en automatiseringsliefhebbers op weg te helpen.Heb je iets gehad aan de informatie op deze site? Dan kun je mij helpen door een eenmalige bijdrage te doen via Buy Me a Coffee. Daarmee steun je niet alleen mijn werk, maar ook de kosten voor hosting, onderdelen en het onderhouden van de 3D-printer (die het altijd begeeft op het verkeerde moment 😉).
Elke bijdrage — groot of klein — wordt enorm gewaardeerd. Dankjewel! 🙌