#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <HTTPClient.h>
// Konfigurasi Pin
#define DHTPIN 8
#define DHTTYPE DHT22
#define GREEN_LED 5
#define YELLOW_LED 10
#define RED_LED 12
#define PUMP_RELAY 7
#define BUZZER 9
// Inisialisasi DHT Sensor
DHT dht(DHTPIN, DHTTYPE);
// WiFi dan MQTT
const char* ssid = "RIZKI ANANDA LT3"; // Ganti dengan SSID WiFi Anda
const char* password = "Kosan435"; // Ganti dengan password WiFi Anda
const char* mqtt_server = "broker.hivemq.com"; // Broker MQTT publik
WiFiClient espClient;
PubSubClient client(espClient);
const char* api_url = "https://c167-180-245-230-155.ngrok-free.app/api/dataSensor/store"; // Ganti <IP_SERVER> dengan alamat server API
void setup() {
Serial.begin(115200);
// Inisialisasi Sensor dan Aktuator
dht.begin();
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(PUMP_RELAY, OUTPUT);
pinMode(BUZZER, OUTPUT);
// Koneksi ke WiFi
setup_wifi();
// Setup MQTT
client.setServer(mqtt_server, 1883);
}
void setup_wifi() {
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
if (client.connect("HydroponicDevice")) {
Serial.println("terhubung");
} else {
Serial.print("gagal, rc=");
Serial.print(client.state());
Serial.println(" coba lagi dalam 5 detik");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Membaca data sensor DHT
float p = 0.0;
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
// Logika threshold untuk LED dan Relay
if (t > 35) {
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
tone(BUZZER, 40);
if (h < 50) {
digitalWrite(PUMP_RELAY, HIGH); // Nyalakan pompa
p = 1.0;
} else {
digitalWrite(PUMP_RELAY, LOW); // Matikan pompa jika kelembapan >= 50
p = 0.0;
}
} else if (t <= 35 && t > 30) {
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(PUMP_RELAY, LOW); // Matikan pompa
noTone(BUZZER);
} else {
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(PUMP_RELAY, LOW); // Matikan pompa
noTone(BUZZER);
}
// Streaming data ke MQTT
client.publish("fuadIOT/temperature", String(t).c_str());
client.publish("fuadIOT/humidity", String(h).c_str());
client.publish("fuadIOT/Pompa", String(p).c_str());
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = String("https://c167-180-245-230-155.ngrok-free.app/api/dataSensor/store?temperature=") + t + "&humidity=" + h + "&lux=" + p;
http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error on sending GET: ");
Serial.println(http.errorToString(httpResponseCode).c_str());
}
http.end();
}
Serial.print("humd : ");
Serial.println(h);
Serial.print("temp : ");
Serial.println(t);
Serial.print("pompa : ");
Serial.println(p);
delay(2000); // Sesuaikan waktu delay jika diperlukan
}