#define BLYNK_TEMPLATE_ID "TMPL6CzIeIhzc"
#define BLYNK_TEMPLATE_NAME "kualitas udara"
#define BLYNK_AUTH_TOKEN "Ohrw67cB-fS0_n-xtga4qosjyY88TLiu"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <DHT.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#define DHTPIN 5 // Pin untuk DHT22
#define DHTTYPE DHT22 // Tipe sensor DHT
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4); // Menggunakan LCD 20x4
RTC_DS1307 rtc;
char auth[] = BLYNK_AUTH_TOKEN;
const char* ssid = "Wokwi-GUEST"; // Ganti dengan SSID WiFi Anda
const char* pass = ""; // Ganti dengan password WiFi Anda
const int mqPin = A0; // Pin analog untuk sensor MQ
const int relayPin = 23; // Pin untuk relay
const int threshold = 2000; // Ambang batas deteksi gas
char temp[33];
void setup() {
Serial.begin(115200);
dht.begin(); // Inisialisasi sensor DHT
Blynk.begin(auth, ssid, pass); // Menghubungkan ke Blynk
lcd.backlight();
lcd.init();
lcd.setCursor(0, 0);
lcd.print("MIJUN ELEKTRONIKA");
delay(2000);
lcd.clear();
rtc.begin();
pinMode(relayPin, OUTPUT); // Mengatur pin relay sebagai output
digitalWrite(relayPin, LOW); // Memastikan relay mati pada awal
Serial.println("program siap");
}
void loop() {
Blynk.run(); // Menjalankan Blynk
// Membaca suhu dan kelembapan
float h = dht.readHumidity();
float t = dht.readTemperature();
// Memeriksa apakah pembacaan berhasil
if (isnan(h) || isnan(t)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
// Membaca nilai gas
int gasValue = analogRead(mqPin);
Serial.print("Nilai Gas: ");
Serial.println(gasValue);
// Menampilkan hasil pembacaan di Serial Monitor
Serial.print("Suhu: ");
Serial.print(t);
Serial.print(" °C, Kelembapan: ");
Serial.print(h);
Serial.println(" %");
// Mengirim data ke Blynk
Blynk.virtualWrite(V0, t); // Mengirim suhu ke Virtual Pin V0
Blynk.virtualWrite(V1, h); // Mengirim kelembapan ke Virtual Pin V1
Blynk.virtualWrite(V2, gasValue); // Mengirim nilai gas ke Virtual Pin V2
// Deteksi gas dan kontrol relay
if (gasValue > threshold) {
digitalWrite(relayPin, HIGH); // Nyalakan relay (ventilasi aktif)
Serial.println("Sistem ventilasi terbuka!");
} else {
digitalWrite(relayPin, LOW); // Matikan relay
Serial.println("Sistem ventilasi tertutup.");
}
// RTC dan LCD untuk menampilkan jam, suhu, kelembapan, dan gas
DateTime now = rtc.now();
lcd.setCursor(0, 0);
sprintf(temp, "Jam: %02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.print(temp);
lcd.setCursor(0, 1);
sprintf(temp, "Suhu: %.1f C", t);
lcd.print(temp);
lcd.setCursor(0, 2);
sprintf(temp, "Kelembapan: %.1f%%", h);
lcd.print(temp);
lcd.setCursor(0, 3);
sprintf(temp, "Gas: %d", gasValue);
lcd.print(temp);
delay(1000); // Delay sebelum pembacaan berikutnya
}