#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// WiFi
const char* ssid = "H4nk";
const char* password = "passwordwifi";
// Server URL
const String serverUrl = "https://iot.informatika-unes.com/index.php/iot/smartfarming";
const String kontrolUrl = "https://iot.informatika-unes.com/index.php/iot/get_last_pompa";
// Pin Sensor dan Pompa
#define SOIL_PIN 34
#define LDR_PIN 35
#define POMPA_PIN 14
#define ONE_WIRE_BUS 4
// Sensor suhu
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Interval pengiriman data
unsigned long lastSend = 0;
const unsigned long interval = 10000;
bool modeManual = false;
int statusPompaManual = 0;
void setup() {
Serial.begin(115200);
pinMode(POMPA_PIN, OUTPUT);
digitalWrite(POMPA_PIN, LOW);
sensors.begin();
WiFi.begin(ssid, password);
Serial.print("Menghubungkan ke WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nā
Terhubung ke WiFi!");
}
void loop() {
// Baca sensor
sensors.requestTemperatures();
float suhu = sensors.getTempCByIndex(0);
int kelembapan = analogRead(SOIL_PIN);
int cahaya = analogRead(LDR_PIN);
Serial.print("š”ļø Suhu: "); Serial.print(suhu);
Serial.print(" | š¾ Kelembapan: "); Serial.print(kelembapan);
Serial.print(" | āļø Cahaya: "); Serial.println(cahaya);
// Ambil kontrol mode dan status pompa dari server
if (WiFi.status() == WL_CONNECTED) {
WiFiClientSecure client1;
client1.setInsecure(); // Non-verifikasi SSL (dev mode)
HTTPClient http;
http.begin(client1, kontrolUrl);
int httpCode = http.GET();
if (httpCode == 200) {
String payload = http.getString();
Serial.println("š„ Respon kontrol: " + payload);
// Cek mode dan status
if (payload.indexOf("\"mode\":\"manual\"") >= 0) {
modeManual = true;
statusPompaManual = (payload.indexOf("\"status\":1") >= 0) ? 1 : 0;
} else {
modeManual = false;
}
} else {
Serial.println("ā Gagal ambil kontrol dari server.");
}
http.end();
}
// Kontrol pompa berdasarkan mode
if (modeManual) {
digitalWrite(POMPA_PIN, statusPompaManual ? HIGH : LOW);
Serial.println("š ļø Mode: MANUAL - Pompa " + String(statusPompaManual ? "HIDUP" : "MATI"));
} else {
if (kelembapan < 1500) {
digitalWrite(POMPA_PIN, LOW);
} else {
digitalWrite(POMPA_PIN, HIGH);
}
Serial.println("š¤ Mode: OTOMATIS");
}
// Kirim data ke server
if (millis() - lastSend > interval && WiFi.status() == WL_CONNECTED) {
WiFiClientSecure client2;
client2.setInsecure();
HTTPClient http;
http.begin(client2, serverUrl);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String data = "suhu=" + String(suhu, 2) +
"&kelembapan=" + String(kelembapan) +
"&cahaya=" + String(cahaya) +
"&status_pompa=" + String(digitalRead(POMPA_PIN));
int httpCode = http.POST(data);
String response = http.getString();
Serial.println("š¤ Kirim Data: " + response);
Serial.println("š¦ Data: " + data);
Serial.println("š¢ HTTP Code: " + String(httpCode));
http.end();
lastSend = millis();
}
delay(3000);
}