手機社區(qū)網(wǎng)站模板求網(wǎng)址
ESP8266的AP配網(wǎng),可以自行配置網(wǎng)絡(luò),一個簡單的demo,文檔最后有所有的代碼,已經(jīng)測試通過.
查看SPIFFS文件管理系統(tǒng)中的文件 賬號密碼是否存在,如不存在進入AP配網(wǎng),如存在進入wifi連接模式
// 檢查Wi-Fi憑據(jù)if (isWiFiConfigured()) {Serial.println("找到Wi-Fi憑據(jù),嘗試連接Wi-Fi...");String ssid = loadWiFiSSID();String pass = loadWiFiPassword();WiFi.begin(ssid.c_str(), pass.c_str());unsigned long startAttemptTime = millis();// 等待最多15秒來連接Wi-Fiwhile (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < wifiConnectTimeout) {delay(100);Serial.print(".");}if (WiFi.status() == WL_CONNECTED) {Serial.println("Wi-Fi連接成功!");Serial.print("IP地址: ");Serial.println(WiFi.localIP());} else {Serial.println("Wi-Fi連接失敗,進入AP模式...");startAPMode();}} else {Serial.println("未找到Wi-Fi憑據(jù),進入AP模式...");startAPMode();}// 設(shè)置Web服務(wù)器路由server.on("/", HTTP_GET, handleRoot);server.on("/save", HTTP_POST, handleSaveWiFi);// 啟動Web服務(wù)器server.begin();
}
啟用AP模式
// 啟動AP模式,供用戶配置Wi-Fi
void startAPMode() {WiFi.softAP(ap_ssid, ap_password);Serial.print("AP模式啟動,IP地址:");Serial.println(WiFi.softAPIP());
}
AP配網(wǎng)的網(wǎng)頁端代碼(這個是直接寫入,沒有采用SPIFFS管理)
// 網(wǎng)頁表單HTML
const char* htmlForm = R"rawliteral(<html><head><title>Wi-Fi 配置</title></head><body><h2>請輸入Wi-Fi配置</h2><form action="/save" method="POST"><label for="ssid">SSID:</label><br><input type="text" id="ssid" name="ssid" required><br><br><label for="pass">密碼:</label><br><input type="password" id="pass" name="pass" required><br><br><input type="submit" value="保存配置"></form></body></html>
)rawliteral";
總代碼(先進入AP配網(wǎng),將wifi密碼輸入上去后進入wifi模式,可連接自己的wifi)
// 檢查是否有保存的Wi-Fi憑據(jù)
bool isWiFiConfigured() {File ssidFile = SPIFFS.open(WIFI_SSID_FILE, "r");File passFile = SPIFFS.open(WIFI_PASS_FILE, "r");return ssidFile && passFile; // 如果兩個文件都存在,返回true
}
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <FS.h>const char* ap_ssid = "ESP8266-Config";
const char* ap_password = "";
const unsigned long wifiConnectTimeout = 20000; // 20秒超時ESP8266WebServer server(80);#define WIFI_SSID_FILE "/wifi_ssid.txt"
#define WIFI_PASS_FILE "/wifi_pass.txt"// 網(wǎng)頁表單HTML
const char* htmlForm = R"rawliteral(<html><head><title>Wi-Fi 配置</title></head><body><h2>請輸入Wi-Fi配置</h2><form action="/save" method="POST"><label for="ssid">SSID:</label><br><input type="text" id="ssid" name="ssid" required><br><br><label for="pass">密碼:</label><br><input type="password" id="pass" name="pass" required><br><br><input type="submit" value="保存配置"></form></body></html>
)rawliteral";void setup() {Serial.begin(115200);delay(1000); // 等待串口初始化// 初始化SPIFFS文件系統(tǒng)if (!SPIFFS.begin()) {Serial.println("文件系統(tǒng)初始化失敗!");return;}// 檢查Wi-Fi憑據(jù)if (isWiFiConfigured()) {Serial.println("找到Wi-Fi憑據(jù),嘗試連接Wi-Fi...");String ssid = loadWiFiSSID();String pass = loadWiFiPassword();WiFi.begin(ssid.c_str(), pass.c_str());unsigned long startAttemptTime = millis();// 等待最多15秒來連接Wi-Fiwhile (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < wifiConnectTimeout) {delay(100);Serial.print(".");}if (WiFi.status() == WL_CONNECTED) {Serial.println("Wi-Fi連接成功!");Serial.print("IP地址: ");Serial.println(WiFi.localIP());} else {Serial.println("Wi-Fi連接失敗,進入AP模式...");startAPMode();}} else {Serial.println("未找到Wi-Fi憑據(jù),進入AP模式...");startAPMode();}// 設(shè)置Web服務(wù)器路由server.on("/", HTTP_GET, handleRoot);server.on("/save", HTTP_POST, handleSaveWiFi);// 啟動Web服務(wù)器server.begin();
}void loop() {server.handleClient();
}// 啟動AP模式,供用戶配置Wi-Fi
void startAPMode() {WiFi.softAP(ap_ssid, ap_password);Serial.print("AP模式啟動,IP地址:");Serial.println(WiFi.softAPIP());
}// 顯示W(wǎng)i-Fi配置頁面
void handleRoot() {server.send(200, "text/html", htmlForm);
}// 保存Wi-Fi配置
void handleSaveWiFi() {String ssid = server.arg("ssid");String pass = server.arg("pass");// 保存Wi-Fi配置到SPIFFSsaveWiFiCredentials(ssid.c_str(), pass.c_str());// 返回保存成功的頁面String response = "<html><body><h2>Wi-Fi配置已保存!</h2>";Serial.println("Wi-Fi配置已保存!");response += "<p>SSID: " + ssid + "</p>";response += "<p>密碼: " + pass + "</p>";response += "</body></html>";server.send(200, "text/html", response);// 保存后重啟設(shè)備以連接Wi-FiESP.restart();
}// 保存Wi-Fi憑據(jù)到SPIFFS
void saveWiFiCredentials(const char* ssid, const char* pass) {File ssidFile = SPIFFS.open(WIFI_SSID_FILE, "w");File passFile = SPIFFS.open(WIFI_PASS_FILE, "w");if (ssidFile) {ssidFile.print(ssid);ssidFile.close();} else {Serial.println("保存SSID失敗");}if (passFile) {passFile.print(pass);passFile.close();} else {Serial.println("保存密碼失敗");}
}// 加載保存的Wi-Fi SSID
String loadWiFiSSID() {File ssidFile = SPIFFS.open(WIFI_SSID_FILE, "r");if (!ssidFile) {Serial.println("無法讀取SSID");return "";}String ssid = ssidFile.readString();Serial.print("SSID: ");Serial.println(ssid);ssidFile.close();return ssid;
}// 加載保存的Wi-Fi密碼
String loadWiFiPassword() {File passFile = SPIFFS.open(WIFI_PASS_FILE, "r");if (!passFile) {Serial.println("無法讀取密碼");return "";}String pass = passFile.readString();Serial.print("Password: ");Serial.println(pass);passFile.close();return pass;
}// 檢查是否有保存的Wi-Fi憑據(jù)
bool isWiFiConfigured() {File ssidFile = SPIFFS.open(WIFI_SSID_FILE, "r");File passFile = SPIFFS.open(WIFI_PASS_FILE, "r");return ssidFile && passFile; // 如果兩個文件都存在,返回true
}