/*======================================================================
      PROGRAM MENYALAKAN 3 LED & MEMONITOR 2 SENSOR MELALUI BLYNK
                berbasis kepada board ESP8266 Wemos D1_Mini
------------------------------------------------------------------------
Led merah dikoneksi ke pin 12, Led kuning ke pin 13, Led biru ke pin 14 
Sw1 (Sensor_1) dikoneksi ke pin 4, Sw2 (Sensor_2) ke pin 5
Lihat datasheet untuk menentukan pin pada ESP8266 Wemos D1_Mini
======================================================================*/
#define BLYNK_TEMPLATE_ID "TMPL6jhX6Z2bY" 
#define BLYNK_TEMPLATE_NAME "SmartHome" 
#define BLYNK_AUTH_TOKEN "Szx7qNhAlzZtfE0XZZWzj3_BXXdGRNlU"

#include <WiFi.h>
#include <BlynkSimpleEsp32.h> //dibuka jika menggunakan ESP32
//#include <BlynkSimpleEsp8266.h> //dibuka jika menggunakan ESP8266

char auth[] = BLYNK_AUTH_TOKEN;
//Nama dan Password WiFi
//char ssid[] = "WIFI-C545A5DC"; //nama hotspot yang digunakan
//char pass[] = "batukali";      //password hotspot yang digunakan
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

//deklarasi Pin yang digunakan
#define Led1 12  //merah
#define Led2 13  //kuning
#define Led3 14  //biru
#define Sw1  4  // Pin sensor
#define Sw2  5  // Pin sensor
int sensorValue1, sensorValue2 ; 

BlynkTimer timer; //gunakan fungsi timer yang tersedia pad Blynk

void sendSensor() {
  sensorValue1 = digitalRead(Sw1); sensorValue1 = !sensorValue1;
  sensorValue2 = digitalRead(Sw2); sensorValue2 = !sensorValue2;
  //-----------------------------------------------------------------
  Blynk.virtualWrite(V3, sensorValue1); //kirim data ke VirtualPin V3
  Blynk.virtualWrite(V4, sensorValue2); //kirim data ke VirtualPin V4
}

BLYNK_WRITE(V0) {     //fungsi terima data dari VirtualPin V0
  int pinValue0 = param.asInt(); //salin data yg masuk melalui V0
  if (pinValue0 == 1)  { digitalWrite(Led1, HIGH); } //nyalakan Led1
  else {  digitalWrite(Led1, LOW);  }                //matikan Led1
}

BLYNK_WRITE(V1) {     //fungsi terima data dari VirtualPin V1
  int pinValue1 = param.asInt(); //salin data yg masuk melalui V1
  if (pinValue1 == 1)  { digitalWrite(Led2, HIGH); } //nyalakan Led2
  else {  digitalWrite(Led2, LOW);  }                //matikan Led2
}

BLYNK_WRITE(V2) {   //fungsi terima data dari VirtualPin V2
  int pinValue2 = param.asInt(); //salin data yg masuk melalui V2
  if (pinValue2 == 1)  { digitalWrite(Led3, HIGH); } //nyalakan Led3
  else {  digitalWrite(Led3, LOW);  }                //matikan Led3
}

void setup()
{
  Serial.begin(115200);       //aktifkan UART dg kecepatan 115200 bps
  pinMode(Led1, OUTPUT);      //Setting pin 12 sebagai Output
  pinMode(Led2, OUTPUT);      //Setting pin 13 sebagai Output
  pinMode(Led3, OUTPUT);      //Setting pin 14 sebagai Output
  pinMode(Sw1, INPUT_PULLUP); //Setting pin 4  sebagai Input_pullup
  pinMode(Sw2, INPUT_PULLUP); //Setting pin 5  sebagai Input_pullup
  Blynk.begin(auth,ssid,pass);//aktifkan library Blynk dg 3 parameter
  timer.setInterval(1500L, sendSensor); //set timer 1500 detik
}

void loop()  {
  Blynk.run(); //jalankan fungsi Blynk
  timer.run(); //jalankan fungsi timer
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
gnd1:GND
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
gnd2:GND
gnd3:GND