#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <LiquidCrystal.h> // Thêm thư viện LiquidCrystal
#define DHTPIN 2 // Chân kết nối cảm biến DHT22
#define DHTTYPE DHT22 // Loại cảm biến DHT22
#define MOTION_SENSOR_PIN 4 // Chân kết nối cảm biến chuyển động
#define LED_PIN 13 // Chân kết nối đèn LED
DHT dht(DHTPIN, DHTTYPE);
// Khai báo chân kết nối màn hình LCD 1602 với ESP32
const int rs = 14; // Chân RS
const int en = 12; // Chân E
const int d4 = 13; // Chân D4
const int d5 = 15; // Chân D5
const int d6 = 16; // Chân D6
const int d7 = 17; // Chân D7
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Khởi tạo đối tượng LiquidCrystal
void setup() {
Serial.begin(9600);
pinMode(MOTION_SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
dht.begin();
// Khởi tạo màn hình LCD 1602
lcd.begin(16, 2); // 16 cột, 2 hàng
lcd.setCursor(0, 0);
lcd.print("Hello, LCD 1602!");
delay(2000);
lcd.clear();
}
void loop() {
// Đọc dữ liệu từ cảm biến nhiệt độ và độ ẩm
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Kiểm tra nếu đọc dữ liệu thành công
if (!isnan(humidity) && !isnan(temperature)) {
// Hiển thị dữ liệu lên màn hình LCD 1602
lcd.setCursor(0, 0);
lcd.print("Nhiet do: " + String(temperature) + " C");
lcd.setCursor(0, 1);
lcd.print("Do am: " + String(humidity) + " %");
// Kiểm tra nếu nhiệt độ hoặc độ ẩm vượt quá ngưỡng
if (temperature > 30.0 || humidity > 70.0) {
digitalWrite(LED_PIN, HIGH); // Bật đèn LED
} else {
digitalWrite(LED_PIN, LOW); // Tắt đèn LED
}
}
// Kiểm tra cảm biến chuyển động
int motionValue = digitalRead(MOTION_SENSOR_PIN);
if (motionValue == HIGH) {
digitalWrite(LED_PIN, HIGH); // Bật đèn LED nếu có chuyển động
} else {
digitalWrite(LED_PIN, LOW); // Tắt đèn LED nếu không có chuyển động
}
delay(1000); // Đợi một chút trước khi đọc lại dữ liệu
}