Hướng dẫn ESP32 28/55 - Cảm biến nhiệt độ DHT11 với LCD | Bộ học IoT ESP32 của SunFounder
Trong hướng dẫn này, chúng ta sẽ khám phá cách kết nối cảm biến nhiệt độ và độ ẩm DHT11 với vi điều khiển ESP32. Sử dụng thiết lập này, chúng ta sẽ đo nhiệt độ và độ ẩm môi trường xung quanh, hiển thị kết quả trên cả màn hình nối tiếp và màn hình LCD. Ngoài ra, chúng ta sẽ triển khai một còi báo động kích hoạt khi nhiệt độ vượt quá một ngưỡng nhất định.
Dự án này không chỉ minh họa việc sử dụng cảm biến DHT11 mà còn thể hiện tính linh hoạt của ESP32, bao gồm khả năng Wi-Fi và Bluetooth tích hợp. Đến cuối hướng dẫn này, bạn sẽ có một thiết lập hoạt động liên tục theo dõi các điều kiện môi trường và cung cấp phản hồi theo thời gian thực.
Để có hướng dẫn trực quan, hãy xem video đi kèm với hướng dẫn này (trong video tại 00:00). Hãy bắt đầu!
Giải thích về Phần cứng
Các thành phần chính được sử dụng trong dự án này là vi điều khiển ESP32, cảm biến DHT11 và màn hình LCD. ESP32 sẽ đóng vai trò là bộ não của hoạt động, xử lý dữ liệu từ cảm biến DHT11 và điều khiển đầu ra LCD.
Cảm biến DHT11 đo độ ẩm và nhiệt độ, cung cấp kết quả đọc qua một đường dữ liệu duy nhất. Nó yêu cầu nguồn điện từ 3.3V đến 5.5V và có mức tiêu thụ dòng điện thấp, phù hợp cho các ứng dụng chạy bằng pin. Màn hình LCD sẽ hiển thị các giá trị nhiệt độ và độ ẩm theo thời gian thực.
Chi tiết Bảng dữ liệu
| Nhà sản xuất | GROVE |
|---|---|
| Số bộ phận | DHT11 |
| Điện áp Logic/IO | 3.3 – 5.5 V |
| Điện áp cung cấp | 3.3 V |
| Dòng điện đầu ra (mỗi kênh) | 0.5 mA điển hình |
| Dòng điện đỉnh (mỗi kênh) | 2.5 mA tối đa |
| Hướng dẫn tần số PWM | Không áp dụng |
| Ngưỡng logic đầu vào | 0.3 VCC (thấp), 0.7 VCC (cao) |
| Sụt áp / RDS(on) / bão hòa | Không áp dụng |
| Giới hạn nhiệt | 0°C đến 60°C |
| Đóng gói | DIP-4 |
| Ghi chú / biến thể | Độ phân giải: 1°C / 1% RH |
- Sử dụng điện trở kéo lên (khuyến nghị 5 kΩ) trên đường dữ liệu.
- Giữ dây cảm biến ngắn (dưới 20 m) để đảm bảo kết quả đọc chính xác.
- Cấp nguồn cho DHT11 bằng 3.3V để có hiệu suất tối ưu.
- Chu kỳ lấy mẫu không được nhỏ hơn 1 giây.
- Kiểm tra kết nối dây nếu kết quả đọc bị lỗi (ví dụ: không kết nối, sai chân).
Hướng dẫn Đấu dây


