diff --git a/WiFiManager.cpp b/WiFiManager.cpp index c92675c..f221877 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -347,6 +347,7 @@ void WiFiManager::setupConfigPortal() { server->on((String)F("/wifisave"), std::bind(&WiFiManager::handleWifiSave, this)); server->on((String)F("/info"), std::bind(&WiFiManager::handleInfo, this)); server->on((String)F("/param"), std::bind(&WiFiManager::handleParam, this)); + server->on((String)F("/paramsave"), std::bind(&WiFiManager::handleParamSave, this)); server->on((String)F("/restart"), std::bind(&WiFiManager::handleReset, this)); server->on((String)F("/exit"), std::bind(&WiFiManager::handleExit, this)); server->on((String)F("/close"), std::bind(&WiFiManager::stopCaptivePortal, this)); @@ -694,12 +695,21 @@ void WiFiManager::handleWifi(boolean scan) { if (scan) { page += getScanItemOut(); } - String pitem = FPSTR(HTTP_FORM_START); + String pitem = ""; + + pitem = FPSTR(HTTP_FORM_START); + pitem.replace(FPSTR(T_v), F("wifisave")); + page += pitem; + + pitem = FPSTR(HTTP_FORM_WIFI); pitem.replace(FPSTR(T_v), WiFi_SSID()); page += pitem; page += getStaticOut(); - if(_paramsInWifi) page += getParamOut(); + if(_paramsInWifi){ + page += getParamOut(); + page += FPSTR(HTTP_FORM_WIFI_END); + } page += FPSTR(HTTP_FORM_END); page += FPSTR(HTTP_SCAN_LINK); reportStatus(page); @@ -722,6 +732,12 @@ void WiFiManager::handleParam(){ handleRequest(); String page = getHTTPHead(FPSTR(S_titleparam)); // @token titlewifi + String pitem = ""; + + pitem = FPSTR(HTTP_FORM_START); + pitem.replace(FPSTR(T_v), F("paramsave")); + page += pitem; + page += getParamOut(); page += FPSTR(HTTP_FORM_END); reportStatus(page); @@ -890,8 +906,6 @@ String WiFiManager::getParamOut(){ bool tok_v = HTTP_PARAM_temp.indexOf(FPSTR(T_v)) > 0; bool tok_c = HTTP_PARAM_temp.indexOf(FPSTR(T_c)) > 0; - page += FPSTR(HTTP_FORM_PARAM_START); - char parLength[5]; // add the extra parameters to the form for (int i = 0; i < _paramsCount; i++) { @@ -933,9 +947,6 @@ String WiFiManager::getParamOut(){ page += pitem; } - if (_params[0] != NULL) { - page += FPSTR(HTTP_FORM_PARAM_END); - } } return page; @@ -965,25 +976,7 @@ void WiFiManager::handleWifiSave() { _ssid = server->arg(F("s")).c_str(); _pass = server->arg(F("p")).c_str(); - //parameters - if(_paramsCount > 0){ - DEBUG_WM(F("Parameters")); - DEBUG_WM(FPSTR(D_HR)); - for (int i = 0; i < _paramsCount; i++) { - if (_params[i] == NULL) { - break; - } - //read parameter from server - String value; - if(server->arg((String)FPSTR(S_parampre)+(String)i) != NULL) value = server->arg((String)FPSTR(S_parampre)+(String)i).c_str(); - else value = server->arg(_params[i]->getID()).c_str(); - - //store it in array - value.toCharArray(_params[i]->_value, _params[i]->_length+1); // length+1 null terminated - DEBUG_WM((String)_params[i]->getID() + ":",value); - } - DEBUG_WM(FPSTR(D_HR)); - } + if(_paramsInWifi) doParamSave(); if (server->arg(FPSTR(S_ip)) != "") { //_sta_static_ip.fromString(server->arg(FPSTR(S_ip)); @@ -1014,6 +1007,45 @@ void WiFiManager::handleWifiSave() { connect = true; //signal ready to connect/reset } +void WiFiManager::handleParamSave() { + + DEBUG_WM(F("<- HTTP WiFi save ")); + DEBUG_WM(F("Method:"),server->method() == HTTP_GET ? (String)FPSTR(S_GET) : (String)FPSTR(S_POST)); + handleRequest(); + doParamSave(); + + String page = getHTTPHead(FPSTR(S_titleparamsaved)); // @token titleparamsaved + page += FPSTR(HTTP_PARAMSAVED); + page += FPSTR(HTTP_END); + + server->sendHeader(FPSTR(HTTP_HEAD_CL), String(page.length())); + server->send(200, FPSTR(HTTP_HEAD_CT), page); + + DEBUG_WM(F("Sent param save page")); +} + +void WiFiManager::doParamSave(){ + //parameters + if(_paramsCount > 0){ + DEBUG_WM(F("Parameters")); + DEBUG_WM(FPSTR(D_HR)); + for (int i = 0; i < _paramsCount; i++) { + if (_params[i] == NULL) { + break; + } + //read parameter from server + String value; + if(server->arg((String)FPSTR(S_parampre)+(String)i) != NULL) value = server->arg((String)FPSTR(S_parampre)+(String)i).c_str(); + else value = server->arg(_params[i]->getID()).c_str(); + + //store it in params array + value.toCharArray(_params[i]->_value, _params[i]->_length+1); // length+1 null terminated + DEBUG_WM((String)_params[i]->getID() + ":",value); + } + DEBUG_WM(FPSTR(D_HR)); + } +} + /** * HTTPD CALLBACK info page */ @@ -1703,7 +1735,7 @@ void WiFiManager::setMenu(uint8_t menu[]){ int i; int n = sizeof(menu); for(i=0;i server; // std:vector _menuids; - uint8_t _menuIds[3] = {MENU_WIFI,MENU_INFO,MENU_EXIT}; + uint8_t _menuIds[10] = {MENU_WIFI,MENU_INFO,MENU_EXIT}; // ip configs IPAddress _ap_static_ip; @@ -282,6 +282,8 @@ class WiFiManager void handleParam(); void handleWiFiStatus(); void handleRequest(); + void handleParamSave(); + void doParamSave(); boolean captivePortal(); boolean configPortalHasTimeout(); diff --git a/examples/AutoConnectWithFSParameters/AutoConnectWithFSParameters.ino b/examples/AutoConnectWithFSParameters/AutoConnectWithFSParameters.ino index 8445054..4492b60 100644 --- a/examples/AutoConnectWithFSParameters/AutoConnectWithFSParameters.ino +++ b/examples/AutoConnectWithFSParameters/AutoConnectWithFSParameters.ino @@ -1,7 +1,7 @@ #include // this needs to be first, or it all crashes and burns... #include // https://github.com/tzapu/WiFiManager #include // https://github.com/bblanchon/ArduinoJson -#include +// #include //define your default values here, if there are different values in config.json, they are overwritten. char mqtt_server[40]; @@ -69,15 +69,15 @@ void setup() { // id/name placeholder/prompt default length WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40); WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 6); - // WiFiManagerParameter custom_blynk_token("blynk", "blynk token", "", 0); - - WiFiManagerParameter custom_blynk_token("blynk", "blynk token"); - custom_blynk_token.setValue("setvalue override",32); + WiFiManagerParameter custom_blynk_token("blynk", "blynk token", "", 0); //WiFiManager //Local intialization. Once its business is done, there is no need to keep it around WiFiManager wifiManager; + uint8_t menu[] = {wifiManager.MENU_WIFI,wifiManager.MENU_INFO,wifiManager.MENU_PARAM,wifiManager.MENU_CLOSE}; + wifiManager.setMenu(menu); + //set config save notify callback wifiManager.setSaveConfigCallback(saveConfigCallback); diff --git a/strings_en.h b/strings_en.h index 96798c2..a518156 100644 --- a/strings_en.h +++ b/strings_en.h @@ -41,16 +41,16 @@ const char HTTP_ITEM_QP[] PROGMEM = "
{r}%
"; // const char HTTP_ITEM[] PROGMEM = "
{v}{qi}{qp}
"; // {q} = HTTP_ITEM_QI, {r} = HTTP_ITEM_QP // const char HTTP_ITEM[] PROGMEM = "
{v} {R} {r}% {q} {e}
"; // test all tokens -const char HTTP_FORM_START[] PROGMEM = "


"; +const char HTTP_FORM_START[] PROGMEM = ""; +const char HTTP_FORM_WIFI[] PROGMEM = "
"; +const char HTTP_FORM_WIFI_END[] PROGMEM = "

"; const char HTTP_FORM_END[] PROGMEM = "
"; const char HTTP_FORM_LABEL[] PROGMEM = ""; - -const char HTTP_FORM_PARAM_START[] PROGMEM = "
"; const char HTTP_FORM_PARAM[] PROGMEM = "
"; -const char HTTP_FORM_PARAM_END[] PROGMEM = "
"; const char HTTP_SCAN_LINK[] PROGMEM = "
"; const char HTTP_SAVED[] PROGMEM = "
Saving Credentials
Trying to connect ESP to network.
If it fails reconnect to AP to try again
"; +const char HTTP_PARAMSAVED[] PROGMEM = "
Saved
"; const char HTTP_END[] PROGMEM = ""; const char HTTP_ERASEBTN[] PROGMEM = "
"; @@ -178,6 +178,7 @@ const char S_titlewifisaved[] PROGMEM = "Credentials Saved"; const char S_titlewifi[] PROGMEM = "Config ESP"; const char S_titleinfo[] PROGMEM = "Info"; const char S_titleparam[] PROGMEM = "Setup"; +const char S_titleparamsaved[] PROGMEM = "Setup Saved"; const char S_titleexit[] PROGMEM = "Exit"; const char S_titlereset[] PROGMEM = "Reset"; const char S_titleerase[] PROGMEM = "Erase";