The DS18B20 digital thermometer provides 9-bit to 12-bit Celsius temperature measurements and has an alarm function with non-volatile, user-programmable high and low trigger points, meaning that the sensor has programmable high and low limits that cannot change on their own. The DS18B20 communicates over a 1-wire bus, which by definition requires only one data line (and ground) to communicate with a central microprocessor. In addition, the DS18B20 can draw power directly from the data line ("parasite power"). This eliminates the need for an external power source. Each DS18B20 has a unique 64-bit serial code, allowing multiple DS18B20s to operate on the same 1-Wire bus. This then opens up the possibility of using only one microprocessor to control/evaluate multiple DS18B20s distributed over a wide area. Applications that can benefit from this feature include HVAC environmental controls, temperature monitoring systems in buildings, plants or machinery, and process monitoring and control systems.

Technical data

chipset DS18B20
Communication Protocol 1-Wire
Accuracy 9 to 12 Bit
Measuring range -55°C to +125°C
Measurement accuracy ±0.5°C from -10°C to +85°C

Pin assignment

Code example Arduino

Pin assignment Arduino:

Arduino Sensor
pin 4 signal
5V +V
Ground GND

For the following code example two additional libraries are needed:

OneWire Library by. Paul Stoffregen | published under the MIT License

Dallas Temperature Control Library by Miles Burton | released under LGPL.

Both libraries are included in the package and must be copied to the "library" folder before starting the Arduino IDE.

This can be found by default under the following path of your Windows installation:


// Required libraries will be imported
#include <OneWire.h>
#include <DallasTemperature.h>            

// Here the input pin is declared to which the sensor module is connected
#define KY001_Signal_PIN 4

// Libraries are configured
OneWire oneWire(KY001_Signal_PIN);          
DallasTemperature sensors(&oneWire);    

void setup() {

    // Initialize serial output
    Serial.println("KY-001 temperature measurement");

    // Sensor is initialized

//main program loop
void loop()
    // Temperature measurement is started...
    // ... and output measured temperature
    Serial.print("Temperature: ");
    Serial.write(176); // UniCode specification of a char symbol for the "°" symbol

    delay(1000); // 5s pause until next measurement

Example program download

Code example Raspberry Pi

Pin assignment Raspberry Pi:

Raspberry Pi Sensor
GPIO4 [Pin 7] Signal
3.3V [Pin 1] +V
Ground [Pin 6] GND

One-Wire Configuration Raspberry Pi

In order for the Raspberry Pi to communicate with the One-Wire bus, so that the sensor/DS18B20 sends its measurement data digitally, this bus must first be activated. For this, the file "/boot/config.txt" must be edited and the following line must be added:


You can edit the file by issuing the command....

sudo nano /boot/config.txt

... in the console. You can finish editing with the key combination [CTRL+X] and save with [CTRL+Y].

After you have shut down the Raspberry Pi with...

sudo reboot

... you can use the example below.

This is a similar example program with the difference that here no LED is lit but something is printed in the console when a signal is detected.

# coding=utf-8
# Required modules are imported and set up
import glob
import time
from time import sleep
import RPi.GPIO as GPIO
# At this point the pause between the individual measurements can be set
sleeptime = 1
# The One-Wire input pin is declared and the integrated PullUp resistor is activated
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# After activation of the Pull-UP resistor it waits
# until the communication with the DS18B20 sensor is established.
print ("Waiting for initialization...")
base_dir = '/sys/bus/w1/devices/'
while True:
        device_folder = glob.glob(base_dir + '28*')[0]
    except IndexError:
device_file = device_folder + '/w1_slave'
# Function is defined, with which the current measured value can be read out at the sensor.
def TemperaturMessung():
    f = open(device_file, 'r')
    lines = f.readlines()
    return lines
# For initialization, the sensor is read out "blind" once.
# The temperature evaluation: On the Raspberry Pi, detected one-Wire slaves are assigned to a separate subfolder in the folder
# /sys/bus/w1/devices/ are assigned to an own subfolder. In this folder is the file w1-slave
# in which the data sent over the one-wire bus is stored.
# In this function these data are analyzed and the temperature is read out and output.
def TemperaturAuswertung():
    lines = TemperaturMessung()
    while lines[0].strip()[-3:] != 'YES':
        lines = TemperaturMessung()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c
# Main program loop
# The measured temperature is output to the console - between the individual measurements
# is a pause, the length of which can be set with the "sleeptime" variable
    while True:
        print ("---------------------------------------")
        print ("Temperatur:", TemperaturAuswertung(), "°C")
except KeyboardInterrupt:

Sample program download

To start with the command:

sudo python3

Code example Micro:Bit

Pinout Micro:Bit:

Micro:Bit Sensor
Pin 1 Signal
3V +V
Ground GND

This is a MakeCode example for Micro:Bit which essentially does the same as the examples of the other two variants. However, this example is closer to the Raspberry Pi example than the Arduino example.

An additional librarie is needed for the following code example:

pxt-ds18b20 from DFRobot | published under the GUI License.

You need to add this library to your IDE before using the code.

You do this by going to Extensions in your IDE and, using the following URL, search for the library to add.

Sample program download