Search This Blog

Wednesday, 18 June 2025

ESP32 DENGAN FUNGSI CLIEN DAN AKSES POINT DAN FUNGSI PING SETING LEWAT WEB DAN BISA DI SAVE

 #include <WiFi.h>

#include <WebServer.h>

#include <ESP32Ping.h>

#include <Preferences.h>


Preferences prefs;

WebServer server(80);


// Variabel konfigurasi

String ssid_sta, pass_sta, ssid_ap, pass_ap;

IPAddress targetIP;


// Fungsi untuk load setting dari flash

void loadConfig() {

  prefs.begin("config", true);

  ssid_sta = prefs.getString("ssid_sta", "Pareting");

  pass_sta = prefs.getString("pass_sta", "istimewa2");

  ssid_ap = prefs.getString("ssid_ap", "esp32");

  pass_ap = prefs.getString("pass_ap", "rejeki88");

  String ipString = prefs.getString("target_ip", "192.168.88.1");

  targetIP.fromString(ipString);

  prefs.end();

}


// Fungsi menyimpan ke flash

void saveConfig() {

  prefs.begin("config", false);

  prefs.putString("ssid_sta", ssid_sta);

  prefs.putString("pass_sta", pass_sta);

  prefs.putString("ssid_ap", ssid_ap);

  prefs.putString("pass_ap", pass_ap);

  prefs.putString("target_ip", targetIP.toString());

  prefs.end();

}


// Web handling

void handleRoot() {

  String html = "<h1>Konfigurasi WiFi & Ping</h1>";

  html += "<form action='/set' method='POST'>";

  html += "SSID Client: <input name='ssid_sta' value='" + ssid_sta + "'><br>";

  html += "Password Client: <input name='pass_sta' value='" + pass_sta + "'><br><br>";

  html += "SSID AP: <input name='ssid_ap' value='" + ssid_ap + "'><br>";

  html += "Password AP: <input name='pass_ap' value='" + pass_ap + "'><br><br>";

  html += "IP Target: <input name='target_ip' value='" + targetIP.toString() + "'><br><br>";

  html += "<input type='submit' value='Simpan & Restart'>";

  html += "</form>";

  server.send(200, "text/html", html);

}


void handleSet() {

  if (server.hasArg("ssid_sta")) ssid_sta = server.arg("ssid_sta");

  if (server.hasArg("pass_sta")) pass_sta = server.arg("pass_sta");

  if (server.hasArg("ssid_ap")) ssid_ap = server.arg("ssid_ap");

  if (server.hasArg("pass_ap")) pass_ap = server.arg("pass_ap");

  if (server.hasArg("target_ip")) targetIP.fromString(server.arg("target_ip"));


  saveConfig(); // Simpan ke flash


  server.send(200, "text/html", "<h2>Setting disimpan, restart...</h2>");

  delay(3000);

  ESP.restart();

}


void setupWiFiClient() {

  WiFi.begin(ssid_sta.c_str(), pass_sta.c_str());

  Serial.print("Menyambung ke WiFi: ");

  Serial.println(ssid_sta);


  int retry = 0;

  while (WiFi.status() != WL_CONNECTED && retry < 20) {

    delay(500);

    Serial.print(".");

    retry++;

  }


  if (WiFi.status() == WL_CONNECTED) {

    Serial.println("\nTersambung ke WiFi Client");

    Serial.println(WiFi.localIP());

  } else {

    Serial.println("\nGagal konek WiFi");

  }

}


void setupAccessPoint() {

  WiFi.softAP(ssid_ap.c_str(), pass_ap.c_str());

  Serial.print("AP aktif. IP: ");

  Serial.println(WiFi.softAPIP());


  server.on("/", handleRoot);

  server.on("/set", HTTP_POST, handleSet);

  server.begin();

  Serial.println("Web Server aktif");

}


void setup() {

  Serial.begin(115200);

  loadConfig();       // ⬅️ Load dari flash

  setupWiFiClient();  // Konek ke WiFi STA

  setupAccessPoint(); // Jalankan AP & Web Server

}


void loop() {

  server.handleClient();


  // Ping setiap 10 detik

  static unsigned long lastPing = 0;

  if (millis() - lastPing > 10000) {

    lastPing = millis();

    Serial.print("Ping ke ");

    Serial.print(targetIP);

    Serial.print("... ");

    if (Ping.ping(targetIP)) {

      Serial.println("OK!");

    } else {

      Serial.println("GAGAL!");

      // Tambahkan aksi seperti nyalakan relay di sini

    }

  }

}


No comments:

Post a Comment

Tandon Air Otomatis (ESP32 Master & Display) + Kode Lengkap

  Panduan Lengkap Tandon Air Otomatis (ESP32 Master & Display) + Kode Lengkap Diperbarui: 09 August 2025 Artikel ini memandu Anda memban...