From 1e82e7cc29a4b8cc543a416aa60dda83bc24500a Mon Sep 17 00:00:00 2001 From: Nisacarolina Date: Thu, 21 Aug 2025 15:57:15 +0700 Subject: [PATCH] Upload files to "/" --- esp32.ino | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 esp32.ino diff --git a/esp32.ino b/esp32.ino new file mode 100644 index 0000000..5ad2f38 --- /dev/null +++ b/esp32.ino @@ -0,0 +1,148 @@ +#include "DHT.h" +#include +#include +#include "addons/TokenHelper.h" +#include "addons/RTDBHelper.h" + +// ======= KONFIGURASI WIFI ======= +#define WIFI_SSID "flame" +#define WIFI_PASSWORD "Nisa1234." + +// ======= KONFIGURASI FIREBASE ======= +#define API_KEY "AIzaSyBWdmHcBVtmkZ8Eeg5aaLF9nmsiL47MXaI" +#define DATABASE_URL "https://deteksi-kebakaran-berbas-915bd-default-rtdb.firebaseio.com/" +#define USER_EMAIL "esp32@device.com" +#define USER_PASSWORD "123456" + +// ======= DEFINISI PIN ======= +#define DHTPIN 5 +#define DHTTYPE DHT11 +#define FLAME_PIN 35 +#define BUZZER_PIN 2 +#define MQ_PIN 34 +#define RELAY_PUMP 19 +#define RELAY_EXHAUST 23 + +// ======= BATAS DETEKSI ======= +#define SUHU_THRESHOLD 30.0 +#define GAS_THRESHOLD 100 + +// ======= OBJEK ======= +DHT dht(DHTPIN, DHTTYPE); +FirebaseData fbdo; +FirebaseAuth auth; +FirebaseConfig config; +bool signupOK = false; + +unsigned long sendDataPrevMillis = 0; +unsigned long timerDelay = 2000; + +void setup() { + Serial.begin(115200); + + pinMode(FLAME_PIN, INPUT); + pinMode(BUZZER_PIN, OUTPUT); + pinMode(RELAY_PUMP, OUTPUT); + pinMode(RELAY_EXHAUST, OUTPUT); + + digitalWrite(RELAY_PUMP, LOW); + digitalWrite(RELAY_EXHAUST, LOW); + digitalWrite(BUZZER_PIN, LOW); + + dht.begin(); + + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + Serial.print("Connecting to WiFi"); + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(300); + } + Serial.println(); + Serial.println("Connected to WiFi"); + + config.api_key = API_KEY; + config.database_url = DATABASE_URL; + auth.user.email = USER_EMAIL; + auth.user.password = USER_PASSWORD; + + if (Firebase.signUp(&config, &auth, USER_EMAIL, USER_PASSWORD)) { + Serial.println("Firebase SignUp OK"); + signupOK = true; + } else { + Serial.printf("Signup error: %s\n", config.signer.signupError.message.c_str()); + signupOK = true; + } + + config.token_status_callback = tokenStatusCallback; + Firebase.begin(&config, &auth); + Firebase.reconnectWiFi(true); + + Serial.println("Sistem Deteksi Kebakaran Siap"); + delay(2000); +} + +void loop() { + float suhu = dht.readTemperature(); + float kelembapan = dht.readHumidity(); + + if (isnan(suhu) || isnan(kelembapan)) { + Serial.println("Gagal membaca dari sensor DHT!"); + return; + } + + int statusApi = digitalRead(FLAME_PIN); + bool apiTerdeteksi = (statusApi == LOW); // LOW = api terdeteksi + + // Baca sensor gas (MQ-2) + int totalGas = 0; + for (int i = 0; i < 10; i++) { + totalGas += analogRead(MQ_PIN); + delay(5); + } + int avgGas = totalGas / 10; + + // === SERIAL MONITOR === + Serial.print("Suhu: "); + Serial.print(suhu); + Serial.print("°C | Kelembapan: "); + Serial.print(kelembapan); + Serial.print("% | Api: "); + Serial.print(apiTerdeteksi ? "TERDETEKSI" : "AMAN"); + Serial.print(" | Gas: "); + Serial.println(avgGas); + + // === LOGIKA BUZZER === + if (avgGas > 100) { + digitalWrite(BUZZER_PIN, HIGH); // Gas berbahaya, buzzer nyala + } else { + digitalWrite(BUZZER_PIN, LOW); // Aman, buzzer mati + } + + // === LOGIKA POMPA & KIPAS === + if (suhu > 35 && apiTerdeteksi) { + digitalWrite(RELAY_PUMP, HIGH); // Aktifkan waterpump + digitalWrite(RELAY_EXHAUST, HIGH); // Aktifkan kipas + Serial.println("Bahaya: Suhu tinggi & api terdeteksi, pompa & kipas ON"); + } else { + digitalWrite(RELAY_PUMP, LOW); // Matikan waterpump + digitalWrite(RELAY_EXHAUST, LOW); // Matikan kipas + Serial.println("Aman: Pompa & kipas dimatikan"); + } + + // === KIRIM KE FIREBASE === + if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)) { + sendDataPrevMillis = millis(); + + Firebase.RTDB.setFloat(&fbdo, "/sensor_data/suhu", suhu); + Firebase.RTDB.setFloat(&fbdo, "/sensor_data/kelembapan", kelembapan); + Firebase.RTDB.setBool(&fbdo, "/sensor_data/api_terdeteksi", apiTerdeteksi); + Firebase.RTDB.setInt(&fbdo, "/sensor_data/gas_value", avgGas); + Firebase.RTDB.setBool(&fbdo, "/sensor_data/pump_active", digitalRead(RELAY_PUMP)); + Firebase.RTDB.setBool(&fbdo, "/sensor_data/exhaust_active", digitalRead(RELAY_EXHAUST)); + Firebase.RTDB.setBool(&fbdo, "/sensor_data/buzzer_active", digitalRead(BUZZER_PIN)); + + Serial.println("Data dikirim ke Firebase"); + } + + delay(2000); // Delay loop 2 detik +} \ No newline at end of file