#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
#include <Servo.h>
// Ganti dengan data WiFi kamu
const char* ssid = "NAMA_WIFI";
const char* password = "PASSWORD_WIFI";
// URL server dummy (ganti sesuai backend kamu)
const char* serverUrl = "http://yourserver.com/api/sensordata";
// Pin sensor dan aktuator
#define DHTPIN 15
#define DHTTYPE DHT22
#define LDRPIN 34
#define SOILPIN 35
#define TRIGPIN 12
#define ECHOPIN 14
#define RELAYPIN 5
#define LEDGREEN 2
#define LEDRED 4
#define SERVOPIN 13
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
void setup() {
Serial.begin(115200);
// Setup pin mode
pinMode(LDRPIN, INPUT);
pinMode(SOILPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(RELAYPIN, OUTPUT);
pinMode(LEDGREEN, OUTPUT);
pinMode(LEDRED, OUTPUT);
servo.attach(SERVOPIN);
dht.begin();
// WiFi connect
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
}
long readUltrasonicCM() {
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
long duration = pulseIn(ECHOPIN, HIGH);
long cm = duration / 29 / 2;
return cm;
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int ldrValue = analogRead(LDRPIN);
int soilMoisture = analogRead(SOILPIN);
long waterLevelCM = readUltrasonicCM();
Serial.printf("Temp: %.2f C, Humidity: %.2f %%\n", temperature, humidity);
Serial.printf("LDR: %d, Soil: %d, Water Level: %ld cm\n", ldrValue, soilMoisture, waterLevelCM);
// Threshold contoh: jika soilMoisture < 1500 dianggap kering (sesuaikan)
if(soilMoisture < 1500){
digitalWrite(RELAYPIN, HIGH); // nyalakan pompa
digitalWrite(LEDGREEN, HIGH);
digitalWrite(LEDRED, LOW);
servo.write(90); // buka tutup
} else {
digitalWrite(RELAYPIN, LOW); // matikan pompa
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDRED, HIGH);
servo.write(0); // tutup
}
// Kirim data ke server via HTTP POST (JSON)
if(WiFi.status() == WL_CONNECTED){
HTTPClient http;
http.begin(serverUrl);
http.addHeader("Content-Type", "application/json");
StaticJsonDocument<256> doc;
doc["temperature"] = temperature;
doc["humidity"] = humidity;
doc["ldr"] = ldrValue;
doc["soilMoisture"] = soilMoisture;
doc["waterLevelCM"] = waterLevelCM;
String jsonData;
serializeJson(doc, jsonData);
int httpResponseCode = http.POST(jsonData);
if(httpResponseCode > 0){
Serial.printf("HTTP Response code: %d\n", httpResponseCode);
} else {
Serial.printf("HTTP POST failed, error: %s\n", http.errorToString(httpResponseCode).c_str());
}
http.end();
}
delay(5000); // delay 5 detik sebelum baca ulang
}