#include <DHTesp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#define DHT_PIN 4
#define TRIG_PIN 5
#define ECHO_PIN 18
#define SERVO_PIN 19
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myServo;
// Hàm đọc khoảng cách
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000);
float distance = duration * 0.0343 / 2;
return distance;
}
void setup() {
Serial.begin(115200);
// DHT22
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// LCD
lcd.init();
lcd.backlight();
// HC-SR04
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Servo
myServo.attach(SERVO_PIN);
myServo.write(0);
// Hiển thị ban đầu
lcd.setCursor(0, 0);
lcd.print("CHAO MUNG");
lcd.setCursor(0, 1);
lcd.print("CHU NHAN");
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperature = data.temperature;
float distance = readDistanceCM();
Serial.print("Nhiet do: ");
Serial.println(temperature);
Serial.print("Khoang cach: ");
Serial.println(distance);
// Điều kiện mở cửa
if (temperature > 37 && distance < 20) {
// Mở cửa
myServo.write(90);
} else {
// Đóng cửa
myServo.write(0);
}
delay(1000);
}