#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// WiFi & Blynk
char auth[] = "YOUR_BLYNK_AUTH_TOKEN"; // Ganti dengan token dari Blynk
char ssid[] = "YOUR_WIFI_SSID"; // Nama WiFi
char pass[] = "YOUR_WIFI_PASSWORD"; // Password WiFi
// Sensor dan perangkat
#define DHTPIN 15
#define DHTTYPE DHT22
#define LEDPIN 18
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
// Fungsi pembacaan sensor
void sendSensor() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println("Gagal membaca sensor!");
return;
}
// Kirim ke LCD
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(kelembaban);
lcd.print(" % ");
// Kirim ke Blynk
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, kelembaban);
// Log Serial
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" C | Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %");
// Kontrol LED otomatis dari suhu
if (suhu < 20) {
digitalWrite(LEDPIN, HIGH);
} else {
digitalWrite(LEDPIN, LOW);
}
}
// Kontrol LED manual dari aplikasi Blynk
BLYNK_WRITE(V2) {
int state = param.asInt();
digitalWrite(LEDPIN, state);
}
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(LEDPIN, OUTPUT);
WiFi.begin(ssid, pass);
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, sendSensor);
}
void loop() {
Blynk.run();
timer.run();
}