TeknoTUT

Cara Membaca Sensor DHT22 dengan Raspberry Pi dan Python

Panduan membaca sensor suhu dan kelembapan DHT22 dengan Raspberry Pi dan Python: rangkaian, driver kernel, kode program, hingga mencatat data.

Ditulis oleh 12 menit bacaEnglish
Ilustrasi Raspberry Pi yang terhubung ke sensor suhu dan kelembapan DHT22
Daftar Isi

Jika anda memiliki Raspberry Pi, tentu anda pernah terpikir untuk memakainya lebih dari sekadar komputer mini. Salah satu proyek yang paling sering dicoba adalah membuat pemantau suhu dan kelembapan ruangan, entah untuk kamar, ruang server kecil di rumah, kandang, atau rak tanaman.

Sensor yang paling populer untuk keperluan ini adalah DHT22. Harganya terjangkau, hanya butuh satu pin data, dan akurasinya cukup baik. Masalahnya, banyak tutorial DHT22 di internet yang sudah usang: library Adafruit_DHT yang dulu dipakai di mana-mana sudah tidak dikembangkan lagi, dan perintah sudo pip install kini ditolak oleh Raspberry Pi OS versi baru.

Kabar baiknya, ada cara yang lebih sederhana dan lebih tahan lama: memakai driver bawaan kernel Linux. Tidak perlu meng-install library apa pun, cukup satu baris konfigurasi, lalu nilai suhu dan kelembapan bisa dibaca seperti membaca file biasa.

Dalam artikel kali ini, kita akan membahas tuntas cara membaca sensor DHT22 dengan Raspberry Pi dan Python, mulai dari mengenal sensornya, merangkai di breadboard, membaca data lewat driver kernel, alternatif memakai library Adafruit, hingga mencatat data secara otomatis ke file CSV. Mari kita mulai!

Apa itu Sensor DHT22?

DHT22 (dijual juga dengan nama AM2302) adalah sensor digital yang mengukur suhu dan kelembapan udara sekaligus. Di dalamnya terdapat sensor kelembapan kapasitif, termistor, dan chip kecil yang mengubah hasil pengukuran menjadi sinyal digital.

Data dikirim lewat satu kabel data dengan protokol khusus yang sangat bergantung pada ketepatan waktu (timing). Inilah alasan DHT22 kadang "rewel" di Raspberry Pi: Linux bukan sistem operasi real-time, sehingga sesekali pembacaan bisa gagal. Hal ini normal, dan solusinya cukup dengan mencoba membaca ulang.

Spesifikasi singkat DHT22 menurut datasheet-nya:

Parameter DHT22 (AM2302) DHT11 (sebagai pembanding)
Rentang suhu -40 hingga 80 °C 0 hingga 50 °C
Akurasi suhu ±0,5 °C ±2 °C
Rentang kelembapan 0–100 % RH 20–90 % RH
Akurasi kelembapan ±2–5 % RH ±5 % RH
Tegangan kerja 3,3–5,5 V 3,3–5,5 V
Jeda antarpembacaan minimal 2 detik minimal 1 detik

Di pasaran, DHT22 dijual dalam dua bentuk:

  • Sensor polos 4 kaki: bodi putih dengan empat kaki. Butuh tambahan resistor pull-up pada kaki data.
  • Modul 3 pin: sensor yang sudah disolder di papan kecil, biasanya sudah dilengkapi resistor pull-up. Pinnya diberi label + (atau VCC), OUT (atau DAT), dan - (atau GND).

Artikel ini memakai sensor polos 4 kaki. Jika anda memakai modul 3 pin, rangkaiannya justru lebih mudah karena resistor tidak diperlukan lagi.

Persiapan

Sebelum memulai, siapkan perangkat berikut:

  • Raspberry Pi model apa pun yang memiliki header GPIO 40 pin (Pi 3, Pi 4, Pi 5, Zero 2 W, dan lainnya).
  • Raspberry Pi OS yang sudah terpasang dan bisa diakses, baik lewat monitor maupun SSH. Perintah di artikel ini ditujukan untuk Raspberry Pi OS Bookworm (Debian 12) dan Trixie (Debian 13). Jika belum terpasang, silakan ikuti panduan cara install Raspberry Pi secara headless.
  • 1 buah sensor DHT22 (AM2302).
  • 1 buah resistor 10kΩ (gelang warna cokelat-hitam-oranye-emas). Tidak diperlukan bila anda memakai modul 3 pin.
  • Breadboard dan 3 kabel jumper female-to-male.

