Đo nhiệt độ – độ ẩm DHT11 hiển thị lên LCD16X2 Trên ESP8266 NodeMCU
1. Giới thiệu
Bài viết này sẽ hướng dẫn các bạn cách đọc nhiệt độ – độ ẩm từ cảm biến và xuất ra màn hình LCD. Hy vọng rằng qua bài viết này, bạn sẽ dần hiểu được Arduino tạo cho người dùng một sự đơn giản và tiện lợi đến mức nào.
2. Nội dung chính
- Đọc dữ liệu từ cảm biến nhiệt độ – độ ẩm DHT11.
- Sử dụng màn hình LCD để xuất thông tin.
3. Phần cứng cần thiết
-
-
- Màn hình LCD 16X2
- Mạch điều khiển màn hình LCD sử dụng giao tiếp I2C
- Cảm biến nhiệt độ – độ ẩm DHT11
- ESP8266 NodeMCU.
-
4. Cảm biến DHT11
Cảm biến DHT11 đã được tích hợp trong một mạch duy nhất, bạn chỉ việc nối dây nguồn (Vcc, GND) và dây tín hiệu (Signal) vào mạch Arduino là xong.
Thông số kĩ thuật
- Điện áp hoạt động: 3-5.5V DC
- Ngưỡng độ ẩm: 20 – 90%
- Sai số độ ẩm: ± 5%
- Ngưỡng nhiệt độ: 0 – 55oC
- Sai số nhiệt độ: ± 2oC
5. Màn hình LCD16x2
Thông thường, để sử dụng màn hình LCD, bạn sẽ phải mất rất nhiều chân trên Arduino để điều khiển. Tham khảo tại http://arduino.cc/en/Tutorial/Liquid….
Do vậy, để đơn giản hóa công việc, người ta đã tạo ra một loại mạch điều khiển màn hình LCD sử dụng giao tiếp I2C. Nói một cách đơn giản, bạn chỉ tốn … 2 dây để điều khiển màn hình, thay vì 8 dây như cách thông thường.
Sử dụng 2 chân SDA và SCL là 2 chân tín hiệu dùng cho giao tiếp I2C.
Bạn cần kết nối phần cứng đúng theo Sơ đồ sau :
6. Kết hợp đọc nhiệt độ độ – độ ẩm và xuất ra màn hình
a.Code Arduino
#include
#include
#include "DHT.h"
#include
#define DHTPIN D4
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack
void setup()
{
// activate LCD module
lcd.begin (16,2); // for 16 x 2 LCD module
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // set cursor to 0,0
lcd.print("nhiet do :");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("do am :");
}
void loop()
{
delay(1000);
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
lcd.setCursor (11,0);
lcd.print(t);
lcd.setCursor (9,1); // go to start of 2nd line
lcd.print(h);
}
/////////////////////////////////////////////////////