Series
Lập Trình ESP32 Cơ Bản
  1. Series Lập Trình ESP32 Cơ Bản – Giới Thiệu: Lộ Trình 19 Bài Từ Số 0
  2. 1Lập trình ESP32 – Bài 1: ESP32 là gì? Hướng dẫn bắt đầu với ESP32 cho người mới
  3. 2Lập trình ESP32 – Bài 2: Kết nối WiFi và kiểm tra Internet với ESP32
  4. 3Lập trình ESP32 – Bài 3: Đọc nút nhấn và điều khiển LED với ESP32
  5. 4Lập trình ESP32 – Bài 4: Đọc nhiệt độ & độ ẩm với cảm biến DHT11
  6. 5Lập trình ESP32 – Bài 5: ESP32 Web Server – Điều khiển LED qua trình duyệt
  7. 6Lập trình ESP32 – Bài 6: Điều khiển LED RGB
  8. 7Lập trình ESP32 – Bài 7: Điều khiển Relay qua Web Server
  9. 8Lập trình ESP32 – Bài 8: WebSocket – Điều khiển LED realtime từ trình duyệt
  10. 9Lập trình ESP32 – Bài 9: Đọc cảm biến ánh sáng (LDR) và hiển thị realtime qua WebSocket
  11. 10Lập trình ESP32 – Bài 10: Điều khiển Servo SG90 qua Web Server
  12. 11Lập trình ESP32 – Bài 11: Đọc các loại biến trở (Potentiometer / Analog Sensor)
  13. 12Lập trình ESP32 – Bài 12: Đọc cảm biến khoảng cách HC-SR04
  14. 13Lập trình ESP32 – Bài 13: ESP32 – Đọc cảm biến nhiệt độ, độ ẩm DHT11 và hiển thị dữ liệu realtime qua WebSocket
  15. 14Lập trình ESP32 – Bài 14: Hiển thị màn hình TFT (SPI)
  16. 15Lập trình ESP32 – Bài 15: Màn hình OLED SSD1306 (I2C)
  17. 16Lập trình ESP32 – Bài 16: Module SIM 4G A7680C – Gọi điện thoại, in thông tin SIM/Module, trạng thái 4G
  18. 17Lập trình ESP32 – Bài 17: Phát nhạc MP3 với module DFPlayer Mini
  19. 18Lập trình ESP32 – Bài 18: Đọc cảm biến khí gas MQ-2 và hiển thị lên màn hình OLED
  20. 19Lập trình ESP32 – Bài 19: Kết nối MQTT, Publish dữ liệu cảm biến & Subscribe điều khiển thiết bị
Kiến thức

Lập trình ESP32 – Bài 4: Đọc nhiệt độ & độ ẩm với cảm biến DHT11

Th10 2025
Lập trình ESP32 – Bài 4: Đọc nhiệt độ & độ ẩm với cảm biến DHT11

Hướng dẫn kết nối cảm biến DHT11 với ESP32, đọc nhiệt độ và độ ẩm bằng Arduino IDE, in kết quả lên Serial Monitor và tối ưu chống lỗi đọc dữ liệu.

Mục lục

  1. Giới thiệu
  2. Nguyên lý DHT11
  3. Phần cứng cần chuẩn bị
  4. Sơ đồ kết nối
  5. Cài thư viện
  6. Mã nguồn ví dụ
  7. Giải thích mã
  8. Kết quả khi chạy
  9. Lỗi thường gặp & cách khắc phục
  10. Gợi ý mở rộng

1) Giới thiệu

DHT11 là cảm biến đo nhiệt độ (°C) và độ ẩm (%) phổ biến, giá rẻ. Kết hợp với ESP32, bạn có thể xây dựng các ứng dụng như trạm thời tiết mini, giám sát phòng, hay điều khiển quạt/humidifier theo ngưỡng.

2) Nguyên lý DHT11

  • Giao tiếp 1-Wire (một dây dữ liệu).
  • Chu kỳ đọc khuyến nghị: ≥1 giây/lần.
  • Độ chính xác cơ bản: ±2–5% RH, ±2°C (tham khảo).
  • Biến thể DHT22/AM2302 chính xác và dải đo rộng hơn (cùng cách dùng).

3) Phần cứng cần chuẩn bị