Komponen proyek DHT22: Raspberry Pi, sensor DHT22, breadboard, resistor 10k ohm, dan tiga kabel jumper Ilustrasi komponen yang dibutuhkan: Raspberry Pi, sensor DHT22, breadboard, resistor 10kΩ, dan kabel jumper.

Kalau anda belum pernah memakai pin GPIO sama sekali, ada baiknya mencoba dulu proyek pertama Raspberry Pi Blink agar terbiasa dengan penomoran pin dan breadboard.

Cara Merangkai DHT22 ke Raspberry Pi

Langkah #1: Kenali Kaki Sensor DHT22

Pegang sensor dengan sisi berlubang-lubang (kisi) menghadap anda dan kaki mengarah ke bawah. Urutan kakinya dari kiri ke kanan adalah:

  1. Kaki 1: VCC (daya)
  2. Kaki 2: DATA
  3. Kaki 3: tidak dipakai
  4. Kaki 4: GND

Langkah #2: Hubungkan Sensor ke Pin GPIO

Matikan Raspberry Pi dan cabut dayanya sebelum merangkai. Tancapkan DHT22 di breadboard, lalu hubungkan sesuai tabel koneksi berikut:

Dari Ke
Kaki 1 DHT22 (VCC) Pin fisik 1 Raspberry Pi (3V3)
Kaki 2 DHT22 (DATA) Pin fisik 7 Raspberry Pi (GPIO4)
Resistor 10kΩ Di antara kaki 1 (VCC) dan kaki 2 (DATA)
Kaki 3 DHT22 Tidak dihubungkan
Kaki 4 DHT22 (GND) Pin fisik 6 Raspberry Pi (GND)

Ilustrasi rangkaian sensor DHT22 dan resistor 10k ohm di breadboard yang terhubung ke pin 3V3, GPIO4, dan GND Raspberry Pi Ilustrasi rangkaian DHT22 pada breadboard. Ikuti tabel koneksi di atas.

Resistor 10kΩ di sini berfungsi sebagai pull-up, yaitu menjaga jalur data tetap berada di level HIGH saat sensor tidak sedang mengirim data. Nilainya tidak harus persis 10kΩ: datasheet AM2302 menyarankan sekitar 5,1kΩ, dan resistor 4,7kΩ juga umum dipakai.

Peringatan tegangan: pin GPIO Raspberry Pi bekerja pada 3,3V dan tidak toleran 5V. Karena itu, kita memberi daya sensor dari pin 3V3, sehingga sinyal data yang kembali ke GPIO juga 3,3V. Jangan menyambungkan resistor pull-up ke pin 5V.

Jika anda memakai modul 3 pin, cukup hubungkan + ke pin fisik 1 (3V3), OUT ke pin fisik 7 (GPIO4), dan - ke pin fisik 6 (GND), tanpa resistor tambahan. Urutan pin modul berbeda-beda antarprodusen, jadi selalu baca label yang tercetak di papannya.

Setelah yakin semua kabel terpasang dengan benar, nyalakan kembali Raspberry Pi.

Metode #1: Membaca DHT22 dengan Driver Kernel (Disarankan)

Kernel Linux di Raspberry Pi OS sudah menyertakan driver untuk keluarga sensor DHT. Kita hanya perlu mengaktifkannya lewat device tree overlay bernama dht11. Jangan terkecoh dengan namanya: menurut dokumentasi resmi overlay Raspberry Pi, overlay ini berlaku untuk DHT11, DHT21, dan DHT22 (termasuk seri AM230x).

Kelebihan metode ini:

  • Tanpa library tambahan: tidak perlu pip, tidak perlu virtual environment.
  • Timing ditangani kernel: sinyal sensor dibaca di level kernel sehingga lebih presisi dibanding dibaca dari program Python.
  • Tidak bergantung pada library GPIO Python, yang beberapa kali berubah seiring pergantian model Pi dan versi sistem operasi.

Langkah #1: Aktifkan Overlay dht11

Buka file konfigurasi boot dengan perintah berikut:

sudo nano /boot/firmware/config.txt

Tambahkan baris berikut di bagian paling bawah file (di bawah baris [all]):

dtoverlay=dht11,gpiopin=4

