#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#define DHT_PIN 15 // Chân kết nối cảm biến DHT
#define PIR_PIN 12 // Chân kết nối cảm biến PIR motion
#define LED_PIN 32 // Chân kết nối LED
#define LCD_ADDRESS 0x27 // Địa chỉ I2C của màn hình LCD
#define LCD_COLS 16 // Số cột của màn hình LCD
#define LCD_ROWS 2 // Số hàng của màn hình LCD
DHTesp dht;
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
void setup() {
//Cài đặt kênh serial
Serial.begin(115200);
Serial.println("ESP32 collecting sensors data");
dht.setup(DHT_PIN, DHTesp::DHT22);
pinMode(PIR_PIN, INPUT); //Cấu hình đầu vào PIR_PIN
pinMode(LED_PIN, OUTPUT); //Cấu hình đầu ra LED_PIN
lcd.init(); //Khởi tạo lcd
lcd.print("ESP32 collecting data ..."); //In ra màn hình khởi động
delay(1000);
lcd.begin(LCD_COLS, LCD_ROWS); //In ra thông tin thu được sensor
lcd.backlight();
lcd.print("Temp:");
lcd.setCursor(0, 1);
lcd.print("Humidity:");
}
void loop() {
// Đọc dữ liệu từ cảm biến DHT
TempAndHumidity data = dht.getTempAndHumidity();
// Hiển thị dữ liệu lên màn hình LCD
lcd.setCursor(6, 0);
lcd.print(String(data.temperature, 2));
lcd.print("C");
lcd.setCursor(10, 1);
lcd.print(String(data.humidity, 1));
lcd.print("%");
// Đọc trạng thái từ cảm biến PIR motion
int motion = digitalRead(PIR_PIN);
// Bật/tắt LED dựa trên phát hiện chuyển động
if (motion == HIGH) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
// Gửi log dữ liệu và thông báo tương ứng qua Serial
Serial.print("Temperature: ");
Serial.print(String(data.temperature, 2));
Serial.print(" °C, Humidity: ");
Serial.print(String(data.humidity, 1));
Serial.print(" %, Motion: ");
Serial.println(motion ? "Detected" : "Not detected");
delay(2000); // Đợi 2 giây trước khi đọc dữ liệu tiếp theo
}