Pendahuluan
Sensor DS18B20 dapat mengukur suhu dengan rentang -55°C sampai +125°C dengan akurasi ±0.5°C untuk temperature antara -10°C dan +85°C. Cocok digunakan untuk aplikasi yang membutuhkan akurasi yang lebih tinggi.
DS18B20 menggunakan 1-Wire bus system dan dengan protokol komunikasi 64-bit addressing, jadi multiple DS18B20s dapat menggunakan saluran komunikasi yang sama.

Component
- DS18B20 sensor.
- 4.7 kΩ pull-up resistor.
Diagram

Code
File driver sama dengan external library dari modul sebelumnya.
Kita juga perlu mengatur platformio.ini
monitor_speed = 115200 lib_extra_dirs = ../../esp-idf-lib/components
Buka file main.c, gunakan code berikut
//bagian import library
#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <ds18x20.h>
#define SENSOR_PIN 21
#define MAX_SENSORS 8
static ds18x20_addr_t addrs[MAX_SENSORS];
static int sensor_count = 0;
static float temps[MAX_SENSORS];
//bagian init hardware
static void init_hw(void)
{
while (sensor_count == 0)
{
sensor_count = ds18x20_scan_devices((gpio_num_t)SENSOR_PIN, addrs, MAX_SENSORS);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
if (sensor_count > MAX_SENSORS)
{
sensor_count = MAX_SENSORS;
}
}
//bagian main function
void app_main()
{
init_hw();
while (1)
{
ds18x20_measure_and_read_multi((gpio_num_t)SENSOR_PIN,
addrs, sensor_count, temps);
for (int i = 0; i < sensor_count; i++)
{
printf("sensor-id: %08x temp: %fC\n", (uint32_t)
addrs[i], temps[i]);
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
Penjelasan Code
Bagian import library
Untuk driver, include ds18x20.h header file. Type untuk addressing adalah ds18x20_addr_t, berupa 64-bit unsigned integer yang didefinsikan pada header file.
Pada contoh, kita alokasikan arrays dengan ukuran 8 untuk menyimpan addresses dan temperature readings.
Bagian Init Hardware
Pada init_hw function, kita scan 1-wire bus untuk sensor dengan memanggil perintah ds18x20_scan_devices. Parameter yang diperlukan GPIO pin dimana sensors terhubung dan isi addrs dengan array sensor addresses.
Bagian Main App
app_main function akan berisi while loop untuk membaca sensors. Fungsi yang digunakan adalah ds18x20_measure_and_read_multi, parameter yang digunakan adalah GPIO pin dimana sensors terhubung, addresses dan array untuk menyimpan hasil readings.
Tips
Jika anda menggunakan single DS18B20 sensor, Anda dapat gunakan fungsi ds18x20_read_temperature, dengan sensor address adalah ds18x20_ANY. Jadi kita tidak perlu melakukan bus scan untuk menemukan addresses.
Sampai disini kita sudah mempelajari bagaimana menggunakan sensor suhu yang lebih akurat. Pada modul berikutnya kita akan mempelajari sensor cahaya.