#define BLYNK_PRINT Serial //deklarasi untuk menampilkan keterangan mulai koneksi ke blynk pada serial monitor

#define BLYNK_TEMPLATE_ID "TMPLvnPM-ddn" //template id dari template blynk yang dibuat, bagian dalam "" disesuaikan dengan device id masing-masing yang bisa di cek di bagian Device Info
#define LED1 2 //deklarasi pin led

#include <WiFi.h> //deklarasi library WiFi.h
#include <WiFiClient.h> //deklarasi library WiFiClient.h
#include <BlynkSimpleEsp32.h> //deklarasi library blynk
#include <DHTesp.h> //deklarasi library DHT khusus Board ESP

int PIN_DHT = 15; //deklrasi pin DHT
DHTesp dht; //merubah perintah dari DHTesp menjadi perintah "dht"

char auth[] = "Bbqc4Rmt-dfvGb6UlxzLk3hv-WlyHH-I"; //deklarasi auth token dari device blynk yang dibuat, bisa dilihat pada bagian device info

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

BlynkTimer timer; //merubah perintah BlynkTimer menjadi "timer"

void kirimData(){ //void untuk mengirimkan pembacaan sensor atau nilai ke blynk
  TempAndHumidity data = dht.getTempAndHumidity(); //mengakses nilai kelembaban dan suhu dari sensor DHT 22
  Blynk.virtualWrite(V1, data.temperature); //mengirimkan data suhu ke virtual pin1 pada blynk
  Serial.println("Temp: " + String(data.temperature, 2) + "C"); //menampilkan tulisan Temp: nilai suhu dhtC ke dalam serial monitor
  Serial.println("------");
}

BLYNK_WRITE(V0){ //perintah untuk membaca nilai yang dikirim oleh blynk
  int pinVal = param.asInt(); //perintah untuk memasukkan nilai dari pin virtual blynk ke variabel pinVal
  digitalWrite(LED1, pinVal); //perintah untuk membuat LED menyala sesuai dengan kondisi button virtual pada blynk
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass); //inisialisasi komunikasi dengan server blynk
  pinMode(LED1, OUTPUT);
  dht.setup(PIN_DHT, DHTesp::DHT22); //inisialisasi pembacaan sensor DHT22, jika jenis DHT-nya berbeda tinggal disesuaikan pada DHTesp::DHT22 menjadi seri dht yang digunakan. Misal DHT11 menjadi DHTesp::DHT11
  timer.setInterval(2000L, kirimData); //interval pengiriman data dari mikrokontroler ke blynk
}

void loop() {
  // put your main code here, to run repeatedly:
  Blynk.run(); //menjalankan perintah yang ada di library blynk
  timer.run(); //menjalankan timer dari blynk
}