Skip to content

Temperature

Overview

The component TEMPERATURE has a Dallas chip DS18B20+ for temperature measurement

Example

There are five example projects for the Arduino IDE which could be downloaded: DS18B20.ino (download here), DS18B20-Temperature-Control-Library-1.ino (download here), DS18B20-Temperature-Control-Library-2.ino (download here), Temp-Oled.ino (download here) and Temp-TFT.ino (download here).

ESP Board temperature
SW315

Activating the component

The component has a dip switch SW315 for activating the temperature sensor. The switch is connected to the following io ports:

Function SWITCH IO port Conflicts with Remarks
DQ 1 16 Audio, SW306-1, SD_MODE; mirkoBus, SW404-3, RX; Camera, SW403-2, WRST; Unit-Bus, WS201-1, CN212 - PIN 3; Grove UART, SW202-2, UART TX

Using the component

Info

Required libraries

In order to use the component you need the OneWire-Library. The latest version could be download from the GitHub repository. If you want to use the version from GitHub download a zip archiv. Addtionally you could download a tested version. After the download it's necessary to add the library to your Arduino IDE. Open Sketch > Include Library > Add .ZIP Library ... and select the downloaded archive. After a successful installation the menu Sketch > Include Library should contain an entry OneWire in the category Contributed libraries.

Import the necessary libraries

1
#include <OneWire.h>

Setup the component

For using the temperature sensor the library from Dallas is used. This library controls the sensor and will be configured on the io port 16:

1
OneWire  ds(16);

Note

In serveral examples in the Internet it's mentioned that a pull-up resistor for SDA is necessary. This resistor is already on the board. Therefore you need no additional pull-up resistor in order to use this component.

Beside the initialisation of the dallas library there is no special code in the setup method necessary:

1
2
3
void setup(void) {
    Serial.begin(115200);
}

Searching for the address on the bus

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
byte i;
byte present = 0;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

if ( !ds.search(addr)) {
    Serial.println("No more addresses");
    ds.reset_search();
    delay(250);
    return;
}

Serial.print("ROM =");
for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
}

if (OneWire::crc8(addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return;
}

Select the chip and read the data

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
ds.reset();
ds.select(addr);
ds.write(0x44, 1);        // start conversion, with parasite power on at the end

delay(1000);     // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = ds.reset();
ds.select(addr);
ds.write(0xBE);         // Read Scratchpad

Serial.print("    Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();

Convert the data

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time

celsius    = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;

Sample project

There are five example projects for the Arduino IDE which could be downloaded: DS18B20.ino (download here), DS18B20-Temperature-Control-Library-1.ino (download here), DS18B20-Temperature-Control-Library-2.ino (download here), Temp-Oled.ino (download here) and Temp-TFT.ino (download here).