meta data for this page
lamaPLC: DS18B20 1-Wire Digital Thermometer
The DS18B20 digital thermometer offers 9-bit to 12-bit Celsius temperature readings and features an alarm function with nonvolatile, user-programmable upper and lower trigger points. It communicates via a 1-Wire bus that requires only one data line (and ground) to connect with a central microprocessor. Additionally, the DS18B20 can draw power directly from the data line, known as "parasite power", eliminating the need for an external power supply.
Each DS18B20 has a unique 64-bit serial code, enabling multiple units to operate on the same 1-Wire bus. This makes it easy to control multiple DS18B20s from a single microcontroller over a large area.
This feature benefits applications such as HVAC environmental controls, temperature monitoring systems inside buildings, equipment or machinery, and process monitoring and control systems.
Features
- Unique 1-Wire interface requires only one port pin for communication.
- Multidrop capability simplifies distributed temperature sensing applications.
- It requires no external components and can be powered from a data line.
- The power supply range is 3.0V to 5.5V DC.
- Zero standby power is required.
- It measures temperatures from -55°C to +125°C. The Fahrenheit equivalent is -67°F to +257°F.
- It offers ±0.5°C accuracy from -10°C to +85°C.
- Thermometer resolution is programmable from 9 to 12 bits.
- Converts 12-bit temperature to a digital word in 750 ms (max.).
- User-definable, nonvolatile temperature alarm settings are available.
- The alarm search command identifies and addresses devices whose temperature is outside the programmed limits (temperature alarm condition).
- Applications include thermostatic controls, industrial systems, consumer products, thermometers, or any thermally sensitive system.
The BME/BMP sensors can be integrated with the Tasmota system.
For more details, see here: https://tasmota.github.io/docs/DS18x20/
If you'd like to support the development of the site with the price of a coffee — or a few — please do so here.
Here's a handy tip: you can quickly save this page as a PDF by clicking “export to PDF” in the menu on the right side of the screen.
Wiring
Parasitic/normal mode DS18B20 / 1-wire bus
Addressing a 1-Wire device
Each 1-Wire device has a unique 64-bit 'ROM' address, which includes an 8-bit family code, a 48-bit serial number, and an 8-bit CRC. The CRC helps verify data integrity.
For example, the sample code below checks if the device being addressed is a DS18S20 temperature sensor by looking for its family code, 0x10. To use the sample code with the newer DS18B20 sensor, you would look for a family code of 0x28. For the DS1822, you would check for 0x22.
Arduino
The DS18B20 is a popular 1-Wire digital temperature sensor known for its simplicity and the ability to connect multiple sensors to a single Arduino pin.
Wiring & Pull-up Resistor
The most critical component of the setup is the 4.7 kΩ pull-up resistor. Without it, the 1-Wire bus cannot return to a “high” state, and you will not get any readings.
- VCC: 3.3V or 5V
- GND: Ground
- Data (DQ): Any digital pin (e.g., Pin 2)
- Resistor: Place the 4.7kΩ resistor between VCC and Data.
Required Libraries
To run the code below, install these two libraries via the Arduino Library Manager (Sketch > Include Library > Manage Libraries):
- OneWire by Paul Stoffregen
- DallasTemperature by Miles Burton
Arduino Sketch
This script initializes the sensor and prints the temperature in both Celsius and Fahrenheit every second.
#include <OneWire.h> #include <DallasTemperature.h> // Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 2 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); Serial.println("DS18B20 Single Sensor Read"); // Start up the library sensors.begin(); } void loop(void) { // Send the command to get temperatures Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); Serial.println("DONE"); // Use index 0 to refer to the first (and only) sensor on the wire float tempC = sensors.getTempCByIndex(0); // Check if reading was successful if(tempC != DEVICE_DISCONNECTED_C) { Serial.print("Temperature: "); Serial.print(tempC); Serial.print("°C | "); Serial.print(DallasTemperature::toFahrenheit(tempC)); Serial.println("°F"); } else { Serial.println("Error: Could not read temperature data"); } delay(1000); }
1-wire topics on lamaPLC
| Page | Date | Tags |
|---|---|---|
| 2025/05/31 21:56 | 1-wire, communication, bus, microlan, i2c, uart, usart, ds18b20 | |
| 2025/09/23 21:03 | 1-wire, communication, bus, xml, iec 61850, iec, ethernet, scl, goose, ied | |
| 2026/02/15 20:42 | dht11, dht20, dht22, temperature, humidity, pressure, sensor, 1-wire, arduino, code | |
| 2026/02/15 20:44 | ds18b20, sensor, 1-wire, communication, arduino, thermometer, parasitic mode |
This page has been accessed for: Today: 2, Until now: 56



