ESP32 Webserver DHT11 Temperature and Humidity Measurement

ESP32 web server menyajikan data DHT11 ke browser

Tujuan:

Peserta dapat membangun sistem webserver menggunakan ESP32 yang menampilkan data suhu dan kelembaban dari sensor DHT11 secara real-time melalui halaman web.

Alat dan Bahan:

  1. ESP32 Development Board
  2. Sensor DHT11
  3. Breadboard
  4. Kabel jumper
  5. Resistor 10kΩ (opsional untuk pull-up pada pin data DHT11)
  6. USB Cable (untuk menghubungkan ESP32 ke PC)

Perangkat Lunak:

  1. Arduino IDE (dengan dukungan ESP32)
  2. Library yang diperlukan:
    • DHT sensor library by Adafruit
    • ESPAsyncWebServer dan AsyncTCP (untuk web server)

Langkah-Langkah:

  1. Persiapan Hardware
  1. Rangkai komponen seperti gambar di bawah ini:
DHT11 PinESP32 Pin
VCC3.3V
GNDGND
DATAGPIO 4
  1. Jika menggunakan resistor pull-up, hubungkan resistor 10kΩ antara VCC dan pin data sensor DHT11.
  1. Instalasi Library yang Diperlukan
  1. Buka Arduino IDE.
  2. Pastikan Anda sudah menginstal ESP32 board di Arduino IDE. Jika belum:
    • Buka File > Preferences, lalu tambahkan URL ini di bagian Additional Board Manager URLs:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
    • Pergi ke Tools > Board > Board Manager, cari “ESP32”, dan instal.
  1. Instal DHT Sensor Library:
    • Pergi ke Sketch > Include Library > Manage Libraries.
    • Cari “DHT sensor library by Adafruit” dan instal.
  2. Instal library untuk webserver:
    • ESPAsyncWebServer dan AsyncTCP:
      • Buka Sketch > Include Library > Manage Libraries.
      • Cari ESPAsyncWebServer dan AsyncTCP. Instal kedua library tersebut.
  1. Kode Program

Berikut adalah kode program untuk ESP32 Webserver menggunakan sensor DHT11:

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>




// Definisikan pin DHT dan tipe sensor

#define DHTPIN 4     
#define DHTTYPE DHT11 




DHT dht(DHTPIN, DHTTYPE);




// Konfigurasi Wi-Fi

const char* ssid = "Nama_WiFi";        // Ganti dengan nama WiFi Anda
const char* password = "Password_WiFi";  // Ganti dengan password WiFi Anda
AsyncWebServer server(80);


String readDHTTemperature() {

  float t = dht.readTemperature();
  if (isnan(t)) {
    return "--";
  } else {
    return String(t);
  }
}




String readDHTHumidity() {
  float h = dht.readHumidity();
  if (isnan(h)) {
    return "--";
  } else {
    return String(h);
  }
}




void setup() {

  // Memulai serial monitor
  Serial.begin(115200);
  dht.begin();

  // Hubungkan ke Wi-Fi

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  Serial.println(WiFi.localIP());




  // Rute untuk menampilkan halaman web

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    String html = "<!DOCTYPE html><html>";
    html += "<head><meta name='viewport' content='width=device-width, initial-scale=1.0'>";
    html += "<title>ESP32 DHT11 WebServer</title></head>";
    html += "<body><h1>ESP32 DHT11 Sensor Data</h1>";
    html += "<p>Temperature: " + readDHTTemperature() + " &deg;C</p>";
    html += "<p>Humidity: " + readDHTHumidity() + " %</p>";
    html += "</body></html>";
    request->send(200, "text/html", html);
  });

  // Memulai server
  server.begin();
}


void loop() {

  // Tidak ada kode dalam loop

}
  1. Ubah SSID dan Password Wi-Fi

Di bagian berikut, ganti nama Wi-Fi dan password sesuai dengan jaringan Wi-Fi yang Anda gunakan:

const char* ssid = "Nama_WiFi";       
const char* password = "Password_WiFi";
  1. Unggah Program ke ESP32
  1. Sambungkan ESP32 ke komputer menggunakan kabel USB.
  2. Pilih Tools > Board > ESP32 Dev Module.
  3. Pilih port yang sesuai di Tools > Port.
  4. Klik tombol Upload di Arduino IDE untuk mengunggah program ke ESP32.
  1. Uji Webserver
  1. Setelah proses upload selesai, buka Serial Monitor di Arduino IDE dengan baudrate 115200 untuk melihat alamat IP ESP32.
  2. Catat alamat IP tersebut (contoh: 192.168.1.10).
  3. Buka browser web di perangkat yang terhubung ke jaringan Wi-Fi yang sama, dan masukkan alamat IP yang ditampilkan di Serial Monitor.
  4. Halaman web akan menampilkan suhu dan kelembaban dari sensor DHT11 secara real-time.

