#define BLYNK_TEMPLATE_ID "TMPL6Zh4l2vJF"
#define BLYNK_DEVICE_NAME "Jemuran Otomatis"
char auth[] = "itAg3EaAtR6RzXAwvzqY885yY8FBQefK";
char ssid[] = "Wokwi-GUEST"; // masukan nama WiFi
char pass[] = ""; // pass wifi
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#include "DHT.h"
#define SERVO_PIN 32 // ESP32 pin GIOP26 connected to servo motor
#define DHTPIN 33
const int ldrpin = 35;
#define DHTTYPE DHT22
BlynkTimer timer;
Servo servo;
DHT dht(DHTPIN, DHTTYPE);
boolean notif_buka = true;
boolean notif_tutup = true;
boolean auto_mode = true;
int derajat_tutup = 0; //For Derajat tutup servo
int derajat_buka = 180; //for derajar buka servo
void setup() {
Serial.begin(115200);
servo.attach(SERVO_PIN); // attaches the servo on ESP32 pin
servo.write(derajat_tutup);
dht.begin();
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, postData);
Blynk.virtualWrite(V3, 1);
}
void loop() {
Blynk.run();
timer.run();
}
void postData() {
int temp = dht.readTemperature();
int cahaya = analogRead(ldrpin);
cahaya = map(cahaya, 0, 4095, 100, 0);
Serial.println("TEMP = " + String(temp));
Serial.println("Intensitas Cahaya = " + String(cahaya) + "%");
Blynk.virtualWrite(V1, cahaya);
Blynk.virtualWrite(V2, temp);
if (auto_mode) {
//mode auto
if (temp > 25 && cahaya > 30) {
servo.write(derajat_buka); //kondisi cerah
Blynk.virtualWrite(V4, 1);
Blynk.virtualWrite(V0, "TERBUKA");
if (notif_buka) {
Blynk.logEvent("notif", "Perhatian, atap kondisi terbuka !!");
notif_buka = false;
notif_tutup = true;
}
} else if (temp < 25 && cahaya < 30) {
servo.write(derajat_tutup); // kondisi mendung atau malam
Blynk.virtualWrite(V4, 0);
Blynk.virtualWrite(V0, "TERTUTUP");
if (notif_tutup) {
Blynk.logEvent("notif", "Perhatian, atap kondisi tertutup !!");
notif_buka = true;
notif_tutup = false;
}
}
}
}
BLYNK_WRITE(V3) {
int mode = param.asInt();
if (mode == 0) {
auto_mode = false;
} else {
auto_mode = true;
}
Serial.println("MODE KONTROL = " + String(auto_mode));
}
BLYNK_WRITE(V4) {
int kontrol_atap = param.asInt();
if (!auto_mode) {
if (kontrol_atap == 0) {
servo.write(derajat_tutup); //tutup atap manual
Blynk.virtualWrite(V0, "TERTUTUP");
} else {
servo.write(derajat_buka); // buka atap manual
Blynk.virtualWrite(V0, "TERBUKA");
}
}
}