#define BLYNK_TEMPLATE_ID "TMPL6rntHCYRF"
#define BLYNK_TEMPLATE_NAME "Sensor Suhu"
#define BLYNK_AUTH_TOKEN "6wGxYdzH85LVpAwRol8fV7--FT-JyGJ9"
#define BLYNK_PRINT Serial
// --- Library yang Dibutuhkan ---
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// --- Kredensial Wi-Fi Anda ---
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
DHT dht(23, DHT22);
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer; // Membuat objek timer dari Blynk
// --- Fungsi untuk Mengirim Data Sensor ---
// Fungsi ini akan dipanggil secara berkala oleh timer
void sendSensorData() {
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
noTone(19);
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(h) || isnan(t)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
// Kirim data ke pin virtual Blynk
Blynk.virtualWrite(V0, t); // V0 untuk Suhu
Blynk.virtualWrite(V1, h); // V1 untuk Kelembapan
lcd.setCursor(0,0);
if(t < 25){
lcd.print("Kondisi: Dingin");
digitalWrite(16, HIGH);
}else if(t < 30){
lcd.print("Kondisi: Normal");
digitalWrite(17, HIGH);
}else{
if(h <= 75){
lcd.print("Kondisi: Panas");
digitalWrite(18, HIGH);
}else{
lcd.print("Kondisi : Lembab");
digitalWrite(18, HIGH);
tone(19, 1000);
delay (200);
digitalWrite(18, LOW);
delay(200);
}
}
lcd.setCursor(0,1);
lcd.print("Lembab : " + String(h) + "%");
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Latihan-4a Kayla 12.3");
pinMode (16, OUTPUT);
pinMode (18, OUTPUT);
pinMode (17, OUTPUT);
pinMode (19, OUTPUT);
lcd.init();
lcd.backlight();
dht.begin();
lcd.setCursor(0,0);
lcd.print("Mengukur suhu...");
// Koneksi ke Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Atur timer untuk memanggil fungsi sendSensorData setiap 2 detik (2000L)
timer.setInterval(2000L, sendSensorData);
}
void loop() {
Blynk.run(); // Menjalankan semua proses Blynk (koneksi, dll)
timer.run(); // Menjalankan timer
}