#include "WifiManager.h" #include "config.h" #include #include static const char* AP_SSID = DEFAULT_AP_SSID; WifiManager::WifiManager(): ssid(""), pass(""), apMode(false) {} void WifiManager::loadCredentials() { Preferences prefs; prefs.begin("dcc", true); ssid = prefs.getString("ssid", ""); pass = prefs.getString("pass", ""); prefs.end(); } void WifiManager::saveCredentials(const String &s, const String &p) { Preferences prefs; prefs.begin("dcc", false); prefs.putString("ssid", s); prefs.putString("pass", p); prefs.end(); } void WifiManager::startAP() { apMode = true; WiFi.mode(WIFI_AP); WiFi.softAP(AP_SSID); IPAddress ip = WiFi.softAPIP(); Serial.print("AP started: "); Serial.println(AP_SSID); Serial.print("Configure at http://"); Serial.println(ip); server.on("/", std::bind(&WifiManager::handleRoot, this)); server.on("/save", std::bind(&WifiManager::handleSave, this)); server.begin(); } void WifiManager::handleRoot() { String page = "

Configure WiFi

" "
" "SSID:
" "Password:
" "
"; server.send(200, "text/html", page); } void WifiManager::handleSave() { if (server.hasArg("ssid")) { String s = server.arg("ssid"); String p = server.arg("pass"); saveCredentials(s, p); String resp = "Saved. Rebooting..."; server.send(200, "text/html", resp); delay(1000); ESP.restart(); } else { server.send(400, "text/plain", "Missing ssid"); } } void WifiManager::begin() { loadCredentials(); if (ssid.length() > 0) { Serial.print("Connecting to WiFi"); WiFi.begin(ssid.c_str(), pass.c_str()); unsigned long start = millis(); while (WiFi.status() != WL_CONNECTED && millis() - start < 10000) { delay(250); Serial.print('.'); } Serial.println(); } if (WiFi.status() == WL_CONNECTED) { Serial.print("WiFi connected, IP: "); Serial.println(WiFi.localIP()); apMode = false; } else { startAP(); } } bool WifiManager::isConnected() { return WiFi.status() == WL_CONNECTED; } void WifiManager::loop() { if (apMode) server.handleClient(); } String WifiManager::getSSID() { return ssid; } String WifiManager::getPassword() { return pass; }