#define BLYNK_TEMPLATE_ID "TMPL6s_XsquDA"
#define BLYNK_TEMPLATE_NAME "ESP32 DHT22"
#define BLYNK_AUTH_TOKEN "A76Pvkj7sAj-nzACzDFVwyMq38E00wJ6"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Informasi jaringan Wi-Fi
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Nama hotspot yang digunakan
char pass[] = ""; // Password hotspot yang digunakan
// Konfigurasi DHT22
#define DHTPIN 5 // Pin untuk DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi LCD I2C (20x4)
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD (0x27 atau 0x3F)
// Konfigurasi LED
#define LED_PIN 2 // Pin LED
// Timer untuk Blynk
BlynkTimer timer;
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi Blynk
Blynk.begin(auth, ssid, pass);
// Inisialisasi DHT sensor
dht.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Konfigurasi pin LED sebagai output
pinMode(LED_PIN, OUTPUT);
// Timer untuk membaca sensor
timer.setInterval(2500L, sendSensor);
// Tampilan awal pada LCD
lcd.setCursor(0, 0);
lcd.print("Initializing...");
delay(2000); // Delay untuk tampilan awal
}
void loop() {
Blynk.run();
timer.run();
}
void sendSensor() {
// Membaca data suhu dan kelembapan
float h = dht.readHumidity();
float t = dht.readTemperature(); // Gunakan true untuk Fahrenheit
// Jika data tidak valid, beri peringatan di Serial Monitor
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Failed to read");
lcd.setCursor(0, 1);
lcd.print("from DHT sensor!");
return;
}
// Kirim data ke aplikasi Blynk
Blynk.virtualWrite(V1, h);
Blynk.virtualWrite(V0, t);
// Tentukan rekomendasi suhu AC
String acRecommendation;
if (t > 30) {
acRecommendation = "Saran AC: 24C";
digitalWrite(LED_PIN, HIGH); // Nyalakan LED jika suhu > 30°C
Blynk.logEvent("temp_alert", "Temp above 30 degrees");
} else if (t > 25) {
acRecommendation = "Saran AC: 26C";
digitalWrite(LED_PIN, LOW); // Matikan LED
} else {
acRecommendation = "Saran AC: 28C";
digitalWrite(LED_PIN, LOW); // Matikan LED
}
// Tampilkan data pada Serial Monitor
Serial.print("Suhu Ruangan : ");
Serial.print(t);
Serial.print(" Kelembapan : ");
Serial.println(h);
// Tampilkan data pada LCD
lcd.clear();
// Baris 1: Suhu
lcd.setCursor(0, 0);
lcd.print("Suhu Ruangan: ");
lcd.print(t);
lcd.print(" C");
// Baris 2: Kelembapan
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(h);
lcd.print(" %");
// Baris 3: Rekomendasi suhu AC
lcd.setCursor(0, 2);
lcd.print(acRecommendation);
// Baris 4: Pesan tambahan
lcd.setCursor(0, 3);
lcd.print("Stay hydrated!");
}