#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
// Sensor LDR
const int LDRPin = 34; // Menghubungkan sensor LDR ke pin GPIO34 pada ESP32
// Sensor suhu DS18B20
const int DS18B20_Pin = 22; // Menghubungkan sensor DS18B20 ke pin GPIO22 pada ESP32
OneWire oneWire(DS18B20_Pin);
DallasTemperature sensors(&oneWire);
// Servo
Servo myServo;
const int servoPin = 21; // Menghubungkan servo ke pin GPIO21 pada ESP32
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, dengan 16 kolom dan 2 baris
void setup() {
Serial.begin(9600);
pinMode(LDRPin, INPUT);
sensors.begin();
myServo.attach(servoPin);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Menghidupkan backlight LCD
lcd.setCursor(0, 0); // Posisi kursor di awal LCD
lcd.print("Monitoring:");
}
void loop() {
// Sensor LDR
int LDRValue = analogRead(LDRPin);
lcd.setCursor(0, 1);
lcd.print("Cahaya: ");
lcd.print(LDRValue < 500 ? "Mendung" : "Cerah");
// Sensor suhu DS18B20
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
lcd.setCursor(0, 2);
lcd.print("Suhu: ");
lcd.print(tempC);
lcd.print(" C ");
// Kontrol servo berdasarkan nilai sensor LDR
if (LDRValue < 500) {
myServo.write(0); // Jika gelap, posisi servo 0 derajat (Atap Tertutup)
lcd.setCursor(0, 3);
lcd.print("Atap: Tertutup ");
} else {
myServo.write(90); // Jika terang, posisi servo 90 derajat (Atap Terbuka)
lcd.setCursor(0, 3);
lcd.print("Atap: Terbuka ");
}
delay(1000); // Berhenti sejenak untuk membaca nilai sensor secara periodik
}