Tugas Akhir:

  1. Tambahkan fitur untuk memperbarui data suhu dan kelembaban secara otomatis tanpa perlu me-refresh halaman secara manual.
  2. Buat laporan hasil implementasi, termasuk screenshot tampilan webserver yang berjalan.

Versi yang Lebih Baik: Baca Sensor di loop(), Halaman Update Otomatis

Kode di atas membaca DHT11 di dalam callback web server. Pembacaan DHT11 butuh waktu dan sensor ini hanya boleh dibaca sekitar sekali per detik, sehingga cara yang lebih aman adalah membaca sensor di loop() setiap 2 detik lalu menyimpan hasilnya. Versi berikut juga menjawab Tugas Akhir: halaman memperbarui angka sendiri tanpa refresh, lewat endpoint JSON /data.

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <DHT.h>

#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "Nama_WiFi";
const char* password = "Password_WiFi";
AsyncWebServer server(80);

float suhu = NAN, rh = NAN;
unsigned long tBaca = 0;

const char HALAMAN[] PROGMEM = R"rawliteral(
<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=1">
<title>ESP32 DHT11</title></head><body>
<h1>ESP32 DHT11</h1>
<p>Suhu: <b id="t">--</b> &deg;C</p>
<p>Kelembapan: <b id="h">--</b> %</p>
<script>
async function ambil() {
  const r = await fetch('/data');
  const d = await r.json();
  document.getElementById('t').textContent = d.suhu;
  document.getElementById('h').textContent = d.rh;
}
ambil(); setInterval(ambil, 2000);
</script></body></html>)rawliteral";

void setup() {
  Serial.begin(115200);
  dht.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  Serial.println(WiFi.localIP());

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *req) {
    req->send_P(200, "text/html", HALAMAN);
  });
  server.on("/data", HTTP_GET, [](AsyncWebServerRequest *req) {
    String json = "{\"suhu\":" + (isnan(suhu) ? String("null") : String(suhu, 1)) +
                  ",\"rh\":"   + (isnan(rh)   ? String("null") : String(rh, 0)) + "}";
    req->send(200, "application/json", json);
  });
  server.begin();
}

void loop() {
  if (millis() - tBaca >= 2000) {
    tBaca = millis();
    float t = dht.readTemperature();
    float h = dht.readHumidity();
    if (!isnan(t)) suhu = t;
    if (!isnan(h)) rh = h;
  }
}

Catatan Library dan Versi Core ESP32

ESPAsyncWebServer versi lama dari repositori me-no-dev sering gagal dikompilasi di Arduino-ESP32 core 3.x. Gunakan versi yang dipelihara ESP32Async (ESPAsyncWebServer dan AsyncTCP) dari Library Manager. Jika memakai versi tersebut, send_P bisa diganti send biasa.

DHT11 vs DHT22

ParameterDHT11DHT22
Rentang suhu0 – 50 °C−40 – 80 °C
Akurasi suhu±2 °C±0,5 °C
Rentang kelembapan20 – 80 %RH (tipikal)0 – 100 %RH
Laju baca1 kali/detik1 kali per 2 detik

Untuk mengganti ke DHT22, cukup ubah #define DHTTYPE DHT22.

Troubleshooting

GejalaPenyebabSolusi
Halaman menampilkan “–” terusPin data tidak sesuai kode, atau tanpa pull-upPastikan DATA ke GPIO 4 (sesuai DHTPIN) dan pasang 10 kΩ ke 3,3 V jika modul tidak punya resistor
Halaman tidak bisa dibukaHP/laptop beda jaringan dengan ESP32Sambungkan ke Wi-Fi yang sama, cek IP di Serial Monitor
Error kompilasi AsyncTCPVersi library tidak cocok dengan core ESP32Pasang versi ESP32Async terbaru

Baca juga: ESP32: Panduan Komprehensif untuk Pemula hingga Ahli (IoT, Pemrograman, & Proyek) untuk memahami roadmap lengkap belajar ESP32 dari dasar hingga proyek IoT.

Related Articles

Tinggalkan Balasan

Chat Langsung dengan Kami
Staff bisaioti 1 — +62 823-3306-4821 E-Course, Offline Course, Hardware & Teknis IoT/OT Staff bisaioti 2 — +62 823-3306-4821 Training Korporat & Toko Hardware