141 lines
5.3 KiB
C++
141 lines
5.3 KiB
C++
/**
|
|
* WiFiManager advanced demo, contains advanced configurartion options
|
|
* Implements TRIGGEN_PIN button press, press for ondemand configportal, hold for 3 seconds for reset settings.
|
|
*/
|
|
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
|
|
|
|
#define TRIGGER_PIN 0
|
|
|
|
// wifimanager can run in a blocking mode or a non blocking mode
|
|
// Be sure to know how to process loops with no delay() if using non blocking
|
|
bool wm_nonblocking = false; // change to true to use non blocking
|
|
|
|
WiFiManager wm; // global wm instance
|
|
WiFiManagerParameter custom_field; // global param ( for non blocking w params )
|
|
|
|
void setup() {
|
|
WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
|
|
Serial.begin(115200);
|
|
Serial.setDebugOutput(true);
|
|
delay(3000);
|
|
Serial.println("\n Starting");
|
|
|
|
pinMode(TRIGGER_PIN, INPUT);
|
|
|
|
// wm.resetSettings(); // wipe settings
|
|
|
|
if(wm_nonblocking) wm.setConfigPortalBlocking(false);
|
|
|
|
// add a custom input field
|
|
int customFieldLength = 40;
|
|
|
|
|
|
// new (&custom_field) WiFiManagerParameter("customfieldid", "Custom Field Label", "Custom Field Value", customFieldLength,"placeholder=\"Custom Field Placeholder\"");
|
|
|
|
// test custom html input type(checkbox)
|
|
// new (&custom_field) WiFiManagerParameter("customfieldid", "Custom Field Label", "Custom Field Value", customFieldLength,"placeholder=\"Custom Field Placeholder\" type=\"checkbox\""); // custom html type
|
|
|
|
// test custom html(radio)
|
|
const char* custom_radio_str = "<br/><label for='customfieldid'>Custom Field Label</label><input type='radio' name='customfieldid' value='1' checked> One<br><input type='radio' name='customfieldid' value='2'> Two<br><input type='radio' name='customfieldid' value='3'> Three";
|
|
new (&custom_field) WiFiManagerParameter(custom_radio_str); // custom html input
|
|
|
|
wm.addParameter(&custom_field);
|
|
wm.setSaveParamsCallback(saveParamCallback);
|
|
|
|
// custom menu via array or vector
|
|
//
|
|
// menu tokens, "wifi","wifinoscan","info","param","close","sep","erase","restart","exit" (sep is seperator) (if param is in menu, params will not show up in wifi page!)
|
|
// const char* menu[] = {"wifi","info","param","sep","restart","exit"};
|
|
// wm.setMenu(menu,6);
|
|
std::vector<const char *> menu = {"wifi","info","param","sep","restart","exit"};
|
|
wm.setMenu(menu);
|
|
|
|
// set dark theme
|
|
wm.setClass("invert");
|
|
|
|
|
|
//set static ip
|
|
// wm.setSTAStaticIPConfig(IPAddress(10,0,1,99), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); // set static ip,gw,sn
|
|
// wm.setShowStaticFields(true); // force show static ip fields
|
|
// wm.setShowDnsFields(true); // force show dns field always
|
|
|
|
// wm.setConnectTimeout(20); // how long to try to connect for before continuing
|
|
wm.setConfigPortalTimeout(30); // auto close configportal after n seconds
|
|
// wm.setCaptivePortalEnable(false); // disable captive portal redirection
|
|
// wm.setAPClientCheck(true); // avoid timeout if client connected to softap
|
|
|
|
// wifi scan settings
|
|
// wm.setRemoveDuplicateAPs(false); // do not remove duplicate ap names (true)
|
|
// wm.setMinimumSignalQuality(20); // set min RSSI (percentage) to show in scans, null = 8%
|
|
// wm.setShowInfoErase(false); // do not show erase button on info page
|
|
// wm.setScanDispPerc(true); // show RSSI as percentage not graph icons
|
|
|
|
// wm.setBreakAfterConfig(true); // always exit configportal even if wifi save fails
|
|
|
|
bool res;
|
|
// res = wm.autoConnect(); // auto generated AP name from chipid
|
|
// res = wm.autoConnect("AutoConnectAP"); // anonymous ap
|
|
res = wm.autoConnect("AutoConnectAP","password"); // password protected ap
|
|
|
|
if(!res) {
|
|
Serial.println("Failed to connect or hit timeout");
|
|
// ESP.restart();
|
|
}
|
|
else {
|
|
//if you get here you have connected to the WiFi
|
|
Serial.println("connected...yeey :)");
|
|
}
|
|
}
|
|
|
|
void checkButton(){
|
|
// check for button press
|
|
if ( digitalRead(TRIGGER_PIN) == LOW ) {
|
|
// poor mans debounce/press-hold, code not ideal for production
|
|
delay(50);
|
|
if( digitalRead(TRIGGER_PIN) == LOW ){
|
|
Serial.println("Button Pressed");
|
|
// still holding button for 3000 ms, reset settings, code not ideaa for production
|
|
delay(3000); // reset delay hold
|
|
if( digitalRead(TRIGGER_PIN) == LOW ){
|
|
Serial.println("Button Held");
|
|
Serial.println("Erasing Config, restarting");
|
|
wm.resetSettings();
|
|
ESP.restart();
|
|
}
|
|
|
|
// start portal w delay
|
|
Serial.println("Starting config portal");
|
|
wm.setConfigPortalTimeout(120);
|
|
|
|
if (!wm.startConfigPortal("OnDemandAP","password")) {
|
|
Serial.println("failed to connect or hit timeout");
|
|
delay(3000);
|
|
// ESP.restart();
|
|
} else {
|
|
//if you get here you have connected to the WiFi
|
|
Serial.println("connected...yeey :)");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
String getParam(String name){
|
|
//read parameter from server, for customhmtl input
|
|
String value;
|
|
if(wm.server->hasArg(name)) {
|
|
value = wm.server->arg(name);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
void saveParamCallback(){
|
|
Serial.println("[CALLBACK] saveParamCallback fired");
|
|
Serial.println("PARAM customfieldid = " + getParam("customfieldid"));
|
|
}
|
|
|
|
void loop() {
|
|
if(wm_nonblocking) wm.process(); // avoid delays() in loop when non-blocking and other long running code
|
|
checkButton();
|
|
// put your main code here, to run repeatedly:
|
|
}
|