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
+(atauVCC),OUT(atauDAT), dan-(atauGND).
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.
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:
- Kaki 1: VCC (daya)
- Kaki 2: DATA
- Kaki 3: tidak dipakai
- 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 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.txtTambahkan baris berikut di bagian paling bawah file (di bawah baris [all]):
dtoverlay=dht11,gpiopin=4Parameter 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 rebootLangkah #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 ueventJika 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_inputOutputnya kira-kira seperti ini:
28400
65300Nilai tersebut dalam satuan seperseribu, jadi 28400 berarti 28,4 °C dan 65300 berarti 65,3 % kelembapan relatif.
Muncul
Connection timed outatauInput/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.pyLalu 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 filein_humidityrelative_input, sehingga program tetap berjalan walaupun nomor perangkatnya bukan0.baca()membaca kedua file dan membaginya dengan 1000. Jika kernel melaporkan kegagalan (Python menerimanya sebagaiOSError), 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.pyOutputnya 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=4dari/boot/firmware/config.txtlalu 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-libgpiodBuat virtual environment di dalam folder proyek, lalu aktifkan:
python3 -m venv ~/dht22/env --system-site-packages
source ~/dht22/env/bin/activateSetelah aktif, prompt terminal anda akan diawali (env). Sekarang install library-nya:
pip3 install --upgrade adafruit-blinka adafruit-circuitpython-dhtKhusus 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.GPIOLangkah #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.pyHasilnya 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.pyOutputnya kira-kira seperti ini:
2026-11-14 09:15:02,28.4,65.3Sekarang buka editor cron milik user anda:
crontab -eTambahkan 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.csvSetelah beberapa menit, lihat hasilnya dengan perintah berikut:
tail -n 3 ~/dht22/data.csvFile 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.
Resources dan Link Berguna
- Daftar overlay resmi Raspberry Pi (lihat entri dht11)
- Repositori Adafruit CircuitPython DHT
- Panduan Adafruit: Install Blinka di Raspberry Pi
- Datasheet DHT22 (SparkFun)
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.



