#define BLYNK_TEMPLATE_ID "TMPL6FsyLuy9L"
#define BLYNK_TEMPLATE_NAME "Mengukur Suhu dan Kelembapan"
#define BLYNK_AUTH_TOKEN "UyNlTZygMnHOfTUcXtBCNJblq06QI6z1"

// Sertakan library Blynk dan DHT
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"

// Konfigurasi DHT
#define DHTPIN 5 // Pin data sensor DHT terhubung ke GPIO5
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);

// Kredensial Wi-Fi
char ssid[] = "Wokwi-GUEST"; // SSID Wi-Fi
char pass[] = ""; // Kosongkan jika menggunakan Wokwi

BlynkTimer timer;

// Fungsi untuk membaca data dari sensor dan mengirim ke Blynk
void sendSensor() {
  float suhu = dht.readTemperature(); // Membaca suhu
  float kelembapan = dht.readHumidity(); // Membaca kelembapan

  if (isnan(suhu) || isnan(kelembapan)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Kirim nilai ke aplikasi Blynk (Virtual Pin V0 untuk suhu, V1 untuk kelembapan)
  Blynk.virtualWrite(V0, suhu);
  Blynk.virtualWrite(V1, kelembapan);

  Serial.print("Suhu: ");
  Serial.print(suhu);
  Serial.print(" °C, Kelembapan: ");
  Serial.print(kelembapan);
  Serial.println(" %");
}

void setup() {
  // Inisialisasi Serial Monitor
  Serial.begin(115200);

  // Inisialisasi DHT sensor
  dht.begin();

  // Cek Koneksi Wi-Fi
  Serial.print("Menghubungkan ke Wi-Fi: ");
  Serial.println(ssid);

  WiFi.begin(ssid, pass);

  // Tunggu hingga ESP32 terhubung ke Wi-Fi
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("Wi-Fi terhubung!");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  // Inisialisasi Blynk
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  // Set timer untuk mengirim data setiap 2 detik
  timer.setInterval(2000L, sendSensor);
}

void loop() {
  // Jalankan Blynk
  Blynk.run();

  // Jalankan timer
  timer.run();
}