Bài 4: Thu thập nhiệt độ và độ ẩm sử dụng DHT11 từ ESP32
1. Giới thiệu
Trong các hệ thống IoT và nhà thông minh, việc theo dõi nhiệt độ và độ ẩm môi trường là một chức năng rất cơ bản nhưng vô cùng quan trọng. Các thông tin này giúp chúng ta giám sát môi trường sống, điều khiển quạt, máy lạnh, máy tạo ẩm hoặc xây dựng các hệ thống nông nghiệp thông minh.
Trong bài viết này, chúng ta sẽ sử dụng ESP32 để đọc dữ liệu từ cảm biến DHT11, sau đó hiển thị kết quả lên Serial Monitor. Bài viết được thiết kế theo hướng “cầm tay chỉ việc”, phù hợp cho những bạn mới bắt đầu làm quen với ESP32 và Arduino IDE.
2. Cảm biến DHT11 là gì?
DHT11 là một cảm biến phổ biến dùng để đo nhiệt độ và độ ẩm không khí, thường được sử dụng trong các dự án học tập và ứng dụng IoT cơ bản. Cảm biến có cấu tạo đơn giản, giao tiếp bằng tín hiệu digital một dây, giúp việc kết nối và lập trình với các vi điều khiển như Arduino hay ESP32 trở nên dễ dàng. DHT11 có khả năng đo nhiệt độ trong khoảng 0–50°C và độ ẩm từ 20–90%RH, đáp ứng tốt cho các hệ thống giám sát môi trường, nhà thông minh và nông nghiệp thông minh ở mức cơ bản. Nhờ chi phí thấp, dễ sử dụng và tài liệu hỗ trợ phong phú, DHT11 là lựa chọn phù hợp cho người mới bắt đầu làm quen với cảm biến và hệ thống nhúng.

Thông số kỹ thuật chính:

3. Chuẩn bị dụng cụ
3.1 Phần cứng
- ESP32
- Cảm biến DHT11
- Dây kết nối (jumper wires)

Cách kết nối:
DHT11 → ESP32
- VCC → 3.3V (hoặc 5V đều được)
- GND → GND
- DATA → GPIO 32 (bạn có thể đổi chân nếu muốn)
3.2 Phần mềm
- Arduino IDE

- Thư viện DHT sensor library by Adafruit
Trong Arduino IDE:
- Vào Sketch → Include Library → Manage Libraries

- Tìm và cài:
- DHT sensor library (by Adafruit)

4. Nạp và chạy chương trình
*Đầu tiên ta chọn board nhé
Cách chọn: Tools -> Board (ESP32 Dev Module)

* Chọn cổng port để nạp chương trình
Đầu tiên vào device manager tìm cổng kết nối (ví dụ COM4)
Tiếp vào arduino chọn Port: COM4 (Tools → Port : COM4)

*Code mẫu chạy chương trình
#include "DHT.h"
#define DHTPIN 2 // Chân DATA nối với GPIO 2
#define DHTTYPE DHT11 // Khai báo loại cảm biến DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("Bat dau doc DHT11...");
dht.begin();
}
void loop() {
// Đọc độ ẩm
float doAm = dht.readHumidity();
// Đọc nhiệt độ (độ C)
float nhietDo = dht.readTemperature();
// Kiểm tra lỗi
if (isnan(doAm) || isnan(nhietDo)) {
Serial.println("Loi doc du lieu tu DHT11!");
return;
}
Serial.print("Do am: ");
Serial.print(doAm);
Serial.print(" %\t");
Serial.print("Nhiet do: ");
Serial.print(nhietDo);
Serial.println(" *C");
delay(2000); // DHT11 đọc mỗi 2 giây
}
*Giờ ta check xem code có sai gì không


Vậy là oke rồi. Giờ ta nạp code thôi

*kết quả mô phỏng



.webp&w=3840&q=100)