#define BLYNK_TEMPLATE_ID "TMPL65ihoYDVX"
#define BLYNK_TEMPLATE_NAME "LampuESP32"
#define BLYNK_AUTH_TOKEN "hbc9Zg2UskvRKWDFzLWGJY3XSfn2SwDJ"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define LDRanalog 34
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
#define button1_pin 26
#define relay1_pin 13
int relay1_state = 0;
int val = 0;
int inputPin = 17;
int pirState = LOW;
int buzzerPin = 15;
#define button1_vpin V1
const float GAMMA = 0.7;
const float RL10 = 50;
const int led =6;
const int pir =19;
BLYNK_CONNECTED() {
Blynk.syncVirtual(button1_vpin);
}
BLYNK_WRITE(button1_vpin) {
relay1_state = param.asInt();
digitalWrite(relay1_pin, relay1_state);
}
void setup()
{
// Debug console
Serial.begin(115200);
pinMode(button1_pin, INPUT_PULLUP);
pinMode(relay1_pin, OUTPUT);
digitalWrite(relay1_pin, HIGH);
Blynk.begin(auth, ssid, pass);
dht.begin();
timer.setInterval(2500L, sendSensor);
pinMode(2,OUTPUT);
pinMode(led,OUTPUT);
pinMode(pir,INPUT);
pinMode(LDRanalog, INPUT);
Serial.begin(9600);
pinMode(inputPin, INPUT);
pinMode(buzzerPin, OUTPUT); // Set pin buzzer sebagai output
Serial.begin(9600);
}
void loop()
{
Blynk.run();
timer.run();
listen_push_buttons();
int nilaiADClux = analogRead(LDRanalog);
Serial.print("ADC = ");
Serial.println(nilaiADClux);
float voltage = nilaiADClux * 5/4095.0;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
if(lux<=200)
{
digitalWrite(2, HIGH);
}
else
{
digitalWrite(2, LOW);
}
Serial.print("Lux = ");
Serial.println(lux);
const int IP=digitalRead(pir);
Serial.println(IP);
delay(100);
if(IP==1){
digitalWrite(led,HIGH);
delay(1000);
}
else{
digitalWrite(led,LOW);
delay(1000);
}
val = digitalRead(inputPin); // Baca status dari sensor PIR
if (val == HIGH) { // Jika gerakan terdeteksi
if (pirState == LOW) { // Jika sebelumnya tidak ada gerakan
Serial.println("Gerakan Terdeteksi!");
digitalWrite(buzzerPin, HIGH); // Nyalakan buzzer
pirState = HIGH; // Update status PIR
}
} else {
if (pirState == HIGH) { // Jika sebelumnya ada gerakan
Serial.println("Gerakan Tidak Terdeteksi");
digitalWrite(buzzerPin, LOW); // Matikan buzzer
pirState = LOW; // Update status PIR
}
}
}
void sendSensor() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V0, t);
Serial.print("Temperature : ");
Serial.print(t);
Serial.print(" Humidity : ");
Serial.println(h);
}
void listen_push_buttons(){
if(digitalRead(button1_pin) == LOW){
delay(200);
control_relay(1);
Blynk.virtualWrite(button1_vpin, relay1_state); //update button state
}
}
void control_relay(int relay){
if(relay == 1){
relay1_state = !relay1_state;
digitalWrite(relay1_pin, relay1_state);
Serial.print("Relay1 State = ");
Serial.println(relay1_state);
delay(50);
}
}