ArduinoMshop

Hướng dẫn dùng cảm biến DHT11/DHT22 với ESP32 (Nhiệt độ & Độ ẩm)

Thứ Sáu, 13/03/2026
Admin

ESP32 DHT11 DHT22 cảm biến nhiệt độ độ ẩm

Trong bài này, bạn sẽ học cách kết nối cảm biến DHT11 hoặc DHT22 với ESP32 để đọc nhiệt độ và độ ẩm bằng Arduino IDE. Đây là cảm biến rất phổ biến trong các dự án IoT, giám sát môi trường, và nhà thông minh.

DHT11 vs DHT22 — Khác nhau ở đâu?

DHT11 vs DHT22

Thông số DHT11 DHT22
Dải nhiệt độ 0 – 50°C -40 – 80°C
Độ chính xác nhiệt độ ±2°C ±0.5°C
Dải độ ẩm 20 – 80% 0 – 100%
Độ chính xác độ ẩm ±5% ±2–5%
Chu kỳ lấy mẫu 1 lần/giây 0.5 lần/giây
Giá thành Rẻ hơn Đắt hơn

➡️ Chọn DHT22 nếu cần độ chính xác cao. Chọn DHT11 nếu cần tiết kiệm chi phí cho dự án đơn giản.

Sơ đồ chân (Pinout)

DHT11 pinout

DHT11

DHT22 pinout

DHT22

DHT22 pinout chi tiết

DHT22 chi tiết

Cả DHT11 và DHT22 đều có 3 chân hoạt động: VCC (3.3V–5V), Data, và GND. Chân Data cần điện trở kéo lên (pull-up) 10kΩ về VCC.

Sơ đồ kết nối với ESP32

Sơ đồ kết nối ESP32 DHT

DHT11/DHT22 ESP32
VCC 3.3V
Data GPIO 4 (kèm 10kΩ pull-up về 3.3V)
GND GND

Cài thư viện

Cài DHT library Cài Adafruit Unified Sensor

Vào Arduino IDE → Sketch → Include Library → Manage Libraries, cài 2 thư viện:

  1. DHT sensor library by Adafruit
  2. Adafruit Unified Sensor by Adafruit

Code Arduino – Đọc nhiệt độ và độ ẩm

Nếu dùng DHT22, đổi dòng #define DHTTYPE DHT11 thành #define DHTTYPE DHT22. Nếu dùng chân khác GPIO 4, thay đổi #define DHTPIN 4.

// Example testing sketch for various DHT humidity/temperature sensors written by ladyada
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 4     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

Kết quả trên Serial Monitor

Kết quả đọc DHT Serial Monitor

Mở Serial Monitor ở 115200 baud. Mỗi 2 giây sẽ in ra nhiệt độ (°C và °F) và độ ẩm (%). Nếu thấy "Failed to read from DHT sensor", kiểm tra lại kết nối dây và điện trở pull-up.

Xử lý lỗi thường gặp

Lỗi Failed to read DHT

  • "Failed to read from DHT sensor!" → Kiểm tra kết nối dây, thêm điện trở pull-up 10kΩ, thay đổi GPIO pin
  • "NaN" readings → Cảm biến bị lỗi hoặc nguồn không ổn định — thử cấp nguồn 5V thay vì 3.3V
  • "Fatal error: Adafruit_Sensor.h" → Chưa cài thư viện Adafruit Unified Sensor

Ứng dụng thực tế

Sau khi đọc được nhiệt độ và độ ẩm, bạn có thể mở rộng dự án:

  • 📊 Gửi dữ liệu lên web server / MQTT broker để theo dõi từ xa
  • 📱 Hiển thị lên màn hình OLED hoặc LCD
  • 🔔 Gửi cảnh báo qua Telegram khi nhiệt độ vượt ngưỡng
  • 🌡️ Làm trạm thời tiết mini trong nhà
  • 🤖 Kích hoạt relay bật/tắt điều hòa tự động

📖 Nguồn: Random Nerd Tutorials – ESP32 with DHT11/DHT22 Temperature and Humidity Sensor

Viết bình luận của bạn

Tin liên quan

Hướng dẫn điều khiển Servo Motor với ESP32 qua Web Server (Arduino IDE)

Bài hướng dẫn này giúp bạn xây dựng một web server bằng ESP32 để điều khiển góc quay của động cơ servo thông qua thanh trượt...

Hướng dẫn dùng cảm biến PIR với ESP32 (Interrupt & Timer millis())

Bài này hướng dẫn cách dùng cảm biến PIR với ESP32 để phát hiện chuyển động bằng Interrupt (ngắt) và Timer (bộ đếm thời gian millis())....

Hướng dẫn cài đặt VS Code và PlatformIO IDE để lập trình ESP32/ESP8266

Bài viết này hướng dẫn cài đặt và sử dụng VS Code + PlatformIO IDE để lập trình ESP32 và ESP8266 — một môi trường lập...

Hướng dẫn cài đặt ESP32 vào Arduino IDE (Windows, Linux, macOS)

Bài viết này hướng dẫn chi tiết cách cài đặt board ESP32 vào Arduino IDE để bắt đầu lập trình ESP32. Đây là bước đầu tiên bắt buộc trước khi...

Hướng dẫn dùng cảm biến DHT11/DHT22 với ESP32 (Nhiệt độ & Độ ẩm)

Trong bài này, bạn sẽ học cách kết nối cảm biến DHT11 hoặc DHT22 với ESP32 để đọc nhiệt độ và độ ẩm bằng Arduino IDE....

Danh sách so sánh
Messenger