#include #include #include #include #define DHT22_PIN D5 // Pin data DHT22 di ESP8266 #define DHTTYPE DHT22 DHT dht(DHT22_PIN, DHTTYPE); // šŸ”¹ Ganti dengan nama dan password WiFi Anda const char* ssid = "Z"; const char* password = "zainal123"; // šŸ”¹ URL API Laravel const char* SERVER_NAME = "http://192.168.38.96:8000/api/sensor"; //ganti sesuai dengan ip laptop // šŸ”¹ Interval pengiriman data (5 menit) const long interval = 300000; // 300.000 ms = 5 menit unsigned long lastMillis = 0; void setup() { Serial.begin(115200); Serial.println("šŸš€ ESP8266 Mulai..."); dht.begin(); Serial.println("āœ… DHT22 Siap"); connectToWiFi(); } void loop() { if (WiFi.status() != WL_CONNECTED) { Serial.println("⚠ WiFi Terputus! Mencoba Koneksi Ulang..."); connectToWiFi(); } unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= interval) { lastMillis = currentMillis; upload_temperature(); } delay(1000); // šŸ”¹ Tambahkan delay agar tidak looping terlalu cepat } // šŸ”¹ Fungsi Koneksi WiFi (Hanya Cetak IP Sekali) void connectToWiFi() { Serial.print("šŸ”— Menghubungkan ke WiFi..."); WiFi.begin(ssid, password); unsigned long startAttemptTime = millis(); while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) { // Timeout 10 detik delay(500); Serial.print("."); } if (WiFi.status() == WL_CONNECTED) { Serial.println("\nāœ… Terhubung ke WiFi! IP: " + WiFi.localIP().toString()); } else { Serial.println("\nāŒ Gagal Terhubung ke WiFi! Akan Dicoba Lagi Nanti."); } } // šŸ”¹ Fungsi Mengirim Data Sensor ke Laravel void upload_temperature() { float suhu, kelembaban; int retryCount = 0; bool success = false; while (retryCount < 3) { // šŸ”¹ Coba baca sensor maksimal 3 kali suhu = dht.readTemperature() - 0.2; kelembaban = dht.readHumidity() + 3.0; if (!isnan(suhu) && !isnan(kelembaban)) { success = true; break; } Serial.println(F("⚠ Gagal membaca dari DHT22! Coba lagi...")); delay(1000); retryCount++; } if (!success) { Serial.println(F("āŒ Gagal membaca dari DHT22 setelah 3 percobaan!")); return; } String jsonPayload = "{\"temperature\":" + String(suhu, 2) + ", \"humidity\":" + String(kelembaban, 2) + "}"; Serial.println("šŸ“¤ Mengirim Data: " + jsonPayload); WiFiClient client; HTTPClient http; http.setTimeout(5000); // šŸ”¹ Timeout HTTP request agar lebih stabil int httpResponseCode; int maxRetries = 3; // šŸ”¹ Coba maksimal 3 kali jika gagal for (int i = 0; i < maxRetries; i++) { http.begin(client, SERVER_NAME); http.addHeader("Content-Type", "application/json"); httpResponseCode = http.POST(jsonPayload); Serial.print("šŸ“” HTTP Response Code: "); Serial.println(httpResponseCode); http.end(); // šŸ”¹ Hindari masalah memori if (httpResponseCode > 0) { // šŸ”¹ Jika sukses, keluar dari loop Serial.println("āœ… Data berhasil dikirim!"); break; } Serial.println("āŒ Gagal mengirim data! Coba lagi dalam 2 detik..."); delay(2000); } http.end(); }