/*=====================================================================
Template Program Latihan ESP32 dan Blynk Komunikasi Data
Dibuat Oleh : Irfan Mahrubi
=======================================================================*/


//FIRMWARE CONFIGURATION -> Copy Paste dari website Blynk ==============
#define BLYNK_TEMPLATE_ID "TMPL63jZ4Jq9y"
#define BLYNK_TEMPLATE_NAME "XII 8"
#define BLYNK_AUTH_TOKEN "n8h6gaACXN0L6ZJLz08M_sNgj1Q33WJD"
//======================================================================


//Untuk menampilkan serial monitor Blynk ===============================
#define BLYNK_PRINT Serial
//======================================================================


//Library yang digunakan ===============================================
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
//======================================================================


//Token yang didapat dari bagian FIRMWARE CONFIGURATION ================
char auth[] = BLYNK_AUTH_TOKEN;
//======================================================================


//Akun wifi yang digunakan =============================================
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//======================================================================


//Inisialisasi nilai konstan / fixed variables =========================
#define pin_LED3 2 //pin led3
#define pin_LED4 14 //pin led4
//======================================================================


//Inisialisasai variabel yang digunakan ================================
int data = 0;
//======================================================================


//Menambahkan fungsi blynk timer =======================================
BlynkTimer timer;
//======================================================================


//Bagian menerima data dari blynk ke ESP ===============================
BLYNK_WRITE(V0){
  int status_LED = param.asInt();
  if(status_LED){
    digitalWrite(pin_LED3,HIGH);
    Serial.println("DITEKAN");
  }
  else{
    digitalWrite(pin_LED3,LOW);
    Serial.println("TIDAK DITEKAN");
  }
}
//=======================================================================


//Bagian mengirim data dari ESP ke Blynk ================================
void sendData(){
  if(data < 100){
    data++;
  }
  else{
    data = 0;
  }
  Blynk.virtualWrite(V1, data);
  Serial.println(data);
}
//=======================================================================


//void setup ============================================================
void setup()
{
  //Mengatur mode pin sebagai input atau output =========================
  pinMode(pin_LED3,OUTPUT);
  //=====================================================================

  //Mengatur alamat serial monitor ======================================
  Serial.begin(115200);
  //=====================================================================

  //Fungsi blynk mengatur firmware configuration dan akun wifi ==========
  Blynk.begin(auth, ssid, pass);
  //=====================================================================

  //sinkronisasi pin virtual blynk dari aplikasi ========================
  Blynk.syncVirtual(V0);
  Blynk.syncVirtual(V1);
  //=====================================================================

  //Fungsi timer blynk mengatur waktu menjalankan fungsi didalamnya =====
  //Satuan waktu adalah detik ===========================================
  timer.setInterval(1000L, sendData);
  //=====================================================================
}
//=======================================================================


//void loop =============================================================
void loop()
{
  //Menjalankan fungsi blynk ============================================
  Blynk.run();
  //=====================================================================

  //Menjalankan fungsi timer blynk ======================================
  timer.run();
  //=====================================================================
}
//=======================================================================
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