#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>


#define BLYNK_TEMPLATE_ID "TMPL6zmK6t3qI"
#define BLYNK_TEMPLATE_NAME "PROJEK GEDEN"
#define BLYNK_AUTH_TOKEN "SNg6mGdNbKacGu4L_RsOsaKgJE8Fh-Sv"

#define ONE_WIRE_BUS 4  // pin data sensor suhu
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC;           // variabel untuk menyimpan suhu dalam celcius

char auth[] = BLYNK_AUTH_TOKEN ;  // token otentikasi Blynk
char ssid[] = "Wokwi-GUEST";        // nama jaringan WiFi
char pass[] = "";  // kata sandi WiFi

LiquidCrystal_I2C lcd(0x27, 16, 2); // inisialisasi LCD I2C

void setup() {
  Serial.begin(115200);  // inisialisasi serial monitor
  sensors.begin();     // inisialisasi sensor suhu
  lcd.init();          // inisialisasi LCD I2C
  lcd.backlight();     // aktifkan backlight pada LCD I2C

  // koneksi ke jaringan WiFi
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  // koneksi ke server Blynk
  Blynk.begin(auth, ssid, pass);
}

void loop() {
  sensors.setResolution(9);
  sensors.requestTemperatures();  // baca suhu dari sensor
  float tempC = sensors.getTempCByIndex(0);  // ambil suhu dalam celcius

  Serial.print(tempC);
  Serial.println("ºC");
  
  lcd.setCursor(0, 0);  // atur posisi kursor LCD
  lcd.print("Temperature:");  // tampilkan label suhu
  lcd.setCursor(0, 1);  // atur posisi kursor LCD
  lcd.print(tempC);     // tampilkan suhu dalam celcius
  
  Blynk.virtualWrite(V5, tempC);  // kirim data suhu ke aplikasi Blynk
  delay(1000);  // tunggu 1 detik sebelum membaca suhu lagi
}