From 33400d90492e447133948078a01196926044e43c Mon Sep 17 00:00:00 2001 From: Wildan_Abbrhory Date: Wed, 23 Jul 2025 09:37:14 +0700 Subject: [PATCH] Add Kode ESP32 Client --- Kode ESP32 Client | 141 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 Kode ESP32 Client diff --git a/Kode ESP32 Client b/Kode ESP32 Client new file mode 100644 index 0000000..4f15315 --- /dev/null +++ b/Kode ESP32 Client @@ -0,0 +1,141 @@ +#include +#include +#include + +#define LORA_SS 5 +#define LORA_RST 14 +#define LORA_DIO0 2 +#define RELAY_PIN 27 +#define FIRE_SENSOR_PIN 33 +#define MQ2_SENSOR_PIN 26 +#define DHTPIN 4 +#define DHTTYPE DHT11 +#define SOIL_SENSOR_PIN 25 + +DHT dht(DHTPIN, DHTTYPE); + +bool pengirimanAktif = true; +bool relayAktifKarenaKebakaran = false; +int lastRelayState = LOW; + +unsigned long lastSendTime = 0; +const unsigned long interval = 1000; + +void setup() { + delay(3000); + Serial.begin(115200); + while (!Serial) + ; + Serial.println("Memulai setup..."); + + pinMode(RELAY_PIN, OUTPUT); + digitalWrite(RELAY_PIN, LOW); + Serial.println("Relay diset LOW"); + + pinMode(FIRE_SENSOR_PIN, INPUT); + pinMode(MQ2_SENSOR_PIN, INPUT); + dht.begin(); + + LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0); + delay(1000); + if (!LoRa.begin(433E6)) { + Serial.println("Gagal memulai LoRa"); + while (1) + ; + } + Serial.println("LoRa siap mengirim"); +} + +void loop() { + if (Serial.available()) { + String cmd = Serial.readStringUntil('\n'); + cmd.trim(); + + if (cmd == "pause") { + pengirimanAktif = false; + Serial.println("Pengiriman LoRa dihentikan"); + } else if (cmd == "resume") { + pengirimanAktif = true; + Serial.println("Pengiriman LoRa dilanjutkan"); + } + } + + int fireDigital = digitalRead(FIRE_SENSOR_PIN); + int asapDigital = digitalRead(MQ2_SENSOR_PIN); + float suhuC = dht.readTemperature(); + int soilRaw = analogRead(SOIL_SENSOR_PIN); + int kelembabanTanah = map(soilRaw, 1949, 4095, 100, 0); + kelembabanTanah = constrain(kelembabanTanah, 0, 100); + + String statusApi = (fireDigital == LOW) ? "iya" : "tidak"; + String statusAsap = (asapDigital == LOW) ? "iya" : "tidak"; + bool suhuTinggi = suhuC > 40.0; + + String statusKebakaran = "tidak"; + if (fireDigital == LOW && asapDigital == LOW && suhuTinggi) { + statusKebakaran = "iya"; + } else { + statusKebakaran = "tidak"; + } + + Serial.println("Sensor:"); + Serial.println(" - Api: " + String(fireDigital == LOW ? "iya" : "tidak")); + Serial.println(" - Asap: " + String(asapDigital == LOW ? "iya" : "tidak")); + Serial.println(" - Suhu: " + String(suhuC, 1) + "C"); + Serial.println(" - Tanah: " + String(kelembabanTanah) + "%"); + + if (statusKebakaran == "iya") { + digitalWrite(RELAY_PIN, HIGH); + relayAktifKarenaKebakaran = true; + Serial.println("Kebakaran terdeteksi! Relay ON"); + } else if (relayAktifKarenaKebakaran && fireDigital == HIGH) { + Serial.println("Api padam"); + delay(300); + digitalWrite(RELAY_PIN, LOW); + relayAktifKarenaKebakaran = false; + Serial.println("Relay dimatikan otomatis setelah api padam"); + } else { + digitalWrite(RELAY_PIN, LOW); + relayAktifKarenaKebakaran = false; + Serial.println("Kondisi aman - Relay OFF"); + } + + if (millis() - lastSendTime > interval) { + lastSendTime = millis(); + + String apiStr = (fireDigital == LOW ? "iya" : "tidak"); + String asapStr = (asapDigital == LOW ? "iya" : "tidak"); + String suhuStr = isnan(suhuC) ? "nanC" : String(suhuC, 1) + "C"; + String tanahStr = String(kelembabanTanah) + "%"; + String relayStr = (digitalRead(RELAY_PIN) ? "ON" : "OFF"); + + String data = "api:" + apiStr + ",asap:" + asapStr + ",suhu:" + suhuStr + ",tanah:" + tanahStr + ",relay:" + relayStr; + + String statusGabungan = "Status: " + statusApi + " - Relay " + relayStr; + + if (pengirimanAktif) { + kirimLoRa(data); + delay(1000), + kirimLoRa(statusGabungan); + delay(1000); + Serial.println("Data dikirim:\n" + data); + Serial.println("Status dikirim:\n" + statusGabungan); + } + } + + if (pengirimanAktif) { + kirimLoRa("kebakaran:" + statusKebakaran); + delay(300); + Serial.println("Status kebakaran dikirim: kebakaran:" + statusKebakaran); + } + + delay(400); +} + +void kirimLoRa(String pesan) { + Serial.println("LoRa kirim:\n" + pesan); + LoRa.beginPacket(); + LoRa.print(pesan); + LoRa.endPacket(); + delay(100); +} \ No newline at end of file