Parameter gpiopin adalah nomor GPIO (bukan nomor pin fisik) yang terhubung ke kaki DATA sensor. Nilai default-nya memang 4, tetapi kita tulis secara eksplisit agar jelas. Simpan file dengan menekan Ctrl+X, lalu Y, dan Enter.

Selanjutnya, restart Raspberry Pi agar overlay dimuat:

sudo reboot

Langkah #2: Uji Pembacaan dari Terminal

Setelah Raspberry Pi menyala kembali, driver akan membuat sebuah perangkat IIO (Industrial I/O) di folder /sys/bus/iio/devices/. Periksa isinya dengan perintah berikut:

ls /sys/bus/iio/devices/iio:device0/

Outputnya kira-kira seperti ini:

in_humidityrelative_input  in_temp_input  name  of_node  power  subsystem  uevent

Jika file in_temp_input dan in_humidityrelative_input muncul, berarti driver sudah aktif. Sekarang baca nilai suhu dan kelembapan dengan perintah berikut:

cat /sys/bus/iio/devices/iio:device0/in_temp_input
cat /sys/bus/iio/devices/iio:device0/in_humidityrelative_input

Outputnya kira-kira seperti ini:

28400
65300

Nilai tersebut dalam satuan seperseribu, jadi 28400 berarti 28,4 °C dan 65300 berarti 65,3 % kelembapan relatif.

Muncul Connection timed out atau Input/output error? Jangan panik. Seperti yang sudah dibahas, pembacaan DHT22 sesekali memang gagal. Tunggu 2 detik, lalu ulangi perintahnya. Jika selalu gagal, periksa kembali rangkaian anda (lihat bagian troubleshooting di bawah).

Bila anda memiliki perangkat IIO lain, nomornya bisa saja bukan iio:device0. Program Python di langkah berikutnya akan mencari foldernya secara otomatis.

Langkah #3: Tulis Program Python

Buat folder proyek dan file program dengan perintah berikut:

mkdir -p ~/dht22
nano ~/dht22/baca_dht22.py

Lalu isikan kode berikut:

#!/usr/bin/env python3
"""Membaca sensor DHT22 lewat driver kernel (IIO)."""
import glob
import time
 
 
def cari_sensor():
    """Cari folder perangkat IIO milik sensor DHT."""
    hasil = glob.glob("/sys/bus/iio/devices/iio:device*/in_humidityrelative_input")
    if not hasil:
        raise SystemExit("Sensor tidak ditemukan. Cek dtoverlay di config.txt, lalu reboot.")
    return hasil[0].rsplit("/", 1)[0]
 
 
def baca(folder, percobaan=5):
    """Kembalikan (suhu, kelembapan), atau None bila semua percobaan gagal."""
    for _ in range(percobaan):
        try:
            with open(f"{folder}/in_temp_input") as f:
                suhu = int(f.read()) / 1000
            with open(f"{folder}/in_humidityrelative_input") as f:
                kelembapan = int(f.read()) / 1000
            return suhu, kelembapan
        except OSError:
            # pembacaan gagal, tunggu 2 detik lalu coba lagi
            time.sleep(2)
    return None
 
 
if __name__ == "__main__":
    folder = cari_sensor()
    while True:
        data = baca(folder)
        if data:
            suhu, kelembapan = data
            print(f"Suhu: {suhu:.1f} °C | Kelembapan: {kelembapan:.1f} %")
        else:
            print("Gagal membaca sensor. Periksa rangkaian anda.")
        time.sleep(5)

Penjelasan singkat kodenya:

  • cari_sensor() mencari folder perangkat IIO yang memiliki file in_humidityrelative_input, sehingga program tetap berjalan walaupun nomor perangkatnya bukan 0.
  • baca() membaca kedua file dan membaginya dengan 1000. Jika kernel melaporkan kegagalan (Python menerimanya sebagai OSError), fungsi ini menunggu 2 detik lalu mencoba lagi, maksimal 5 kali.
  • Bagian utama program menampilkan hasil setiap 5 detik. Ingat, DHT22 hanya boleh dibaca paling cepat 2 detik sekali.

Langkah #4: Jalankan Program

Jalankan program dengan perintah berikut:

python3 ~/dht22/baca_dht22.py

Outputnya kira-kira seperti ini:

Suhu: 28.4 °C | Kelembapan: 65.3 %
Suhu: 28.4 °C | Kelembapan: 65.1 %
Suhu: 28.5 °C | Kelembapan: 64.9 %

