Cara Menghubungkan Sensor Suhu One-Wire DS1820 ke Raspberry Pi Menggunakan GPIO
Memantau suhu ruangan atau luar ruangan dengan Raspberry Pi dapat dilakukan dengan pengaturan minimal. Panduan ini menunjukkan cara menyambungkan sensor 1-Wire DS18S20 (DS1820) langsung ke pin GPIO, membaca suhu dalam perangkat lunak, dan mencatat data dengan RRDtool.
Raspberry Pi dan 1-Wire
DS18S20, DS18B20, dan DS1822 adalah semua sensor suhu 1-Wire yang muat dalam paket TO‑92 dan menggabungkan sensor, ADC, dan antarmuka serial. Sementara mereka memiliki pinout dan antarmuka perangkat lunak yang sama, mereka berbeda dalam biaya dan akurasi – DS18S20 menawarkan akurasi ±0,5 °C, DS18B20 ±0,5 °C, dan DS1822 ±0,5 °C juga, tetapi yang terakhir lebih murah.
Setiap perangkat memiliki tiga pin: Ground (GND, pin 1), Data (DQ, pin 2), dan Power (VDD, pin 3). Suplai daya parasit (3–5 V) memungkinkan sensor dipasok daya sepenuhnya dari garis data menggunakan resistor pull-up.
Hanya Satu Resistor
Sambungkan pin DQ sensor ke GPIO 4 pada Pi. Ikati GND ke ground Pi dan VDD ke GND, mengaktifkan daya parasit. Letakkan resistor pull-up 4,7 kΩ antara 3,3 V dan GPIO 4. Breadboard kecil atau header sudut kanan menjaga kabel tetap rapi dan muat dalam casing resmi Pi.
Driver Perangkat Lunak 1-Wire
Pada Raspbian (atau distribusi Debian‑based apa pun) muat modul kernel dengan:
sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
Flag pullup=1 memberitahu driver bahwa sensor dipasok daya melalui resistor pull-up. Setelah dimuat, setiap sensor muncul sebagai subdirektori di bawah /sys/bus/w1/devices. Nama direktori terdiri dari kode family dan pengidentifikasi 64-bit unik sensor: DS18S20/DS1820 menggunakan kode family 10, DS18B20 menggunakan 28, dan DS1822 menggunakan 22.
Di dalam setiap direktori adalah w1_slave, yang berisi dua baris. Baris pertama menunjukkan dump register mentah dan pemeriksaan CRC. Baris kedua diakhiri dengan t=xxxx, suhu dalam miliderajat Celsius. Contoh:
cd /sys/bus/w1/devices
cd 10-000801b5*
cat w1_slave
0f 00 4b 46 ff ff 06 10 0c : crc=0c YES
0f 00 4b 46 ff ff 06 10 0c t=7375
Nilai 7375 sesuai dengan 7,375 °C. Perhatikan bahwa datasheet menentukan akurasi ±0,5 °C, sehingga suhu sebenarnya berada dalam ±0,5 °C dari pembacaan.
Untuk memastikan modul dimuat saat boot, tambahkan ke /etc/modules:
# /etc/modules
w1-gpio pullup=1
w1-therm
Untuk penyimpanan dan visualisasi jangka panjang, RRDtool ideal. Instal dengan:
sudo apt-get install rrdtool python-rrdtool
Definisikan database yang mencatat nilai setiap 15 menit dan menyimpan agregasi harian untuk sepuluh tahun:
rrdtool create temperature.rrd --step 900 \\
DS:temp0:GAUGE:1200:-40:80 \\
DS:temp1:GAUGE:1200:-40:80 \\
RRA:AVERAGE:0.5:1:960 \\
RRA:MIN:0.5:96:3600 \\
RRA:MAX:0.5:96:3600 \\
RRA:AVERAGE:0.5:96:3600
Pengakuisisi Data dengan Python
Di bawah ini adalah skrip Python minimal yang membaca w1_slave dan memasukkan nilai ke database RRDtool. Sesuaikan jalur sensor dan nama berkas database sesuai kebutuhan.
import os
import rrdtool
W1_PATH = '/sys/bus/w1/devices'
DB_FILE = 'temperature.rrd'
def read_temp(sensor_id):
with open(f'{W1_PATH}/{sensor_id}/w1_slave') as f:
lines = f.readlines()
if lines[1].strip().endswith('YES'):
temp_milli = int(lines[1].strip().split('t=')[-1])
return temp_milli / 1000.0
return None
# Contoh untuk dua sensor
temps = {
'temp0': read_temp('10-000801b5'),
'temp1': read_temp('28-0000045e')
}
rrdtool.update(DB_FILE, ','.join(str(t) for t in temps.values()))
Jalankan skrip secara berkala (misalnya, melalui cron) untuk menjaga database tetap diperbarui.