#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <LittleFS.h>
ESP8266WebServer server(80);
const char* ap_ssid = "ESP8266_Setup";
// Hàm đọc dữ liệu từ file
String readFile(const char* path) {
if (LittleFS.exists(path)) {
File file = LittleFS.open(path, "r");
String content = file.readString();
file.close();
return content;
}
return "";
}
// Hàm ghi dữ liệu vào file
void writeFile(const char* path, String content) {
File file = LittleFS.open(path, "w");
file.print(content);
file.close();
}
void handleRoot() {
String html = "<html><body>"
"<h2>ESP8266 WiFi Config</h2>"
"<form action='/save' method='POST'>"
"SSID: <input type='text' name='ssid'><br>"
"Pass: <input type='password' name='pass'><br>"
"<input type='submit' value='Save'>"
"</form></body></html>";
server.send(200, "text/html", html);
}
void handleSave() {
String ssid = server.arg("ssid");
String pass = server.arg("pass");
writeFile("/ssid.txt", ssid);
writeFile("/pass.txt", pass);
server.send(200, "text/html", "Da luu! ESP8266 dang khởi động lại...");
delay(2000);
ESP.restart();
}
void setup() {
Serial.begin(115200);
// Khởi tạo LittleFS
if (!LittleFS.begin()) {
Serial.println("Loi khi mount LittleFS");
return;
}
String saved_ssid = readFile("/ssid.txt");
String saved_pass = readFile("/pass.txt");
if (saved_ssid != "") {
WiFi.begin(saved_ssid.c_str(), saved_pass.c_str());
Serial.print("Dang ket noi WiFi: ");
Serial.println(saved_ssid);
int retry = 0;
while (WiFi.status() != WL_CONNECTED && retry < 15) {
delay(1000);
Serial.print(".");
retry++;
}
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nKet noi thanh cong! IP: " + WiFi.localIP().toString());
} else {
Serial.println("\nKhong tim thay WiFi. Dang phat Access Point...");
WiFi.softAP(ap_ssid);
server.on("/", handleRoot);
server.on("/save", handleSave);
server.begin();
}
}
void loop() {
server.handleClient();
}