#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
// Konfigurasi pin
const int buttonPin = 33; // Tombol di pin 33
const int relayPin = 32; // Relay di pin 32
const int buzzer = 25; // Buzzer di pin 25
#define DHTPIN 19 // DHT di pin 19
#define DHTTYPE DHT22 // Jenis sensor DHT
// **Perhatikan pin I2C berikut**
#define SDA_PIN 21 // Pin SDA (GPIO21 di ESP32)
#define SCL_PIN 22 // Pin SCL (GPIO22 di ESP32)
// Inisialisasi LCD dan DHT
LiquidCrystal_I2C lcd(0x27, 16, 2); // Jika alamat LCD salah, gunakan I2C Scanner untuk verifikasi
DHT dht(DHTPIN, DHTTYPE);
int relayState = LOW; // Status awal relay
int lastButtonState; // Status tombol sebelumnya
int currentButtonState; // Status tombol saat ini
void setup() {
// Inisialisasi serial monitor
Serial.begin(115200);
// Atur pin I2C untuk ESP32
Wire.begin(SDA_PIN, SCL_PIN);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Tampilkan pesan awal di LCD
lcd.setCursor(0, 0);
lcd.print("LCD Inisialisasi");
delay(1000);
// Inisialisasi DHT
dht.begin();
// Konfigurasi pin lainnya
pinMode(buttonPin, INPUT_PULLUP);
pinMode(relayPin, OUTPUT);
pinMode(buzzer, OUTPUT);
currentButtonState = digitalRead(buttonPin); // Baca status awal tombol
digitalWrite(relayPin, LOW); // Pastikan relay mati saat awal
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Status: OFF");
lcd.setCursor(0, 1);
lcd.print("Suhu: -- C");
}
void loop() {
// Bagian Push Button untuk mengontrol relay dan buzzer
lastButtonState = currentButtonState; // Simpan status tombol sebelumnya
currentButtonState = digitalRead(buttonPin); // Baca status tombol saat ini
if (lastButtonState == HIGH && currentButtonState == LOW) {
relayState = !relayState; // Toggle status relay
digitalWrite(relayPin, relayState); // Atur relay sesuai status
// Tampilkan status di Serial Monitor dan LCD
if (relayState == HIGH) {
Serial.println("Tombol ditekan: LED ON");
tone(buzzer, 500); // Bunyi buzzer dengan frekuensi 500 Hz
delay(200); // Tunggu 200ms
noTone(buzzer); // Matikan buzzer
lcd.setCursor(0, 0);
lcd.print("Status: ON "); // Tampilkan ON di LCD
} else {
Serial.println("Tombol ditekan: LED OFF");
tone(buzzer, 300); // Bunyi buzzer dengan frekuensi 300 Hz
delay(200); // Tunggu 200ms
noTone(buzzer); // Matikan buzzer
lcd.setCursor(0, 0);
lcd.print("Status: OFF"); // Tampilkan OFF di LCD
}
}
// Bagian DHT22 untuk membaca suhu dan kelembapan
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Periksa apakah pembacaan berhasil
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca sensor DHT!");
lcd.setCursor(0, 1);
lcd.print("Sensor Error ");
return;
}
// Tampilkan data suhu dan kelembapan di Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println("°C");
Serial.print("Kelembapan: ");
Serial.print(humidity);
Serial.println("%");
// Tampilkan suhu dan kelembapan di LCD
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C ");
// Logika tambahan: Jika suhu > 30°C atau kelembapan > 70%, nyalakan relay dan buzzer
if (temperature > 30.0 || humidity > 70.0) {
digitalWrite(relayPin, HIGH); // Nyalakan relay
tone(buzzer, 1000); // Buzzer berbunyi
lcd.setCursor(0, 0);
lcd.print("Alarm: ON "); // Tampilkan alarm aktif
} else if (relayState == LOW) { // Pastikan relay mati kecuali tombol mengaktifkan
digitalWrite(relayPin, LOW); // Matikan relay
noTone(buzzer); // Matikan buzzer
}
delay(2000); // Tunggu 2 detik sebelum pembacaan berikutnya
}