Coba embuskan napas ke arah sensor, dan nilai kelembapan akan langsung naik. Selesai! Tekan Ctrl+C untuk menghentikan program.

Metode #2: Membaca DHT22 dengan Library Adafruit CircuitPython

Alternatif lainnya adalah library adafruit-circuitpython-dht, penerus resmi dari Adafruit_DHT yang sudah tidak dikembangkan. Metode ini cocok bila anda memang sudah memakai ekosistem Adafruit Blinka untuk sensor lain. Saat artikel ini ditulis, versi terbarunya adalah 4.0.12.

Penting: jika anda sudah mengaktifkan overlay di Metode #1, hapus dulu baris dtoverlay=dht11,gpiopin=4 dari /boot/firmware/config.txt lalu reboot. Selama overlay aktif, GPIO4 dipegang oleh kernel sehingga tidak bisa dipakai library lain.

Langkah #1: Buat Virtual Environment dan Install Library

Sejak Raspberry Pi OS Bookworm, pip tidak boleh lagi meng-install paket ke Python sistem, sehingga kita wajib memakai virtual environment. Install dependensinya terlebih dahulu, mengikuti panduan resmi Adafruit:

sudo apt update
sudo apt install -y python3-venv libgpiod-dev python3-libgpiod

Buat virtual environment di dalam folder proyek, lalu aktifkan:

python3 -m venv ~/dht22/env --system-site-packages
source ~/dht22/env/bin/activate

Setelah aktif, prompt terminal anda akan diawali (env). Sekarang install library-nya:

pip3 install --upgrade adafruit-blinka adafruit-circuitpython-dht

Khusus Raspberry Pi 5, panduan Adafruit menyebutkan bahwa paket RPi.GPIO yang ikut terpasang dapat menimbulkan masalah dan perlu dihapus dari virtual environment:

pip3 uninstall -y RPi.GPIO

Langkah #2: Tulis dan Jalankan Program

Buat file baru dengan perintah nano ~/dht22/baca_adafruit.py, lalu isikan kode berikut (diadaptasi dari contoh resmi library):

import time
 
import adafruit_dht
import board
 
# DATA sensor terhubung ke GPIO4 (pin fisik 7)
sensor = adafruit_dht.DHT22(board.D4, use_pulseio=False)
 
while True:
    try:
        suhu = sensor.temperature
        kelembapan = sensor.humidity
        print(f"Suhu: {suhu:.1f} °C | Kelembapan: {kelembapan:.1f} %")
    except RuntimeError as error:
        # gagal baca itu wajar pada DHT, cukup coba lagi
        print(error.args[0])
    except Exception:
        sensor.exit()
        raise
    time.sleep(2)

Opsi use_pulseio=False membuat library membaca sinyal secara langsung (bit-banging). Menurut contoh resmi Adafruit, opsi ini mungkin diperlukan pada komputer papan tunggal berbasis Linux seperti Raspberry Pi.

Jalankan program (pastikan virtual environment masih aktif):

python ~/dht22/baca_adafruit.py

Hasilnya akan mirip dengan Metode #1, diselingi pesan error sesekali ketika pembacaan gagal. Perlu diketahui, dokumentasi library ini sendiri mencantumkan beberapa keterbatasan, di antaranya pembacaan yang kurang andal di Raspberry Pi Zero. Jika hasilnya tidak stabil di perangkat anda, kembalilah ke Metode #1.

Perbandingan Kedua Metode

Metode #1: Driver Kernel Metode #2: Library Adafruit
Instalasi Satu baris di config.txt Virtual environment + pip
Butuh internet ❌ ✅
Pembacaan sinyal Di kernel Di program Python
Mengganti pin Edit config.txt, lalu reboot Ubah di kode
Cocok untuk Pemantauan jangka panjang, skrip sederhana Proyek yang sudah memakai Blinka

Mencatat Data Sensor ke File CSV

Membaca suhu saat ini memang menarik, tetapi data baru benar-benar berguna jika dicatat dari waktu ke waktu. Kita akan membuat skrip kecil yang menulis satu baris data setiap kali dijalankan, lalu menjadwalkannya dengan cron. Bagian ini memakai Metode #1.

Buat file baru dengan perintah nano ~/dht22/catat_dht22.py, lalu isikan kode berikut:

#!/usr/bin/env python3
"""Mencetak satu baris CSV: waktu,suhu,kelembapan."""
from datetime import datetime
 