Để đấu dây cảm biến DHT11 với ESP32, hãy bắt đầu bằng cách kết nối chân VCC của DHT11 (chân ngoài cùng bên trái) với đầu ra 3.3V của ESP32. Tiếp theo, kết nối chân nối đất (chân thứ tư) với chân nối đất (GND) trên ESP32. Chân dữ liệu (chân thứ hai) nên được kết nối với chân GPIO 14 trên ESP32.
Đối với màn hình LCD, kết nối chân VCC với đầu ra 5V của ESP32. Chân nối đất nên được kết nối với chân nối đất trên ESP32. Các chân SDA và SCL của LCD nên được kết nối với các chân GPIO 21 và 22 tương ứng. Đảm bảo tất cả các kết nối được chắc chắn để tránh bất kỳ sự cố nào khi đọc dữ liệu.
Ví dụ Mã & Hướng dẫn Chi tiết
Trong phần đầu tiên của mã, chúng ta khởi tạo cảm biến DHT và đặt số chân bằng #define DHTPIN 14. Định danh này cho phép chúng ta dễ dàng tham chiếu đến chân được kết nối với đường dữ liệu DHT11 trong suốt mã.
#include "DHT.h"
#define DHTPIN 14 // Đặt chân được kết nối với chân dữ liệu DHT11
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
Trong hàm setup(), chúng ta khởi tạo giao tiếp nối tiếp để gỡ lỗi và bắt đầu cảm biến DHT. Vòng lặp chính bao gồm độ trễ 2 giây để đảm bảo chúng ta không làm quá tải cảm biến với các yêu cầu.
Tiếp theo, chúng ta đọc các giá trị độ ẩm và nhiệt độ bằng float humidity = dht.readHumidity(); và float temperature = dht.readTemperature();. Các định danh này lưu trữ các giá trị đo được để sử dụng sau này.
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
}
Cuối cùng, chúng ta kiểm tra bất kỳ lỗi đọc nào và in các giá trị ra màn hình nối tiếp bằng Serial.print(). Điều này cho phép chúng ta quan sát các kết quả đọc theo thời gian thực.
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Không thể đọc từ cảm biến DHT!");
return;
}
Serial.print("Độ ẩm: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Nhiệt độ: ");
Serial.print(temperature);
Serial.println(" *C");
Trong mã LCD, chúng ta khởi tạo LCD và hiển thị nhiệt độ và độ ẩm trên màn hình bằng hàm lcd.print(). Điều này cung cấp biểu diễn trực quan về dữ liệu được thu thập bởi cảm biến DHT11.
Trình diễn / Điều gì sẽ xảy ra
Khi mọi thứ được đấu dây chính xác và mã được tải lên ESP32, bạn sẽ thấy các kết quả đọc nhiệt độ và độ ẩm được hiển thị trên màn hình nối tiếp và màn hình LCD. Nếu nhiệt độ vượt quá 30°C, còi báo động sẽ kích hoạt, cung cấp cảnh báo âm thanh.
Hãy cẩn thận với các kết nối bị đảo ngược và đảm bảo cảm biến không tiếp xúc với các điều kiện khắc nghiệt, vì điều này có thể ảnh hưởng đến kết quả đo. Bạn có thể cần điều chỉnh ngưỡng cho còi báo tùy theo yêu cầu của mình (trong video tại 15:30).
Mốc thời gian trong video
- 00:00 Bắt đầu
- 1:57 Giới thiệu về DHT11
- 6:18 Đấu dây DHT11 với ESP32
- 7:67 Giải thích mã Arduino
- 11:49 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
- 13:30 Trình diễn dự án
- 15:32 Chuyển sang độ Fahrenheit
- 16:04 Hiển thị nhiệt độ trên LCD bằng ESP32
- 17:20 Mã DHT11 và LCD với ESP32
- 19:49 Trình diễn DHT11 LCD với ESP32
- 21:33 Xử lý theo giá trị nhiệt độ
#include "DHT.h"
#define DHTPIN 14 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("DHT11 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' (it's a very slow sensor)
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Print the humidity and temperature
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
}
/*
This is Arduino code to measure temperature and humidity using DHT11/DHT22 and displays it on LCD screen
written by Ahmad Shamshiri for SunFounder's ESP32 IoT learning kit
watch full video https://youtu.be/qRUFZX4eDJg
Full code, wiring diagram and other resources for this tutorial is at https://robojax.com/RJT711
*/
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 14 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
// Initialize the LCD object with I2C address 0x27, 16 columns, and 2 rows
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Begin serial communication at 115200 baud
Serial.begin(115200);
// Initialize the dht11
dht.begin();
// Initialize the LCD
lcd.init();
lcd.backlight();
// Clear the LCD
lcd.clear();
}
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' (it's a very slow sensor)
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Display temperature and humidity on the LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.write(223); // Degree symbol
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humi: ");
lcd.print(humidity);
lcd.print("%");
}
Common Course Links
Common Course Files
Nghĩ bạn có thể cần
-
AmazonPurchase DHT11 from Amazonamzn.to
-
BanggoodPurchase DHT11 module from Banggoodbanggood.com
Tài nguyên & tài liệu tham khảo
-
Tài liệuESP32 Tutorial 28/55- SunFounder doc page for DHT temperature sensordocs.sunfounder.com
Tập tin📁
Tập tin Fritzing
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Hướng dẫn Sử dụng
-
Hướng dẫn sử dụng DHT11
robojax-DHT11_manual.pdf0.82 MB