// Tiga parameter di bawah ini biasanya ada saat kita membuat template baru
#define BLYNK_TEMPLATE_ID "TMPL6BfewT6U0"
#define BLYNK_TEMPLATE_NAME "IoT"
#define BLYNK_AUTH_TOKEN "t4RohC4iGEvsUQEr-Ge1_YT4NitTomOI"
#include <WiFi.h> // Library WiFi
#include <BlynkSimpleEsp32.h> // Library BlynkESP32
#include <DHTesp.h> // Library untuk sensor DHT
#include <Wire.h>
#include <ESP32Servo.h>
char ssid[] = "Wokwi-GUEST"; // Nama WiFi yang digunakan
char pass[] = ""; // Password WiFi yang digunakan
BlynkTimer timer; // Untuk push data dibutuhkan Blynk timer (untuk code push data dapat dilihat di contoh Blynk)
Servo servo; // Initialize servo
// SENSOR DHT
const int DHT_PIN = 15; // Pin signal DHT
byte led = 5; // Pin LED adalah D5
DHTesp dhtSensor; // Buat objek bernama dhtSensor
float suhu, kelembaban; // Variabel suhu dan kelembaban
const int servoPin = 14;
#define trigPin 13 // initialize pin 19 for HCSR04 trigger pin
#define echoPin 12 // initialize pin 23 for HCSR04 Echo pin
int pos = 0;
void setup()
{
Serial.begin(115200); // Menginisiasi serial monitor
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // Menginisiasi Blynk
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Mendefine dht sensor (DHT22 merupakan jenis DHT yang digunakan)
timer.setInterval(1000L, myTimerEvent); // Mengirim data tiap satu detik
pinMode(led, OUTPUT);
servo.attach(servoPin);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.write(0);
}
void myTimerEvent()
{
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // Inisiasi pengambilan data
suhu = data.temperature; // Mendefinisikan variabel suhu
kelembaban = data.humidity; // Mendefinisikan variabel kelembaban
Serial.println("Suhu: " + String(suhu, 1) + "C");
Serial.println("Kelembaban: " + String(kelembaban, 1) + "%");
// KODE UNTUK MENGIRIM NOTIFIKASI
if (suhu > 35) // Jika suhu lebih dari 35, maka...
{
digitalWrite(led, HIGH);
Serial.println("Suhu Naik");
Blynk.virtualWrite(V2, HIGH);
Blynk.logEvent("high_temp"); // Blynk akan mengirimkan notifikasi ke Gmail, dengan event "suhu_naik"
}
else {
digitalWrite(led, LOW);
Blynk.virtualWrite(V2, LOW);
}
delay(1000);
Blynk.virtualWrite(V0, suhu); // Mengirim data suhu menurut pin V0 di Blynk
Blynk.virtualWrite(V1, kelembaban); // Mengirim data kelembaban ke pin V1
if (distance > 20) {
servo.write(180);
Blynk.virtualWrite(V3, distance); // Mengirim data jarak ke pin V3 di Blynk
Blynk.virtualWrite(V4, servoPin);
Serial.print(distance);
} else {
servo.write(0);
Blynk.virtualWrite(V3, distance); // Mengirim data jarak ke pin V3 di Blynk
Blynk.virtualWrite(V4, servoPin);
}
}
BLYNK_WRITE(V2) // V2, sesuai dengan pin Blynk yang ingin digunakan
{
int pinValue = param.asInt();
Serial.print("V2 Switch value is: ");
Serial.println(pinValue);
digitalWrite(led, pinValue);
}
void loop()
{
Blynk.run(); // Menjalankan Blynk
timer.run(); // Menjalankan timer
}