#define BLYNK_TEMPLATE_ID "TMPL6V92g09Nu"
#define BLYNK_TEMPLATE_NAME "UTP IOT"
#define BLYNK_AUTH_TOKEN "HfMAhXFa2vErVTbjR84nalXCcGpuO278"
#define BLYNK_PRINT Serial
#include <Ultrasonic.h> //Library untuk ultrasonic (sensor jarak hama)
#include <WiFi.h> //Library untuk connect ke wifi
#include <WiFiClient.h> //Library untuk connect ke wifi
#include <BlynkSimpleEsp32.h> //Library Blynk ke Esp32
char auth[] = BLYNK_AUTH_TOKEN; //sebagai username & password wifi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer; //timer untuk menjadwalkan pengiriman data sensor secara berkala.
Ultrasonic ultrasonic(0,4); //pada ultrasonic disambungkan ke pin 2 & 4
int LED1 = 14; //LED 1 (merah) pada pin 12
int LED2 = 12; //LED 2 (biru) pada pin 14
int LED3 = 13;
int buzzer = 33; //buzzer disambungkan ke pin 33
int switch = 0; //variabel untuk mengontrol buzzer
void myTone(int pin){ //Fungsi untuk menyalakan buzzer
ledcAttachPin(pin, 0);
ledcWriteNote(0, NOTE_F, 8);
}
void myNoTone(int pin){ //Fungsi untuk mematikan buzzer
ledcDetachPin(pin);
}
BLYNK_WRITE(V4){ //Mengubah nilai switchBuzz berdasarkan yang diterima dari widget
int pin_value = param.asInt();
Serial.println(pin_value);
if(pin_value == 1){
switch = 1; //apabila bernilai 1 berarti ON
} else {
switch = 0; //bernilai 0 berarti OFF
}
}
void sendSensor() { //mengukur jarak dengan ultrasonik dan mengirim ke Blynk
delay(1000);
double distance = ultrasonic.read(CM);
Blynk.virtualWrite(V3, distance); //V3 adalah gauge yang menandakan jarak
Serial.print("Jarak : ");
Serial.print(distance);
Serial.println(" cm");
if(distance <= 200){ //apabila <= 200cm maka LED & Buzzer hidup
if(switch == 1){ //jika switch button ON maka lampu baru menyala
digitalWrite(LED1, HIGH); //LED merah hidup
digitalWrite(LED2, HIGH); //LED biru hidup
digitalWrite(LED3, HIGH);
Serial.println("Hama terdeteksi kurang dari 2 meter");
Blynk.virtualWrite(V0, 1); //agar LED pada blynk hidup
Blynk.virtualWrite(V2, 1);
Blynk.virtualWrite (SESUAIKAN, 0);
Blynk.virtualWrite(V1, "Hama Terdeteksi");
myTone(buzzerPin); //agar buzzer hidup
Blynk.logEvent("notifikasi", "Ada hama terdeteksi kurang dari 2meter");
//mengirim notifikasi ke email & aplikasi blynk
} else {
digitalWrite(LED1, LOW); //led mati apabila switch button OFF
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
Blynk.virtualWrite(V0, 0); //led pada blynk mati apabila switch OFF
Blynk.virtualWrite (V2, 0);
Blynk.virtualWrite (SESUAIKAN, 0);
myTone(buzzer); //buzzer tetap menyala
}
}else{
digitalWrite(LED1, LOW); //led mati apabila > 2 meter
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
Serial.println("Tidak ada hama dalam radius");
Blynk.virtualWrite(V0, 0); //led pada blynk mati (bernilai 0)
Blynk.virtualWrite (V2, 0);
Blynk.virtualWrite (SESUAIKAN, 0);
Blynk.virtualWrite(V1, "Aman"); //mencetak tulisan pada label di blynk
myNoTone(buzzer); //buzzer mati
}
}
void setup() { // inisialisasi awal
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
delay(1000);
Blynk.begin(auth, ssid, pass);
timer.setInterval(2500L, sendSensor);
}
void loop() { // dijalankan terus menerus
delay(1000);
sendSensor();
timer.run();
}