Linh kiệnSố lượngGhi chú
ESP32 DevKit V1 (38 pin)1Board chính
Cảm biến DHT11 (module 3 chân hoặc sensor rời 4 chân)1Nên dùng module có sẵn điện trở kéo lên
Dây nốiVài sợi
Breadboard1(khuyến nghị)

Ghi chú:

  • Nếu dùng DHT11 rời (4 chân), thêm điện trở 10kΩ kéo DATA → 3.3V.
  • Nếu dùng module DHT11 3 chân, đã tích hợp sẵn điện trở kéo lên.

4) Sơ đồ kết nối (Connection Diagram)

Nối chân

  • DHT11 VCC → 3V3 của ESP32
  • DHT11 GND → GND của ESP32
  • DHT11 DATA → GPIO4 của ESP32
  • (Nếu là sensor rời 4 chân) 10kΩ kéo DATA 3V3

Gợi ý chân Data khác có thể dùng: GPIO 5, 15, 16, 17…

5) Cài thư viện

Mở Arduino IDE → Tools → Manage Libraries… tìm và cài:

  • DHT sensor library (by Adafruit)
  • Adafruit Unified Sensor

6) Mã nguồn ví dụ

#include <Arduino.h>
#include <DHT.h>

#define DHTPIN 4        // Chân DATA của DHT11 nối GPIO4
#define DHTTYPE DHT11   // Nếu dùng DHT22: đổi thành DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);

  delay(500);
  Serial.println(F("ESP32 - Đọc nhiệt độ & độ ẩm từ DHT11"));
  dht.begin();
}

void loop() {
  // DHT11 cần ~1-2 giây giữa các lần đọc

  float h = dht.readHumidity();
  float t = dht.readTemperature();      // °C
  float f = dht.readTemperature(true);  // °F

  // Kiểm tra lỗi đọc
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("❌ Không đọc được từ cảm biến DHT!"));
    delay(2000);
    return;
  }

  // Tính heat index (chỉ số nóng bức)
  float hif = dht.computeHeatIndex(f, h);   // °F
  float hic = (hif - 32) * 5.0 / 9.0;       // đổi sang °C

  Serial.print(F("Độ ẩm: "));   Serial.print(h);  Serial.print(F("%"));

  Serial.print(F(" | Nhiệt độ: ")); Serial.print(t); Serial.print(F("°C"));

  Serial.print(F(" | Heat Index: ")); Serial.print(hic); Serial.println(F("°C"));

  delay(2000);
}

7) Giải thích mã

  • DHT dht(DHTPIN, DHTTYPE); khởi tạo đối tượng DHT với chân DATA và loại cảm biến.
  • dht.readHumidity() / dht.readTemperature(): trả về số thực (float).
  • isnan() kiểm tra lỗi đọc (DHT khá “khó tính” về thời gian).
  • computeHeatIndex() tính nhiệt độ cảm nhận (Heat Index) dựa trên T & RH.
  • delay(2000) đảm bảo chu kỳ đọc ổn định cho DHT11.

8) Kết quả khi chạy

Trên Serial Monitor (115200), bạn sẽ thấy dạng:

ESP32 - Đọc nhiệt độ & độ ẩm từ DHT11

Độ ẩm: 63.00% | Nhiệt độ: 29.30°C | Heat Index: 31.12°C

Độ ẩm: 62.80% | Nhiệt độ: 29.40°C | Heat Index: 31.16°C

...

9) Lỗi thường gặp & cách khắc phục

  • Serial báo “Không đọc được từ cảm biến
    → Kiểm tra dây DATA, thay chân GPIO; tăng delay lên 2000–2500ms.
  • Cấp sai điện áp (nhầm 5V)
    → DHT11 hoạt động với 3.3V–5V, nhưng ESP32 logic 3.3V – ưu tiên 3V3.
  • Không có điện trở kéo lên (khi dùng sensor rời)
    → Thêm 10kΩ kéo DATA → 3V3.
  • Dây quá dài, nhiễu
    → Dùng dây ngắn hơn, hoặc thêm tụ lọc (100nF) gần cảm biến.

10) Gợi ý mở rộng

  • Gửi dữ liệu lên MQTT/Web Server/Google Sheet.
  • Lưu log ra SD Card hoặc SPIFFS/LittleFS.
  • Thêm OLED hiển thị trực tiếp nhiệt độ/độ ẩm.
  • Đặt ngưỡng cảnh báo (ví dụ RH > 80% bật quạt).
  • Chuyển sang DHT22 để có độ chính xác và dải đo tốt hơn.