#define BLYNK_TEMPLATE_ID "TMPL6ajtSn2I2"
#define BLYNK_TEMPLATE_NAME "my weather"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "4GckS1h2VrCWfoaWWxbPGdvGe1N2YMtX";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

#define DHTPIN 19        // กำหนดขาเชื่อมต่อ DHT22
#define DHTTYPE DHT22    // กำหนดประเภทเซ็นเซอร์ DHT22

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);  // กำหนดที่อยู่ I2C ของจอ LCD และขนาดของจอ

void setup() {
  WiFi.begin(ssid, pass);
  Blynk.begin(auth, ssid, pass);

  Wire.begin(21, 22);    // เริ่มต้นการสื่อสาร I2C บน ESP32
  lcd.begin(16, 2);      // เริ่มต้นจอ LCD
  lcd.backlight();       // เปิดไฟหลังจอ
  dht.begin();           // เริ่มต้นเซ็นเซอร์ DHT
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.setCursor(0, 1);
  lcd.print("Hum: ");
}

void loop() {
  Blynk.run();

  float h = dht.readHumidity();    // อ่านค่าความชื้น
  float t = dht.readTemperature(); // อ่านค่าอุณหภูมิ

  if (isnan(h) || isnan(t)) {
    lcd.setCursor(6, 0);
    lcd.print("Error");
    lcd.setCursor(5, 1);
    lcd.print("Error");
    return;
  }

  lcd.setCursor(6, 0);
  lcd.print(t);
  lcd.print(" C");

  lcd.setCursor(5, 1);
  lcd.print(h);
  lcd.print(" %");

  Blynk.virtualWrite(V1, h);
  Blynk.virtualWrite(V0, t);

  delay(2000); // หน่วงเวลา 2 วินาที
}