#define BLYNK_TEMPLATE_ID "TMPL6nFj3l3Op"
#define BLYNK_TEMPLATE_NAME "SISTEM IRIGASI"
#define BLYNK_AUTH_TOKEN "COYZNav5D3K_dWJFQSobMsJZ4QBoJMGZ"
#define BLYNK_PRINT Serial
//#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
//======================================
//inisialisaisi pin esp32
//PIN LDR
#define LDR 27
//PIN SENSOR TANAH
#define ST 26
//PIN LED INDIKATOR PENGUSIR TIKUS ON
#define PIPT 5
//PIN LED INDIKATOR POMPA ON
#define PIP 16
//PIN LED INDIKATOR LED UV ON
#define PIL 5
//PIN RELAY LED UV
#define RL 12
//PIN RELAY POMPA
#define RP 13
//PIN BUZZER PENGUSIR TIKUS
#define BZR 14
//PIN TOMBOL ON/OFF POMPA
#define TBP 15
//PIN TOMBOL ON/OFF LED UV
#define TBL 0
//PIN TOMBOL ON/OFF PENGUSIR TIKUS
#define TBPT 2
//PIN RESET WIFI
#define RSTWF 16
//variabel perubah data
int currentState1;
int currentState2;
int currentState3;
int lastState1 = HIGH;
int lastState2 = HIGH;
int lastState3 = HIGH;
int State1 = LOW;
int State2 = LOW;
int State3 = LOW;
//=====================================
//PIN VIRTUAL INDIKATOR ON PENGUSIR TIKUS & SAKLAR ON
#define IPT V0
//PIN VIRTUAL INDIKATOR ON POMPA & SAKLAR ON
#define IP V1
//PIN VIRTUAL INDIKATOR ON LED UV & SAKAR ON
#define IL V2
//PIN VIRTUAL OTOMATIS POMPA
#define OP V3
//PIN VIRTUAL OTOMATIS LED UV
#define OL V4
//WiFiManager, Inisialisasi wifi lokal. Setelah selesai di atur, tidak kan memengulang pegaturan
//Buat objek WiFIManager sebagai "wm"
//WiFiManager wm;
//inisialaisai liblary blynktimer
BlynkTimer timer;
//variabel autantifikasi mengambil dari blynk token
char auth[] = BLYNK_AUTH_TOKEN;
//varibel tombol
int VIPT,VIP,VIL,VOP,VOL;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//------------------------------------------------------------------------------
//fungsi ini dipanggil setiap kali prangkat terhubung ke Blynk.Cloud
// meminta status terkini dari server
BLYNK_CONNECTED() {
Blynk.syncVirtual(IPT);
Blynk.syncVirtual(IP);
Blynk.syncVirtual(IL);
Blynk.syncVirtual(OP);
Blynk.syncVirtual(OL);
}
//--------------------------------------------------------------------------
// fungsi ini dipanggil setiap kali status pin virtual berubah
//yaitu saat web push beralih dari Blynk App atau Web Dashboard
BLYNK_WRITE(IPT) {
VIPT = param.asInt();
if(VIPT == 1){
tone(BZR,45);
digitalWrite(PIPT,1);
}
else{
tone(BZR,0);
digitalWrite(PIPT,0);
}
}
//--------------------------------------------------------------------------
BLYNK_WRITE(IP) {
VIP = param.asInt();
if(VIP == 1){
digitalWrite(PIP,1);
digitalWrite(RP,1);
}
else{
digitalWrite(PIP,0);
digitalWrite(RP,0);
}
}
//--------------------------------------------------------------------------
BLYNK_WRITE(IL) {
VIL = param.asInt();
if(VIL == 1){
digitalWrite(PIL,1);
digitalWrite(RL,1);
}
else{
digitalWrite(PIL,0);
digitalWrite(RL,0);
}
}
//--------------------------------------------------------------------------
BLYNK_WRITE(OP) {
VOP = param.asInt();
}
//-------------------------------------------------------------------
BLYNK_WRITE(OL) {
VOL = param.asInt();
}
//====================================================================
void setup()
{
// memulai serial monitor
Serial.begin(115200);
// buat variabel res
//bool res;
//memasuk kan fungsi auto koneksi ke dalam variabel res
// res = wm.autoConnect("SISTEM IRIGASI IOT");
//res = wm.autoConnect("FEEDER IOT","password"); // password protected ap
// menghubungkan secara otomatis menggunkan SSID & PASSWORD yang disimpan
//jika koneksi gagal penyetelan akses Wifi diatifkan dengan nama "FEEDER IOT"
// if(res){
// Serial.println("connected...yeey :)");
// }
// else {
// Serial.println("Configportal running");
// }
//--------------------------------------------------------------------
// inisialisasi pinMode esp32
//PINMODE TOMBOL POMPA
pinMode(TBP, INPUT_PULLUP);
//PINMODE TOMBOL LED UV
pinMode(TBL, INPUT_PULLUP);
//PINMODE TOMBOL PENGUSIR TIKUS
pinMode(TBPT, INPUT_PULLUP);
//PINMODE INDIKATOR PENGUSIR TIKUS
pinMode(PIPT, OUTPUT);
//PINMODE INDIKATOR POMPA
pinMode(PIP, OUTPUT);
//PINMODE INDIKATOR LED UV
pinMode(PIL, OUTPUT);
//PINMODE RELAY LED UV
pinMode(RL, OUTPUT);
//PINMODE RELAY POMPA
pinMode(RP, OUTPUT);
//PINMODE BUZZER PENGUSIR TIKUS
pinMode(BZR, OUTPUT);
//PINMODE RESET WIFI
pinMode(RSTWF, INPUT);
//PINMODE LDR
pinMode(LDR, INPUT);
//PINMODE SENSOR TANAH
pinMode(ST, INPUT);
//--------------------------------------------------------------------
//inisalisai jika setup led esp dan virtual off
digitalWrite(PIPT,0); //INDIKATOR PENGUSIR TIKUS OFF
digitalWrite(PIP,0); //INDIKATOR POMPA
digitalWrite(PIL,0); //INDIKATOR LED UV
digitalWrite(RL,1); //RELAY LED UV
digitalWrite(RP,0); //RELAY POMPA
digitalWrite(BZR,0); //BUZZER PENGUSIR TIKUS
//-------------------------------------------------------- ------------
//memulai Blynk
Blynk.begin(auth, ssid, pass);
//Blynk.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());
}
void loop()
{
//jika tombol reset pin di tekan
//wifi akan mereset
//dan memulai ulang alat
if( digitalRead(RSTWF) == 0 ){
Serial.println("Button Held");
Serial.println("Erasing Config, restarting");
// wm.resetSettings();
ESP.restart();
}
//blynk berjalan & timer berjalan
Blynk.run();
timer.run();
//fingsi tombol di alat
fungsi_tombol();
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void fungsi_tombol(){
//--------------------------------------------------------------------------
//
if(digitalRead(VOP) == 1){
if(digitalRead(LDR) == 0){
Blynk.virtualWrite(VIP,1);
}
else{
Blynk.virtualWrite(VIP,0);
}
}
else{
currentState1 = digitalRead(TBP);
if (lastState1 == HIGH && currentState1 == LOW) {
State1 = !State1;
Blynk.virtualWrite(VIP, State1);
}
lastState1 = currentState1;
delay(50);
}
//--------------------------------------------------------------------------
if(digitalRead(VOL) == 1){
if(digitalRead(ST) == 0){
Blynk.virtualWrite(VIL,1);
}
else{
Blynk.virtualWrite(VIL,0);
}
}
else{
currentState2 = digitalRead(TBL);
if (lastState2 == HIGH && currentState2 == LOW) {
State2 = !State2;
Blynk.virtualWrite(VIL, State2);
}
lastState2 = currentState2;
delay(50);
}
currentState3 = digitalRead(TBPT);
if (lastState3 == HIGH && currentState3 == LOW) {
State3 = !State3;
Blynk.virtualWrite(VIPT, State3);
}
lastState3 = currentState3;
delay(50);
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM