/************************************************************** WiFiManager is a library for the ESP8266/Arduino platform (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi credentials using a Captive Portal inspired by: http://www.esp8266.com/viewtopic.php?f=29&t=2520 https://github.com/chriscook8/esp-arduino-apboot https://github.com/esp8266/Arduino/tree/esp8266/hardware/esp8266com/esp8266/libraries/DNSServer/examples/CaptivePortalAdvanced Built by AlexT https://github.com/tzapu Licensed under MIT license **************************************************************/ #ifndef WiFiManager_h #define WiFiManager_h #include #include #include #include const char HTTP_200[] PROGMEM = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; //const char HTTP_HEAD[] PROGMEM = "{v}"; const char HTTP_STYLE[] PROGMEM = ""; const char HTTP_SCRIPT[] PROGMEM = ""; const char HTTP_HEAD_END[] PROGMEM = "
"; const char HTTP_PORTAL_OPTIONS[] PROGMEM = "

"; const char HTTP_ITEM[] PROGMEM = "
{v} {r}% {i}
"; const char HTTP_ITEM_PADLOCK[] PROGMEM = ""; const char HTTP_FORM_START[] PROGMEM = "


"; const char HTTP_FORM_PARAM[] PROGMEM = "
"; const char HTTP_FORM_END[] PROGMEM = "
"; const char HTTP_SAVED[] PROGMEM = "
Credentials Saved
Trying to connect ESP to network.
If it fails reconnect to AP to try again
"; const char HTTP_END[] PROGMEM = "
"; #define WIFI_MANAGER_MAX_PARAMS 10 class WiFiManagerParameter { public: WiFiManagerParameter(const char *id, const char *placeholder, const char *defaultValue, int length); const char *getID(); const char *getValue(); const char *getPlaceholder(); int getValueLength(); private: const char *_id; const char *_placeholder; char *_value; int _length; friend class WiFiManager; }; class WiFiManager { public: WiFiManager(); boolean autoConnect(); boolean autoConnect(char const *apName, char const *apPassword = NULL); //if you want to always start the config portal, without trying to connect first boolean startConfigPortal(char const *apName, char const *apPassword = NULL); String getSSID(); String getPassword(); // get the AP name of the config portal, so it can be used in the callback String getConfigPortalSSID(); void resetSettings(); //for convenience String urldecode(const char*); //sets timeout before webserver loop ends and exits even if there has been no setup. //usefully for devices that failed to connect at some point and got stuck in a webserver loop //in seconds void setTimeout(unsigned long seconds); void setDebugOutput(boolean debug); //defaults to not showing anything under 8% signal quality if called void setMinimumSignalQuality(int quality = 8); //sets a custom ip /gateway /subnet configuration void setAPStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn); //sets config for a static IP void setSTAStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn); //called when AP mode and config portal is started void setAPCallback( void (*func)(WiFiManager*) ); //called when settings have been changed and connection was successful void setSaveConfigCallback( void (*func)(void) ); //adds a custom parameter void addParameter(WiFiManagerParameter *p); private: std::unique_ptr dnsServer; std::unique_ptr server; const int WM_DONE = 0; const int WM_WAIT = 10; const String HTTP_HEAD = "{v}"; void setupConfigPortal(); int _eepromStart; const char* _apName = "no-net"; const char* _apPassword = NULL; String _ssid = ""; String _pass = ""; unsigned long timeout = 0; unsigned long start = 0; IPAddress _ap_static_ip; IPAddress _ap_static_gw; IPAddress _ap_static_sn; IPAddress _sta_static_ip; IPAddress _sta_static_gw; IPAddress _sta_static_sn; int _paramsCount = 0; int _minimumQuality = -1; //String getEEPROMString(int start, int len); //void setEEPROMString(int start, int len, String string); int status = WL_IDLE_STATUS; int connectWifi(String ssid, String pass); void handleRoot(); void handleWifi(boolean scan); void handleWifiSave(); void handleNotFound(); void handle204(); boolean captivePortal(); // DNS server const byte DNS_PORT = 53; //helpers int getRSSIasQuality(int RSSI); boolean isIp(String str); String toStringIp(IPAddress ip); boolean connect; boolean _debug = true; void (*_apcallback)(WiFiManager*) = NULL; void (*_savecallback)(void) = NULL; WiFiManagerParameter* _params[WIFI_MANAGER_MAX_PARAMS]; template void DEBUG_WM(Generic text); }; #endif