#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#else
#include <WiFi.h>
#include <HTTPClient.h>
#endif
#include <ArduinoJson.h>
#include <DHT.h>
#include <DHT_U.h>
// ----------------------
// KONFIGURASI WIFI & API
// ----------------------
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String endpoint = "https://apps.avicenafahmi.com/api";
// ----------------------
// KONFIGURASI SENSOR DHT
// ----------------------
#define DHTPIN 15 // Ganti sesuai pin kamu
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ----------------------
// VARIABEL GLOBAL
// ----------------------
float suhu, kelembapan, angin, hujan;
String stat_suhu, stat_kelembapan, stat_angin, stat_hujan;
// ----------------------
// SETUP
// ----------------------
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi terhubung");
Serial.println("Alamat IP: ");
Serial.println(WiFi.localIP());
}
// ----------------------
// LOOP UTAMA
// ----------------------
void loop() {
sensors(); // Baca sensor
proses(); // Konversi jadi status
post_data(); // Kirim data ke server
Serial.println("System is running...\n");
delay(2000); // Delay antar pengiriman
}
// ----------------------
// BACA SENSOR
// ----------------------
void sensors() {
suhu = dht.readTemperature();
kelembapan = dht.readHumidity();
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca sensor DHT22");
return;
}
// Angin & hujan disimulasikan
angin = random(0, 1000) / 10.0;
hujan = random(0, 1000) / 10.0;
Serial.print("Suhu: "); Serial.print(suhu); Serial.print(" C, ");
Serial.print("Kelembapan: "); Serial.print(kelembapan); Serial.print(" %, ");
Serial.print("Angin: "); Serial.print(angin); Serial.print(" km/h, ");
Serial.print("Hujan: "); Serial.print(hujan); Serial.println(" mm");
}
// ----------------------
// PROSES STATUS
// ----------------------
void proses() {
stat_suhu = (suhu < 20) ? "So, it's getting cold" : (suhu <= 30) ? "So, it's all good." : "So, it's getting warm.";
stat_kelembapan = (kelembapan < 50) ? "So, it's a bit dry." : (kelembapan <= 70) ? "So, the humidity is normal." : "So, it's getting misty.";
stat_angin = (angin < 50) ? "So, the wind is calm." : (angin <= 70) ? "So, it's a light breeze." : "So, it's getting windy.";
stat_hujan = (hujan < 50) ? "So, it's a dry day." : (hujan <= 70) ? "So, it's a typical rainy day." : "So, it's very rainy.";
}
// ----------------------
// POST DATA KE SERVER
// ----------------------
void post_data() {
WiFiClient client;
HTTPClient http;
String full_url = endpoint + "/function.php";
http.begin(client, full_url);
StaticJsonDocument<1024> json_doc;
json_doc["action"] = "save_json";
json_doc["suhu"] = suhu;
json_doc["kelembapan"] = kelembapan;
json_doc["angin"] = angin;
json_doc["hujan"] = hujan;
json_doc["stat_suhu"] = stat_suhu;
json_doc["stat_kelembapan"] = stat_kelembapan;
json_doc["stat_angin"] = stat_angin;
json_doc["stat_hujan"] = stat_hujan;
String requestBody;
serializeJson(json_doc, requestBody);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(requestBody);
if (httpCode == 200) {
String response = http.getString();
Serial.println("POST Response: " + response);
} else {
Serial.println("POST Gagal, Kode: " + String(httpCode));
}
http.end();
}