from baca_dht22 import baca, cari_sensor
 
data = baca(cari_sensor())
if data:
    waktu = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"{waktu},{data[0]:.1f},{data[1]:.1f}")

Skrip ini memakai ulang fungsi dari baca_dht22.py, jadi kedua file harus berada di folder yang sama. Coba jalankan sekali dengan perintah berikut:

python3 ~/dht22/catat_dht22.py

Outputnya kira-kira seperti ini:

2026-11-14 09:15:02,28.4,65.3

Sekarang buka editor cron milik user anda:

crontab -e

Tambahkan baris berikut di bagian paling bawah untuk mencatat data setiap 5 menit. Ganti budi dengan nama user anda:

*/5 * * * * /usr/bin/python3 /home/budi/dht22/catat_dht22.py >> /home/budi/dht22/data.csv

Setelah beberapa menit, lihat hasilnya dengan perintah berikut:

tail -n 3 ~/dht22/data.csv

File data.csv ini bisa anda buka di aplikasi spreadsheet untuk dibuat grafiknya. Keren kan?

Troubleshooting

Berikut masalah yang paling sering muncul beserta solusinya:

Masalah Kemungkinan Penyebab Solusi
Folder iio:device0 tidak ada Overlay belum dimuat Cek penulisan baris dtoverlay di /boot/firmware/config.txt, lalu reboot
Selalu Connection timed out Kabel DATA salah pin, atau sensor tidak mendapat daya Pastikan DATA ke pin fisik 7 (GPIO4), VCC ke pin 1, GND ke pin 6
Sering Input/output error Tidak ada pull-up, kabel terlalu panjang, atau kontak breadboard longgar Pasang resistor 4,7–10kΩ antara VCC dan DATA, pendekkan kabel
Nilai tidak pernah berubah Sensor dibaca lebih cepat dari 2 detik sekali Beri jeda minimal 2 detik antarpembacaan
error: externally-managed-environment saat pip install pip dijalankan di luar virtual environment Aktifkan dulu dengan source ~/dht22/env/bin/activate
Metode #2 gagal mengakses pin Overlay dht11 masih aktif di GPIO yang sama Hapus baris dtoverlay, lalu reboot

Satu catatan soal panjang kabel: datasheet AM2302 menyebutkan bahwa bila sensor diberi daya 3,3V, kabelnya sebaiknya tidak lebih dari 1 meter, karena penurunan tegangan dapat mengganggu pengukuran.

Kesimpulan

Dari artikel ini, kita dapat menyimpulkan bahwa membaca sensor DHT22 dengan Raspberry Pi ternyata tidak membutuhkan library yang rumit. Cukup tiga kabel, satu resistor pull-up, dan satu baris dtoverlay=dht11,gpiopin=4 di config.txt, nilai suhu dan kelembapan sudah bisa dibaca dari file di folder /sys/bus/iio/devices/.

Bagi anda yang lebih nyaman dengan ekosistem Adafruit, library adafruit-circuitpython-dht tetap bisa dipakai di dalam virtual environment. Apa pun metodenya, kuncinya sama: DHT22 sesekali gagal dibaca, jadi program harus siap mencoba ulang.

Yang Perlu Diingat

  • Beri daya sensor dari pin 3V3, karena GPIO Raspberry Pi tidak toleran 5V.
  • Sensor polos 4 kaki butuh resistor pull-up antara VCC dan DATA. Modul 3 pin biasanya tidak.
  • Baca sensor paling cepat 2 detik sekali.
  • Jangan memakai overlay kernel dan library Adafruit pada pin yang sama secara bersamaan.

Langkah Selanjutnya

Setelah data tercatat rapi di file CSV, anda bisa mengembangkannya lebih jauh: menampilkan grafik di halaman web, mengirim notifikasi saat suhu terlalu tinggi, atau mengirim data ke dashboard IoT. Jika anda ingin sensor yang bisa ditaruh jauh dari Raspberry Pi dan terhubung lewat WiFi, silakan baca juga cara memprogram ESP32 dengan Arduino IDE.


Ada pertanyaan atau kendala saat mengikuti tutorial ini? Jangan ragu untuk bertanya, dan tetap pantau terus web Teknotut untuk proyek Raspberry Pi berikutnya!

Semoga artikel ini membantu.

Bacaan Selanjutnya

Artikel lain yang mungkin menarik buatmu.