One of my goals when playing with these chips is to enhance elements of smart home. One of features is measurement of home parameters including temperature. Earlier I have integrated it with Fibaro sensor, now I’ll check it with ESP32 and DS18B20.
Application setup
First step is to get empty project as described here and rename it to temperature for example. Update Makefile, set serial port and remove main.c file.
Now we need to add support for DS18B20. On GitHub there is already component which handles it but it will require minor update to compile seamlessly. Each project may contain several components organized in components subdirectory. Components are simply pieces of code which are compiled into static library and then linked into our application. Some of them are available in ESP-IDF but we can create also ours. For purpose of handling DS18B20 I used component from FeelFreeLinux, there are 2 small changes which must be applied.
cd components git clone --recursive https://github.com/feelfreelinux/ds18b20.git cd ds18b20 mkdir include mv ds18b20.h include
Lines 4 and 5 in script above are needed to allow build system to find automatically header files.
Second change is that component’s makefile – component.mk file does not require inclusion of component_common.mk. So you can comment it out.
Now go back to main dir and prepare the following application (it is also based on example available on FeelFree with minor change.
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "string.h"
#include "esp_system.h"
#include "nvs_flash.h"
// *** Include DS18B20 library
#include "ds18b20.h"
// *** GPIO pin number for DS18B20
const int DS_PIN = 14;
// *** Task measuring temperature
void mainTask(void *pvParameters)
{
DS_init(DS_PIN);
while (1)
{
printf("Temperature: %0.1f\n",DS_get_temp());
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main()
{
nvs_flash_init();
xTaskCreatePinnedToCore(&mainTask, "mainTask", 2048, NULL, 5, NULL, 0);
}
Hardware setup
Now for the hardware. We need
- ESP32 board – I use SparkFun ESP32 Thing
- DS18B20
- 4.7kΩ resistor
- a few cables
- breadboard

DS18B20 connection diagram Connected diagram looks like this



Here we go
So now what left is simply connect circuit using USB cable and execute
make flash monitor
As a result you should see something like
Hash of data verified. Leaving... Hard resetting... MONITOR --- WARNING: Serial ports accessed as /dev/tty.* will hang gdb if launched. --- Using /dev/cu.usbserial-DN01DXXH instead... --- idf_monitor on /dev/cu.usbserial-DN01DXXH 115200 --- --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- ets Jun 8 2016 00:22:57 rst:0x10 (RTCWDT_RTC_RESET),boot:0ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) ets Jun 8 2016 00:22:57 rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0x00 clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0008,len:8 load:0x3fff0010,len:3424 load:0x40078000,len:10388 ho 0 tail 12 room 4 load:0x40080000,len:252 0x40080000: _iram_start at ??:? entry 0x40080034 0x40080034: _iram_start at ??:? Temperature: 23.4 Temperature: 23.4 Temperature: 23.4
Next steps
What I plan to do next is:
- Build class for sensor handling to make it more encapsulated
- Test pressure and humidity sensors
- Set WiFi and BT connections to send data further
/Rook