#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6QgI_CH1M"
#define BLYNK_TEMPLATE_NAME"Indoor Air Quality Monitoring"
#define BLYNK_AUTH_TOKEN "K7A3rEUcEGrn6OoI_NAMJWDcAMoMp_hK"
// ================= BATAS GAS =================
#define GAS_WASPADA 1000
#define GAS_DARURAT 1800
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <ESP32Servo.h>
// ================= WIFI =================
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// ================= PIN =================
#define DHTPIN 4
#define DHTTYPE DHT22
#define MQ2_PIN 34
#define SERVO_PIN 18
#define RELAY_PIN 19
#define BUZZER 23
DHT dht(DHTPIN, DHTTYPE);
Servo servoVentilasi;
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // listrik awal ON
servoVentilasi.attach(SERVO_PIN);
servoVentilasi.write(90);
dht.begin();
delay(3000);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
float suhu = dht.readTemperature();
float hum = dht.readHumidity();
int gasValue = analogRead(MQ2_PIN);
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" C | Hum: ");
Serial.print(hum);
Serial.print(" % | Gas: ");
Serial.println(gasValue);
// Kirim ke Blynk
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, hum);
Blynk.virtualWrite(V2, gasValue);
// ================= LOGIKA KONDISI =================
if (gasValue < GAS_WASPADA) {
// NORMAL
digitalWrite(RELAY_PIN, HIGH);
noTone(BUZZER);
servoVentilasi.write(0);
Blynk.virtualWrite(V3, 0);
Blynk.virtualWrite(V4, 0);
Blynk.virtualWrite(V5, 1);
Blynk.virtualWrite(V6, 0);
} else if (gasValue < GAS_DARURAT) {
// WASPADA
digitalWrite(RELAY_PIN, HIGH);
noTone(BUZZER);
servoVentilasi.write(90);
Blynk.virtualWrite(V3, 1);
Blynk.virtualWrite(V4, 0);
Blynk.virtualWrite(V5, 1);
Blynk.virtualWrite(V6, 1);
} else {
// DARURAT
digitalWrite(RELAY_PIN, LOW);
tone(BUZZER, 1000);
servoVentilasi.write(90);
Blynk.virtualWrite(V3, 2);
Blynk.virtualWrite(V4, 1);
Blynk.virtualWrite(V5, 0);
Blynk.virtualWrite(V6, 1);
}
delay(2000);
}