#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