#define BLYNK_TEMPLATE_ID "TMPL6k1epCNhN"
#define BLYNK_TEMPLATE_NAME "fyp home automation"
#define BLYNK_AUTH_TOKEN "f48GaDDQqV4zCdZhDPzsoSbJs8NFGMXF"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
// Blynk authentication
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // wifi
char pass[] = ""; // password wifi
// define semua pin sini
#define PIR_PIN 2
#define FAN_PIN 5
#define LED_PIN 14
#define LDR_PIN 13
#define DHT_PIN 15
#define RELAY 21
DHTesp dht;
BlynkTimer timer;
//manual control?? more like pausing rn
bool manualLEDControl = false;
bool tempControl = false;
// untuk led brightness (tapi tak berapa jadi)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int getLEDBrightness() {
int ldrValue = analogRead(LDR_PIN);
// Map LDR value (0-4095) to LED brightness (0-255)
int brightValue = map(ldrValue, 0, 4095, 100, 0);
int ledBrightness = map(brightValue, 0, 100, 255, 100); // Inverse mapping
return ledBrightness;
}
// send temp to blynk
void sendDHTdata() {
float temp = dht.getTemperature();
// data view
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println("C ");
if(temp >= 27) {
digitalWrite(FAN_PIN, HIGH);
Serial.println("Fan ON");
} else {
digitalWrite(FAN_PIN, LOW);
Serial.println("Fan OFF");
}
Blynk.virtualWrite(V0, temp); // pin V0 in Blynk
}
//manual FAN control(red led ah)
BLYNK_WRITE(V3) {
int buttonState = param.asInt();
tempControl = (buttonState == 1);
pinMode(FAN_PIN, OUTPUT);
if (tempControl = 1) {
digitalWrite(FAN_PIN, HIGH);
Serial.println("Fan ON (Manual)");
} else {
digitalWrite(FAN_PIN, LOW);
Serial.println("Fan OFF (Manual)");
}
}
//relay appl
BLYNK_WRITE(V1) {
int SW_relay = param.asInt();
if (SW_relay == 1) {
digitalWrite(RELAY, HIGH);
Serial.println("Relay ON");
Blynk.virtualWrite(V1, HIGH);
}
else {
digitalWrite(RELAY, LOW);
Serial.println("Relay OFF");
Blynk.virtualWrite(V1, LOW);
}
}
void setup() {
pinMode(PIR_PIN, INPUT); // Set PIR pin as input
pinMode(LED_PIN, OUTPUT); // Set LED pin as output
pinMode(FAN_PIN, OUTPUT);
pinMode(RELAY, OUTPUT);
Serial.begin(115200);
dht.setup(DHT_PIN, DHTesp::DHT22); // Initialize DHT sensor
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, sendDHTdata); // Send DHT data every 2 seconds
}
void loop() {
Blynk.run();
timer.run();
if (!manualLEDControl) {
int pirState = digitalRead(PIR_PIN);
if (pirState == HIGH) {
// Motion detected
int brightness = getLEDBrightness();
analogWrite(LED_PIN, brightness); // Set LED brightness based on LDR value
Serial.print("Motion detected! LED brightness: ");
Serial.println(brightness);
} else {
// No motion detected
analogWrite(LED_PIN, 0); // Turn off LED
Serial.println("No motion detected. LED off.");
}
}
delay(2000); // delay serial 2 saat
}