#define BLYNK_TEMPLATE_ID "TMPL64uSwdpX1"
#define BLYNK_TEMPLATE_NAME "DHT22"
#define BLYNK_AUTH_TOKEN "Iz3cWMl4m7vsP0gpwRx900t88X4cCYim"
#define Blynk_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
int pirState = LOW;
int val = 0;
const int pinDHT = 25;
const int pinEcho = 2;
const int pinTrigger = 15;
const int ledMerah = 13;
const int ledKuning = 12;
const int ledHijau = 14;
const int ledPin = 18;
const int inputPin = 19;
DHTesp dhtSensor;
BlynkTimer timer;
char auth[] = "Iz3cWMl4m7vsP0gpwRx900t88X4cCYim";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void sendSensor() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
// Mengirim data ke Blynk
Blynk.virtualWrite(V1, data.temperature);
Blynk.virtualWrite(V2, data.humidity);
if (data.temperature < 32 && data.humidity < 65) {
digitalWrite(ledHijau, HIGH);
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, LOW);
} else if (data.temperature > 32 && data.humidity < 65) {
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
digitalWrite(ledMerah, LOW);
} else if (data.temperature < 32 && data.humidity > 65) {
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
digitalWrite(ledMerah, LOW);
} else {
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, HIGH);
}
}
float readUltrasonic() {
digitalWrite(pinTrigger, LOW);
delayMicroseconds(2);
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
int duration = pulseIn(pinEcho, HIGH);
float dist_cm = duration * 0.034 / 2;
return dist_cm;
}
void sendData() {
float waterLevel = readUltrasonic();
Serial.print("Water Level: ");
Serial.println(waterLevel, 2);
Blynk.virtualWrite(V0, waterLevel);
}
void motionSensor() {
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Gerakan Terdeteksi");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH) {
// we have just turned off
Serial.println("Gerakan Tidak Terdeteksi");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
dhtSensor.setup(pinDHT, DHTesp::DHT22);
pinMode(pinEcho, INPUT);
pinMode(pinTrigger, OUTPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
timer.setInterval(2000L, sendSensor);
timer.setInterval(2000L, sendData);
timer.setInterval(1000L, motionSensor);
}
void loop() {
Blynk.run();
timer.run();
}