Lstm_prediction/code_alat/code_alat.ino

119 lines
3.1 KiB
C++

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <DHT.h>
#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();
}