#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <DHT.h>
// Konfigurasi jaringan WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Server dan API Key
const char* serverName = "https://server.adyadigitalteknologi.com/iot/esp-post-data.php";
String apiKeyValue = "tPmAT5Ab3j7F9";
String sensorName = "DHT22";
String sensorLocation = "Office";
// Konfigurasi sensor DHT22
#define DHTPIN 4 // Pin untuk sensor DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi sensor LDR (Light Dependent Resistor)
#define LDR_PIN 32 // Pin analog untuk sensor LDR (misal GPIO32)
int lightLevel = 0; // Variabel untuk menyimpan nilai intensitas cahaya
// Konfigurasi sensor PIR Motion
#define PIR_PIN 33 // Pin digital untuk sensor PIR (misal GPIO33)
int motionDetected = 0; // Variabel untuk menyimpan status gerakan
// Konfigurasi sensor kelembapan tanah
#define SOIL_MOISTURE_PIN 34 // Pin analog untuk sensor kelembapan tanah (misal GPIO34)
int soilMoistureValue = 0; // Variabel untuk menyimpan nilai kelembapan tanah
// Konfigurasi pin Relay untuk mengendalikan lampu
#define RELAY_PIN_LAMPU 25 // Pin digital untuk relay (misal GPIO25)
// Konfigurasi pin Relay untuk mengendalikan buzzer berdasarkan motion PIR
#define RELAY_PIN_BUZZER 26 // Pin digital untuk relay PIR (misal GPIO26)
// Konfigurasi pin Relay untuk mengendalikan pompa air untuk menyiram tanaman
#define RELAY_PIN_POMPA 27 // Pin digital untuk relay 3 (misal GPIO27)
void setup() {
Serial.begin(115200);
// Menghubungkan ke WiFi
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi...");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
// Memulai sensor DHT
dht.begin();
// Mengatur pin PIR sebagai input
pinMode(PIR_PIN, INPUT);
// Mengatur pin Relay lampu sebagai output
pinMode(RELAY_PIN_LAMPU, OUTPUT);
digitalWrite(RELAY_PIN_LAMPU, LOW); // Pastikan relay lampu dalam keadaan mati saat pertama kali
// Mengatur pin Relay buzzer sebagai output
pinMode(RELAY_PIN_BUZZER, OUTPUT);
digitalWrite(RELAY_PIN_BUZZER, LOW); // Pastikan relay buzzer dalam keadaan mati saat pertama kali
// Mengatur pin Relay pompa air sebagai output
pinMode(RELAY_PIN_POMPA, OUTPUT);
digitalWrite(RELAY_PIN_POMPA, LOW); // Pastikan relay pompa air dimatikan saat pertama kali
}
void loop() {
// Memeriksa status koneksi WiFi
if(WiFi.status() == WL_CONNECTED){
// Membuat koneksi HTTPS
WiFiClientSecure *client = new WiFiClientSecure;
client->setInsecure(); // Abaikan sertifikat SSL untuk testing
HTTPClient https;
// Mengakses URL server
https.begin(*client, serverName);
// Menyiapkan header HTTP
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Membaca data dari sensor DHT22
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
// Membaca nilai intensitas cahaya dari sensor LDR
lightLevel = analogRead(LDR_PIN); // Membaca nilai dari sensor LDR
// Membaca status gerakan dari sensor PIR
motionDetected = digitalRead(PIR_PIN); // Membaca status gerakan dari sensor PIR
// Membaca nilai kelembapan tanah dari sensor kapasitif
soilMoistureValue = analogRead(SOIL_MOISTURE_PIN); // Membaca nilai dari sensor tanah
// Memeriksa apakah pembacaan data berhasil
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Menyiapkan data HTTP POST
String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName
+ "&location=" + sensorLocation + "&value1=" + String(suhu)
+ "&value2=" + String(kelembapan) + "&value3=" + String(lightLevel)
+ "&value4=" + String(motionDetected) + "&value5=" + String(soilMoistureValue);
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);
// Mengirim request POST HTTP
int httpResponseCode = https.POST(httpRequestData);
// Menampilkan kode respon HTTP
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Mengakhiri koneksi
https.end();
// Logika untuk menyalakan/mematikan relay berdasarkan nilai cahaya dari LDR
if (lightLevel > 500) { // Jika cahaya rendah, aktifkan relay untuk menyalakan lampu
digitalWrite(RELAY_PIN_LAMPU, HIGH);
Serial.println("Gelap - Lampu dinyalakan");
} else { // Jika cahaya cukup, matikan relay
digitalWrite(RELAY_PIN_LAMPU, LOW);
Serial.println("Terang - Lampu dimatikan");
}
// Logika untuk menyalakan/mematikan Relay 2 berdasarkan deteksi gerakan PIR
if (motionDetected == HIGH) { // Jika gerakan terdeteksi, aktifkan relay 2 untuk menyalakan lampu
digitalWrite(RELAY_PIN_BUZZER, HIGH);
Serial.println("Gerakan terdeteksi - Relay Buzzer dinyalakan");
} else { // Jika tidak ada gerakan, matikan relay 2
digitalWrite(RELAY_PIN_BUZZER, LOW);
Serial.println("Tidak ada gerakan - Relay Buzzer dimatikan");
}
// Logika untuk menyalakan Relay 3 jika kelembapan tanah kurang (untuk menyiram tanaman)
if (soilMoistureValue < 100) { // Ambang batas kelembapan tanah rendah, nyalakan pompa untuk menyiram
digitalWrite(RELAY_PIN_POMPA, HIGH); // Aktifkan Relay 3
Serial.println("Kelembapan tanah rendah - Relay Pompa dinyalakan (menyiram tanaman)");
} else { // Jika kelembapan tanah cukup, matikan Relay 3
digitalWrite(RELAY_PIN_POMPA, LOW); // Matikan Relay 3
Serial.println("Kelembapan tanah cukup - Relay Pompa dimatikan");
}
} else {
Serial.println("WiFi Disconnected");
}
// Mengirimkan data setiap 30 detik
delay(1000);
}