#include <ESP32Servo.h>
#include <DHT.h>
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
#define DHTPIN 15
#define DHTTYPE DHT22
#define TRIG_PIN 5
#define ECHO_PIN 18
#define SERVO_PIN 4
#define DISTANCE_THRESHOLD 15
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
const int DHT_PIN = 15;
DHT dht (DHTPIN, DHTTYPE);
DHTesp dhtSensor;
Servo servo;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
float duration_us, distance_cm;
void setup() {
Serial.begin (9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
servo.write(0);
dht.begin();
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
}
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.075 * duration_us;
if (distance_cm < DISTANCE_THRESHOLD)
servo.write(0);
else
servo.write(90);
Serial.println("Suhu = ");
Serial.print(t);
Serial.println(" C");
Serial.println("Kelembaban = ");
Serial.print(h);
Serial.println(" %");
Serial.println("Temp: " + String(data.temperature, 1) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
lcd.setCursor(0, 0);
lcd.print(" Temp: " + String(data.temperature, 1) + "\xDF"+"C ");
lcd.setCursor(0, 1);
lcd.print(" Humidity: " + String(data.humidity, 1) + "% ");
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(1000);
}