GithubHelp home page GithubHelp logo

khoih-prog / espasync_wifimanager Goto Github PK

View Code? Open in Web Editor NEW
288.0 19.0 72.0 2.68 MB

This is an ESP32 (including ESP32-S2 and ESP32-C3) / ESP8266 WiFi Connection Manager, using ESPAsyncWebServer, with fallback web configuration portal. Use this library for configuring ESP32, ESP8266 modules' WiFi, etc. Credentials at runtime. You can also specify static DNS servers, personalized HostName, fixed or random AP WiFi channel. With examples supporting ArduinoJson 6.0.0+ as well as 5.13.5- . Using AsyncDNSServer instead of DNSServer now.

License: MIT License

C++ 68.85% C 30.50% Shell 0.64%
espasync-wifimanager esp-wifimanager wifi config-portal async esp8266 esp32 staticip hostname wifi-credentials

espasync_wifimanager's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

espasync_wifimanager's Issues

typedef declaration conflicts

Khoih,

Please be patient, I'm new on platformio and github, so this is probably a very dumb question and not a real issue.

I started experimenting with ESPAsync_WiFiManager. I am having conflicting typedef declaration when trying to build the example Async_ConfigOnSwitch.ino (renamed it main.cpp on vscode). The declarations are on the underlying libraries, please see the build output below.

Do you see anything that I might have missed? Any hints?

Thank you

malves61


> Executing task in folder ESPbrute-digital-sensor-relay-MQTT: pio run <

Processing ESP8266 (platform: espressif8266; framework: arduino; board: d1_mini_pro)

Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini_pro.html
PLATFORM: Espressif 8266 (2.6.2) > WeMos D1 mini Pro
HARDWARE: ESP8266 80MHz, 80KB RAM, 16MB Flash
PACKAGES: 
 - framework-arduinoespressif8266 3.20704.7 (2.7.4) 
 - tool-esptool 1.413.0 (4.13) 
 - tool-esptoolpy 1.20800.0 (2.8.0) 
 - toolchain-xtensa 2.40802.200502 (4.8.2)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 40 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <ESP Async WebServer> 1.2.3
|   |-- <ESPAsyncTCP> 1.2.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <Hash> 1.0
|   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoJson> 6.17.2
|-- <ESPAsyncTCP> 1.2.2
|   |-- <ESP8266WiFi> 1.0
|-- <ESP_DoubleResetDetector> 1.0.3
|   |-- <LittleFS(esp8266)> 0.1.0
|-- <OneButton> 0.0.0-alpha+sha.eb583d713a
|-- <ArduinoJson> 6.17.2
|-- <Adafruit MQTT Library> 2.1.0
|-- <ESPAsync_WiFiManager> 1.3.0
|   |-- <ESP Async WebServer> 1.2.3
|   |   |-- <ESPAsyncTCP> 1.2.2
|   |   |   |-- <ESP8266WiFi> 1.0
|   |   |-- <Hash> 1.0
|   |   |-- <ESP8266WiFi> 1.0
|   |   |-- <ArduinoJson> 6.17.2
|   |-- <ESP_DoubleResetDetector> 1.0.3
|   |   |-- <LittleFS(esp8266)> 0.1.0
|   |-- <DNSServer> 1.1.1
|   |   |-- <WiFi101> 0.16.1
|   |-- <ESP8266WiFi> 1.0
|-- <DNSServer> 1.1.1
|   |-- <WiFi101> 0.16.1
|-- <ESP8266WiFi> 1.0
|-- <LittleFS(esp8266)> 0.1.0
|-- <WiFi101> 0.16.1
Building in release mode
Compiling .pio/build/ESP8266/src/main.cpp.o
src/main.cpp:324:4: warning: #warning Using DHCP IP [-Wcpp]
   #warning Using DHCP IP
    ^
Compiling .pio/build/ESP8266/libb94/ESP8266WiFi/WiFiServerSecureAxTLS.cpp.o
In file included from .pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager.h:597:0,
                 from src/main.cpp:347:
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h:994:3: warning: multi-line comment [-Wcomment]
   // Add option if didn't input/update SSID/PW => Use the previous saved Credentials. \
   ^
Compiling .pio/build/ESP8266/libb94/ESP8266WiFi/WiFiServerSecureBearSSL.cpp.o
Compiling .pio/build/ESP8266/libb94/ESP8266WiFi/WiFiUdp.cpp.o
Compiling .pio/build/ESP8266/libe61/ESPAsyncTCP/AsyncPrinter.cpp.o
Compiling .pio/build/ESP8266/libe61/ESPAsyncTCP/ESPAsyncTCP.cpp.o
Compiling .pio/build/ESP8266/libe61/ESPAsyncTCP/ESPAsyncTCPbuffer.cpp.o
Compiling .pio/build/ESP8266/libe61/ESPAsyncTCP/SyncClient.cpp.o
In file included from .pio/libdeps/ESP8266/WiFi101/src/common/include/nm_common.h:45:0,
                 from .pio/libdeps/ESP8266/WiFi101/src/socket/include/socket.h:60,
                 from .pio/libdeps/ESP8266/WiFi101/src/WiFiUdp.h:24,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/libraries/DNSServer/src/DNSServer.h:3,
                 from src/main.cpp:103:
.pio/libdeps/ESP8266/WiFi101/src/bsp/include/nm_bsp.h:110:23: error: conflicting declaration 'typedef long unsigned int uint32'
 typedef unsigned long uint32;
                       ^
In file included from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/tools/sdk/include/ets_sys.h:28:0,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/pgmspace.h:11,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/WString.h:29,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/IPAddress.h:24,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/ESP8266WiFi.h:31,
                 from src/main.cpp:101:
/home/marcelo/.platformio/packages/framework-arduinoespressif8266/tools/sdk/include/c_types.h:49:29: error: 'uint32' has a previous declaration as 'typedef unsigned int uint32'
 typedef unsigned int        uint32;
                             ^
In file included from .pio/libdeps/ESP8266/WiFi101/src/common/include/nm_common.h:45:0,
                 from .pio/libdeps/ESP8266/WiFi101/src/socket/include/socket.h:60,
                 from .pio/libdeps/ESP8266/WiFi101/src/WiFiUdp.h:24,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/libraries/DNSServer/src/DNSServer.h:3,
                 from src/main.cpp:103:
.pio/libdeps/ESP8266/WiFi101/src/bsp/include/nm_bsp.h:133:22: error: conflicting declaration 'typedef long int sint32'
 typedef signed long  sint32;
                      ^
In file included from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/tools/sdk/include/ets_sys.h:28:0,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/pgmspace.h:11,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/WString.h:29,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/IPAddress.h:24,
                 from /home/marcelo/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/ESP8266WiFi.h:31,
                 from src/main.cpp:101:
/home/marcelo/.platformio/packages/framework-arduinoespressif8266/tools/sdk/include/c_types.h:52:29: error: 'sint32' has a previous declaration as 'typedef int sint32'
 typedef signed int          sint32;
                             ^
Compiling .pio/build/ESP8266/libe61/ESPAsyncTCP/tcp_axtls.c.o
Compiling .pio/build/ESP8266/lib607/Hash/Hash.cpp.o
Archiving .pio/build/ESP8266/libb51/libArduinoJson.a
Indexing .pio/build/ESP8266/libb51/libArduinoJson.a
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/AsyncEventSource.cpp.o
In file included from .pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager.h:597:0,
                 from src/main.cpp:347:
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h: In member function 'void ESPAsync_WiFiManager::scan()':
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h:559:16: warning: unused variable 'res' [-Wunused-variable]
           bool res=WiFi.getNetworkInfo(i, wifiSSIDs[i].SSID, wifiSSIDs[i].encryptionType, wifiSSIDs[i].RSSI, wifiSSIDs[i].BSSID, wifiSSIDs[i].channel, wifiSSIDs[i].isHidden);
                ^
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h: In member function 'void ESPAsync_WiFiManager::criticalLoop()':
src/main.cpp:51:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define TIME_BETWEEN_MODELESS_SCANS       30000
                                           ^
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h:670:47: note: in expansion of macro 'TIME_BETWEEN_MODELESS_SCANS'
     if (scannow == -1 || millis() > scannow + TIME_BETWEEN_MODELESS_SCANS)
                                               ^
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h: In member function 'boolean ESPAsync_WiFiManager::startConfigPortal(const char*, const char*)':
src/main.cpp:48:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define TIME_BETWEEN_MODAL_SCANS          20000
                                           ^
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h:800:48: note: in expansion of macro 'TIME_BETWEEN_MODAL_SCANS'
     if ( scannow == -1 || millis() > scannow + TIME_BETWEEN_MODAL_SCANS)
                                                ^
Archiving .pio/build/ESP8266/libb94/libESP8266WiFi.a
In file included from .pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager.h:597:0,
                 from src/main.cpp:347:
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h: In member function 'boolean ESPAsync_WiFiManager::isIp(String)':
.pio/libdeps/ESP8266/ESPAsync_WiFiManager/src/ESPAsync_WiFiManager-Impl.h:2166:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < str.length(); i++)
                                  ^
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/AsyncWebSocket.cpp.o
Indexing .pio/build/ESP8266/libb94/libESP8266WiFi.a
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/SPIFFSEditor.cpp.o
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/WebAuthentication.cpp.o
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/WebHandlers.cpp.o
Archiving .pio/build/ESP8266/libe61/libESPAsyncTCP.a
Indexing .pio/build/ESP8266/libe61/libESPAsyncTCP.a
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/WebRequest.cpp.o
Archiving .pio/build/ESP8266/lib607/libHash.a
Indexing .pio/build/ESP8266/lib607/libHash.a
Compiling .pio/build/ESP8266/lib8af/ESP Async WebServer/WebResponses.cpp.o
*** [.pio/build/ESP8266/src/main.cpp.o] Error 1
In file included from .pio/libdeps/ESP8266/ESP Async WebServer/src/SPIFFSEditor.cpp:1:0:
.pio/libdeps/ESP8266/ESP Async WebServer/src/SPIFFSEditor.h:16:101: warning: 'SPIFFS' is deprecated (declared at /home/marcelo/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:269): SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
     SPIFFSEditor(const String& username=String(), const String& password=String(), const fs::FS& fs=SPIFFS);
                                                                                                     ^
====================================================================== [FAILED] Took 3.89 seconds ======================================================================

Environment    Status    Duration
-------------  --------  ------------
ESP8266        FAILED    00:00:03.886
================================================================ 1 failed, 0 succeeded in 00:00:03.886 ================================================================
The terminal process "pio 'run'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

SyncClient.cpp: fatal error: interrupts.h: No such file

...\Arduino\libraries\ESPAsyncWebServer-master\src\SyncClient.cpp:25:24: fatal error: interrupts.h: No such file or directory

Hello. Help me understand what's going on. All your websocket-related projects have stopped compiling in the Arduino IDE for ESP 32. The same error always appears:
"SyncClient.cpp: fatal error: interrupt. h: No such file..."
My project with your libraries stopped compiling because of this error. I tried to take your example "Async_ESP 32_Webserver", which my project is based on, but compiling your example also ends up with the same error. I tried reinstalling the Arduino IDE, but the result is the same. What could be the problem. The request goes to the ESP8266 library, right? What and where to fix, so that the compiler does not access this library. I read that this bug is fixed in platformio, but I'm not a programmer and it's a complicated thing for me. Thank you in advance.

Documentation lacking minimal example

Hello and thanks for the library.

The original ESP8266 WifiManager library can be used with default settings using 3 lines of code: 1 include and 2 lines in setup(). (See example: https://github.com/tzapu/WiFiManager/tree/master/examples/AutoConnect). The example with same name in ESPAsync_WiFiManager has whooping 500 lines of code, and it's not immediately clear what it does and what to pull in my code to have default functionality, e.g. start captive portal and connect the board to WiFi without having to hardcode the ESSID/password.
Please, provide a minimal example of this typical usecase, if one is possible.

Single SSID instead of multiple SSIDs

Is it possible to show only single SSID on config portal instead of SSID1 and SSID2 on config portal? Is there any to disable it or we need to make change in src files?

Non-blocking mode

Any chance the non-blocking option will be available soon?
I was just added to the development branch of the original WiFiManager: https://github.com/tzapu/WiFiManager/tree/development

I think this would be very useful for everyone running devices that should be able to fully operate in STA and AP mode but give the user the ability to switch between those 2 modes on demand.

My programming skills are limited, but if I can help/support to implement this feature I'd be happy to help.

Error esp_littlefs.c 'utime_p'

Hello Khoih,
First of all thank you for this great library shared with us.
If i can, i'll gonna use your library for my home project but i could not build any examples. Checked closed issues for fix by myself but im newbie little bit, maybe you know the way to fix.
Im using PlatformIO on Atom in ubuntu.

This is my platformio.ini;
env

Im not writing all this 665 lines for not to pollute the post //And dont know how can I write beautiful yet.
Example is Async_AutoConnect.ino under the "examples" i just copied and pasted with any changes.
Build is giving this results;
build
I can see something wrong with all littlefs but don't know how to fix.
I want to autoconnect my iot and watching online sensor data am I on right way? :))

How to automatics reconnect to the WiFi network if restart the WiFi router?

Is your feature request related to a problem? Please describe.

I getting started to use with "Async_ConfigOnDRD_ESP32_minimal.ino" and it works fine but while ESP32 DevModule(ESP32-WROOM-32) connected to WiFi router but getting the some problem and restart WiFi router, then ESP32 doesn't know it loss connection.

Describe the solution you'd like

I not sure may you already have solution, with my opinion I like to ESP32 automatic disconnect after heartbeat timeout then automatic try to reconnect with some timeout period to the previous connect WiFi AP.

Describe alternatives you've considered

Alternative way is using Asynchronous event on("disconnect") to call some function to re-connect to WiFi router

Additional context

NOTE: If you have any solution for this ideas please suggest me.

Thank you

Help with example DRD MQTT Medium

First of all, thanks for the work done. I'm not a programmer, so I ask for help.

How to add a subscription and topic poll to example?

ESP32 static IP not saved after restarting the device

Hello. I am learning about esp32 and trying your library. I am using the example program:
Async_ESP32_FSWebServer_DRD

I have not modified the code yet. When I run the program. A new network appeared
image

I am able to connect to my device by typing the ip address :
192.168.1.100
and change some configurataion:

image

Now I can see that the device connects with the new parameters: (I have set a new static ip 192.168.4.210)

image

However, the thing that I do not fully understand, when i restart my esp32 device, it goes changes my static ip (192.168.4.210) to:
192.168.2.232
image

Is that normal? Should it not save my configuration even after I restart the device?

Also, I am unsure about:
Open http://async-esp32fs.local/edit to see the file browser
Using username = admin and password = admin

Opening this webpage in a browswer fails everytime. How do i use it?
image

Appreciate any sort of advice. Thanks in advance.

VERSION 1.4.2 NO MULTIWIFI

Hi, good job !! The las Issue in 1.4.1 it´s now Ok, but ... ...
At the moment, not remember stored SSID and Pass, and only use the last pair used for connection.
I use the Async_ConfigOnStartup.ino 1.4.2, and change #define NUM_WIFI_CREDENTIALS from 2 to 4

My ESP8266 connect and remember perfectly my mobile AP, in all the test, but if I switch off my mobile AP, and config SSID and Password for use my fixed router AP, ESP8266 remember only my fixed AP, and not connect with mobile AP. (don´t store data)

thanks

Add support to ESP32-S2. Help with an example.

Hi,

This is my first try with this wifi manager.

ESP32-S2 board.
fresh arduino IDE 1.8.13
I have tested that board works.

Tested with 2 boards. Same results.

Added your lib: ESPAsync_WiFiManager

Example: Async_AutoConnect.ino (no changes!)

Compile:
image

I have connected to AutoConnectAP.
I have opened tab with 192.168.100.1

My Serial:
image

Starting Async_AutoConnectAP using LittleFS on ESP32S2_DEV ESPAsync_WiFiManager v1.4.1 [WM] RFC925 Hostname = AutoConnectAP [WM] setAPStaticIPConfig [WM] setSTAStaticIPConfig [WM] Set CORS Header to : Your Access-Control-Allow-Origin Stored: SSID = espressif, Pass = Got stored Credentials. Timeout 120s We haven't got any access point credentials, so get them now [WM] WiFi.waitForConnectResult Done [WM] SET AP [WM] Configuring AP SSID = ESP_5A1DF7C_AutoConnectAP [WM] AP PWD = MyESP_5A1DF7C [WM] AP Channel = 7 [WM] Custom AP IP/GW/Subnet = 192.168.100.1 192.168.100.1 255.255.255.0 [WM] AP IP address = 192.168.100.1 [WM] HTTP server started [WM] ESPAsync_WiFiManager::startConfigPortal : Enter loop

My chrome inspector for 192.168.100.1
Most of the time Pending ...
image

Problem:

PC Windows 10
99% of the time i get white blank page on 192.168.100.1
1% i get menu page. If i am lucky with that i can click buttons but nothing happens ... i am redirected for example to 192.168.100.1/i .. which stays white blank as any other page

Android: 100% i get white blank page

What i am doing wrong?

ConfigOnSwitch example flawed?

I think your ConfigOnSwitch example might be flawed but I cannot be exactly sure (yet). The issue is that if the device cannot connect to one of the configured WiFi networks it keeps looping ignoring that pressed button to start the config portal.

I took your example and simplified it for my needs:

  • remove the ESP8266/ESP32 if-defs as I only need ESP32
  • remove the features I don't need
  • refactored duplicated code into dedicated functions
  • put all code into a wifimanager.h that I can use from my main setup()/loop()

-> see Gist https://gist.github.com/marcelstoer/914ff2ac58a42a957dfa071c9c5c8acd
-> use as below

void setup() {
  Serial.begin(115200);

  initWifiManager(String(deviceId));
  log_i("WiFi manager initialized.");
}

void loop() {
  // check button status here (to see if to start config portal)

  // internally checks WiFi connectivity in an interval i.e. not necessarily every time you call
  // this function
  checkWifiStatus();

  // app functions go here
}

As far as I understand the problem is the while-loop in connectMultiWiFi() at https://github.com/khoih-prog/ESPAsync_WiFiManager/blob/master/examples/Async_ConfigOnSwitch/Async_ConfigOnSwitch.ino#L388.

The function sequence is like this: loop() -> check_status() -> check_WiFi() -> connectMultiWiFi(). While trying to connect to one of the WiFis in that while-loop pressing the button to start the config portal has no effect! You would have to press the button for a really long time until the loop ends, the sequence above returns to loop() and the button status is evaluated again.

Can I use this?

Using a library should be simple, but this thing has gotten so complicated with the number of configuration variables, etc that it's hard to see the forest for the trees.

What I want to do is to add something like wifimanager to my existing app where I have a 9 page asyc web server with jquery and style sheets, etc, with my own NTP time server, etc. I found it much easier to start with a simple auto-connect to my local LAN for development. But I want the product to be user configured for his/her local network and/or for it to work in stand-along AP mode.

From what I've read it looks like what I need to do is add another IP address for my site, but I think yours may be overly complicated.

So what I need:

  1. Start in AP mode, display available networks and capture login info. Try to connect and remember the connection, possibly adding to other connections.
  2. If logged in, switch to my webserver.
  3. Provide an option in AP mode to bypass the login stuff, and operate stand-alone, for example, if not in range of a LAN., but also connect to my web server.
  4. There's a lot of presumption in your code about file systems, etc. I already have SPIFFS set up, And as I mentioned, NTP. You are not the center of the universe, just the wifi configuration manager. I think it would be better if you had separate examples for SPIFF and LF than all the ifdefs etc.
  5. It also has to operate on cell-phones, why do I have to specifically configure for this?

Delete Stored SSID and Pass

Hi, good job!
I have a trouble, with ESPAsync_WiFiManager:
1.- Start Captive portal, and I config SSID and Password for mi mobile wifi AP.
2.- Save data OK.
3.- manual Reset ESP8266 and start Config Portal for 30sg (I configure), and next connect with my mobile AP perfect.
4.- If I switch off my mobile AP, and reset ESP8266, then:

ESPAsync_WiFiManager Version v1.3.0
[WM] RFC925 Hostname = ConfigOnStartup
Stored: SSID = , Pass =
Opening configuration portal.Open Config Portal without Timeout: No stored Credentials

And no Stored SSID and no Pass !!!

Can you help me ?
Thanks

Connection problem

Hello friend, I would first like to congratulate you on all content shared and always updated with us.

I carried out tests using the Async_ConfigOnSwitch with version 1.4.2 modifying only the type of connection in the code and realized the following problems:
1- Using STA-mode DHCP the station ip is always 255.255.255.255
2 Using STA-mode StaticIP the first connection works fine as DHCP, it also works fine after setting a static IP using the config in AP, but when rebooting it goes back to DHCP. The station ip is changed to default Station IP just by opening and closing the AP.

A tip: I noticed that the original loop is stopped when the wifi is disconnected, to solve this I used multitasking where I put a task for connections and another task for reading sensors.

Extremely long response time / connection timeouts

Hello!
I would like to share a problem which I have been experiencing now for roughly a week. On my ESP8266, the AsyncWebServer is often responding at a rate which is extremely slow (25s - up to 3 minutes). The sketch being used is a modified example (specifically, the DRD-Esp8266 Webserver). Here is the relevant code for webserver setup:

    webServer.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
       request->send(200, "text/plain", "hello there!");
    });

    webServer.on("/all", [](AsyncWebServerRequest * request)
    {
      String json('{');
      json += "\"heap\":" + String(ESP.getFreeHeap());
      json += ", \"analog\":" + String(analogRead(A0));
      json += ", \"gpio\":" + String((uint32_t)(((GPI | GPO) & 0xFFFF) | ((GP16I & 0x01) << 16)));
      json += "}";
      request->send(200, "text/json", json);
      json.clear();
    });
    webServer.begin();

When connecting to either "/" or "/all", sometimes the response is extremely quick (3ms) or incredibly slow / times out.
Here are the request headers (they are the same for both pages, and do not change if the response is slow/fast)

GET / HTTP/1.1
Host: 192.168.1.69
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9

Similarily, here is the respone:

HTTP/1.1 200 OK
Content-Length: 12
Content-Type: text/plain
Connection: close
Accept-Ranges: none

The timing console shows that the initial connection hangs (anywhere from instant to 10+ seconds), and then the Waiting(TTFB) hangs for a long time too (10ms --- 5+ minutes).

This happens randomly, and there is no indication that it is caused by memory. The heap available when making requests is consistently at ~32872, and at lowest drops to about 2.9.

If the request does not got through, this is the error:
(failed)net::ERR_CONNECTION_TIMED_OUT

There are no files being served, nothing.
Interestingly, the captive portal almost always works and is always pretty quick to respond.
I'm really confused what could be causing this. Iv'e tested on 2 seperate ESP8266 and both share similar results. As always, I am loving the library.

connectMultiWifi not declared in this scope...

Good afternoon.

Please check the below log to see full error. None of the examples in this library work.

Removing the "connectMultiWifi" function does indeed fix the error and allows compile but it breaks the program as the WiFi hangs and does not connect.

erbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/esp12e.html
PLATFORM: Espressif 8266 (2.6.2) > Espressif ESP8266 ESP-12E
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:
 - framework-arduinoespressif8266 3.20704.0 (2.7.4)
 - tool-esptool 1.413.0 (4.13)
 - tool-esptoolpy 1.20800.0 (2.8.0)
 - toolchain-xtensa 2.40802.200502 (4.8.2)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 35 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <ESP Async WebServer> 1.2.3
|   |-- <ESPAsyncTCP> 1.2.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <Hash> 1.0
|   |-- <ESP8266WiFi> 1.0
|-- <ESPAsyncTCP> 1.2.2
|   |-- <ESP8266WiFi> 1.0
|-- <ESPAsyncTCP-esphome> 1.2.3
|   |-- <ESP8266WiFi> 1.0
|-- <ESPAsyncWebServer-esphome> 1.2.7
|   |-- <ESPAsyncTCP-esphome> 1.2.3
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <Hash> 1.0
|   |-- <ESPAsyncTCP> 1.2.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266WiFi> 1.0
|-- <ESP_WifiManager> 1.1.1
|   |-- <DNSServer> 1.1.1
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266WiFi> 1.0
|-- <ESPAsync_WifiManager> 1.1.1
|   |-- <DNSServer> 1.1.1
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266WiFi> 1.0
|   |-- <ESP Async WebServer> 1.2.3
|   |   |-- <ESPAsyncTCP> 1.2.2
|   |   |   |-- <ESP8266WiFi> 1.0
|   |   |-- <Hash> 1.0
|   |   |-- <ESP8266WiFi> 1.0
|-- <DNSServer> 1.1.1
|   |-- <ESP8266WiFi> 1.0
|-- <ESP8266mDNS> 1.2
|   |-- <ESP8266WiFi> 1.0
|-- <ESP8266WiFi> 1.0
|-- <LittleFS(esp8266)> 0.1.0
Building in release mode
Compiling .pio\build\esp12e\src\main.cpp.o
src\main.cpp:182:4: warning: #warning Using static IP [-Wcpp]
   #warning Using static IP
    ^
In file included from .pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager.h:592:0,
                 from src\main.cpp:199:
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h:992:3: warning: multi-line comment [-Wcomment]
   // Add option if didn't input/update SSID/PW => Use the previous saved Credentials. \
   ^
In file included from src\main.cpp:82:0:
.pio\libdeps\esp12e\ESPAsyncWebServer-esphome\src/SPIFFSEditor.h:16:101: warning: 'SPIFFS' is deprecated (declared at C:\Users\Tyler\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FS.h:269): SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
     SPIFFSEditor(const String& username=String(), const String& password=String(), const fs::FS& fs=SPIFFS);
                                                                                                     ^
In file included from .pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager.h:592:0,
                 from src\main.cpp:199:
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h: In member function 'void ESPAsync_WiFiManager::scan()':
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h:557:16: warning: unused variable 'res' [-Wunused-variable]
           bool res=WiFi.getNetworkInfo(i, wifiSSIDs[i].SSID, wifiSSIDs[i].encryptionType, wifiSSIDs[i].RSSI, wifiSSIDs[i].BSSID, wifiSSIDs[i].channel, wifiSSIDs[i].isHidden);
                ^
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h: In member function 'void ESPAsync_WiFiManager::criticalLoop()':
src\main.cpp:48:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define TIME_BETWEEN_MODELESS_SCANS       30000
                                           ^
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h:668:47: note: in expansion of macro 'TIME_BETWEEN_MODELESS_SCANS'
     if (scannow == -1 || millis() > scannow + TIME_BETWEEN_MODELESS_SCANS)
                                               ^
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h: In member function 'boolean ESPAsync_WiFiManager::startConfigPortal(const char*, const char*)':
src\main.cpp:45:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define TIME_BETWEEN_MODAL_SCANS          20000
                                           ^
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h:798:48: note: in expansion of macro 'TIME_BETWEEN_MODAL_SCANS'
     if ( scannow == -1 || millis() > scannow + TIME_BETWEEN_MODAL_SCANS)
                                                ^
In file included from .pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager.h:592:0,
                 from src\main.cpp:199:
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h: In member function 'boolean ESPAsync_WiFiManager::isIp(String)':
.pio\libdeps\esp12e\ESPAsync_WifiManager\src/ESPAsync_WiFiManager-Impl.h:2164:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < str.length(); i++)
                                  ^
src\main.cpp: In function 'void check_WiFi()':
src\main.cpp:267:22: error: 'connectMultiWiFi' was not declared in this scope
     connectMultiWiFi();
                      ^
*** [.pio\build\esp12e\src\main.cpp.o] Error 1  

Compile Error on Platformio

Hello,

I try to compile the Async_ESP_FSWebServer example. On compiling I get this error:
image

My platformio.ini looks like:

[env:wemos_d1_mini32]
platform = espressif8266
board = d1_mini
board_build.filesystem = littlefs
framework = arduino
monitor_speed = 115200
lib_deps =
ESP Async WebServer
ESPAsyncTCP

What I am missing?

kind regards

Server Connection timeouts on FSWebserver

Hello there.

I have finally got most of this library working.

I'm currently using the "FSWebserver" sketch, pretty much exact. However one thing I have consistently noticed is that the server is often taking too long to respond, thus giving the "ERR_CONNECTION_TIMED_OUT" message on browser (tried IE, chrome, firefox).

I do not have any strange logs, and the heart-beat in the serial monitor remains active even when the server times out.

Another consistent thing that I notice is that it takes a very long time for the files stored in flash to load. I am wondering if maybe littleFS is taking too long to load this data? And if so, how can you increase the keep-alive timeout to allow the files to be rendered? Often times, the HTML and CSS won't load. Or if they do, the images won't. Nothing is cached either, so refreshing the page will often either timeout or something won't load properly.

However... even routes that do-not use littleFS or stuff stored on flash, such as "/heap" timeout as well... no weird logs, nothing comes up in Serial monitor.

Thanks! Keep up the great library. It is so useful.

Auto(re)connect by using multiwifi problem

Describe the bug

I using multiwifi to auto(re)connect wifi router as link below:-
https://github.com/khoih-prog/ESPAsync_WiFiManager#16-using-multiwifi-autoreconnect-feature

The problem after restart wifi router, then ESP32 with ESPAsync_WiFiManager library is try to reconnect to wifi router correctly, BUT when WiFi router ready to use, the ESP32 not connect to WiFi until push RESET button and debugging message on serial port shown as below:-

[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:187] run(): [WIFI] Connecting Failed (0).

Then no debugging message any more

Steps to Reproduce

  1. Run library example Async_AutoConnect.ino
  2. Turn-OFF Wifi Router
  3. Serial port debugging message shown below message every 500 mSec (default on example code: "Async_AutoConnect.ino" -- LINE 321
    Debugging message:

WiFi lost. Call connectMultiWiFi in loop
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!

  1. Turn-ON WiFi router and waiting ESP32 reconnect, when the WiFi router ready then ESP32 not connect to WiFi until push RESET button and stop debugging message as below:-

[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:187] run(): [WIFI] Connecting Failed (0).

sometime like this:-

[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:187] run(): [WIFI] Connecting Failed (0).

Expected behavior

Expected ESP32 auto(re)connect to WiFi router and debugging message status like example source code, it look like below:-

SSID: ......, RSSI= ......
Channel: ......., IP Addresss: .......

Actual behavior (Debugging log)

  1. ESP32 not connect to WiFi until push RESET button
  2. No debugging message any more and stop like below:-

WiFi lost. Call connectMultiWiFi in loop
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:191] run(): [WIFI] no matching wifi found!
[E][WiFiMulti.cpp:187] run(): [WIFI] Connecting Failed (0).

Information

Please ensure to specify the following:

  • Platform.io version 1.57.0
  • ESP32 DevModule (ESP32-WROOM-32) with ESPAsync_WiFiManager 1.9.1
  • Run library example "Async_AutoConnect.ino" then Turn-Off and Turn-On WiFi router (As in ### Step to Reproduce)
  • Anything that might be relevant in your opinion, such as:
    • MacOS BigSur 11.4
    • WPA/WPA2, Home networks WiFi 2.4GHz

Open configuration page when connected to a wifi

Hello,
After connecting to an outside wifi network, I got the IP address of my ESP-32 board.
Can I open the configuration page when my ESP has been connected to a Wifi (not in access point mode)? How can I do that?
Thank you!

fatal error: ESPAsyncWebServer.h: No such file or directory

Describe the bug

Hello, I'm getting only this error when compile sketch:

C:\Users\flavi\Documents\Arduino\libraries\ESPAsync_WiFiManager\src/ESPAsync_WiFiManager.h:73:33: fatal error: ESPAsyncWebServer.h: No such file or directory

Information

Please ensure to specify the following:

  • Arduino IDE version: 1.8.13
  • ESP32
  • OS: Windows 10 x64

Minor: examples/Async_ESP32_FSWebServer/ wrongly uses FileFS.begin(true)

(please also see lorol/LITTLEFS#27 for more context)

I'm using your library and your examples as a starting point for my project. Thanks for sharing this!

I noticed that the following code

// Format SPIFFS if not yet
  if (!FileFS.begin(true))
  {
    Serial.print(FS_Name);
    Serial.println(F(" failed! AutoFormatting."));
  }

seems to assume that FileFS.begin(true) returns false if the SPIFFS was un-initialized and needed to be formatted. In reality that call returns true if the mount has been successful, even if that required an auto-format, false only when the mount fails for whatever reason.

If the debug output is enabled, the LittleFS library debug messages overwrite any debug print from the Arduino thread, causing additional comprehension problems

If the call FileFS.begin(true) fails, that means that there is no SPIFFS, and your example should abort

The above applies to all your examples using SPIFFS for ESP32

load config file issue with ESP8266 (LittleFS and SPIFFS)

Hello, I'm using this board, which I can't perfectly identify. I believe the flash size is 1-2MB, based on the Sketch size %, and since using 4MB flash partitions results in failure to begin either format.
esptool.py says Auto-detected Flash size: 2MB.

When I run the example code from Async_ConfigOnSwitch, I see a few things. I've manually censored SSID and password in this serial output:

Stored: SSID = ssid , Pass = password
[WM] * Add SSID =  ssid , PW =  password
Got stored Credentials. Timeout 120s for Config Portal
[WM] LoadWiFiCfgFile 
[WM] failed

So it appears that the last known working configuration is recovered from the esp8266 flash. (As detailed here)
The file system begins correctly, but FileFS.open(CONFIG_FILENAME, "r") returns false.

Then, I run the config portal and input the wifi info! It saves correctly!

[WM] SaveWiFiCfgFile 
[WM] OK

However, if I reset the device, I get the same input for LoadWifiCfgFile as before. file is false, and the load fails. I can't figure out why this is.

I wrote this separate small sketch which simply reads the config file. If I flash this sketch, instead of resetting the Async_ConfigOnSwitch sketch, it properly loads the file and prints it with no issue.

So it appears to only run into this problem only occurs somewhere during Async_ConfigOnSwitch when starting, strangely. It reproduces on both SPIFFS and LittleFS. I'm not entirely convinced it's not my hardware, to be honest.

ESP8266 Clear SSID and Pass

Hi, good job!
I have a trouble, with ESPAsync_WiFiManager:
1.- Start Captive portal, and I config SSID and Password for mi mobile wifi AP.
2.- Save data OK.
3.- manual Reset ESP8266 and start Config Portal for 30sg (I configure), and next connect with my mobile AP perfect.
4.- If I switch off my mobile AP, and reset ESP8266, then:

ESPAsync_WiFiManager Version v1.3.0
[WM] RFC925 Hostname = ConfigOnStartup
Stored: SSID = , Pass =
Opening configuration portal.Open Config Portal without Timeout: No stored Credentials

And no Stored SSID and no Pass !!!

Can you help me ?
Thanks

Call to ESPAsync_wifiManager.getTimezoneName() only works during initial config

I'm trying to use the new ESPAsync_wifiManager.getTimezoneName() function to set the timezone via configTzTime() on every boot. In my testing it only returns a result when I am in the initial config code path.

For example, if I trigger the initial config path by calling ESPAsync_wifiManager.resetSettings(), my call to ESPAsync_wifiManager.getTimezoneName(); correctly returns my time zone. If I just do a 'normal' boot, it returns an empty string.

I looked at the 20+ samples and all of them only call getTimezoneName when they are in their initialConfig state as well. Is this a known limitation? It seems like you should be able to set the timezone on 'regular' boots as well.

I may just be calling things incorrectly. My code is based on the Async_AutoConnect_ESP32_minimal sample - how should I be modifying it to correctly get the timezone?

  // connect to wifi or enter AP mode so it can be configured
  DB_PRINT("\nStarting Kaleidoscope on " + String(ARDUINO_BOARD));
  DB_PRINTLN(ESP_ASYNC_WIFIMANAGER_VERSION);
  ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, &dnsServer, "Kaleidoscope");
  //ESPAsync_wifiManager.resetSettings();   //reset saved settings
  ESPAsync_wifiManager.setAPStaticIPConfig(IPAddress(192, 168, 132, 1), IPAddress(192, 168, 132, 1), IPAddress(255, 255, 255, 0));
  ESPAsync_wifiManager.autoConnect("KaleidoscopeAP");
  if (WiFi.status() == WL_CONNECTED)
  {
    DB_PRINT(F("Connected. Local IP: "));
    DB_PRINTLN(WiFi.localIP());
  }
  else
  {
    DB_PRINTLN(ESPAsync_wifiManager.getStatus(WiFi.status()));
  }
  String tempTZ = ESPAsync_wifiManager.getTimezoneName();
  if (tempTZ.length())
    configTzTime(tempTZ.c_str(), "us.pool.ntp.org", "time.nist.gov", "0.pool.ntp.org");
  DB_PRINTF("Current timezone is %s\r\n", tempTZ.c_str());

Trying to install inside Arduino IDE but get error...

Hi, got Arduino IDE 1.8.13 and are using ESP_WiFiManager today with success.
Wanted to update to ESPAsync_WiFiManager but at library install I get following error in A-IDE:

no protocol: java.lang.RuntimeException: java.net.MalformedURLException: no protocol: at cc.arduino.contributions.libraries.ui.LibraryManagerUI.lambda$onInstallPressed$4(LibraryManagerUI.java:248) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.MalformedURLException: no protocol: at java.net.URL.<init>(URL.java:593) at java.net.URL.<init>(URL.java:490) at java.net.URL.<init>(URL.java:439) at cc.arduino.contributions.DownloadableContributionsDownloader.download(DownloadableContributionsDownloader.java:64) at cc.arduino.contributions.DownloadableContributionsDownloader.download(DownloadableContributionsDownloader.java:60) at cc.arduino.contributions.libraries.LibraryInstaller.performInstall(LibraryInstaller.java:155) at cc.arduino.contributions.libraries.LibraryInstaller.install(LibraryInstaller.java:125) at cc.arduino.contributions.libraries.ui.LibraryManagerUI.lambda$onInstallPressed$4(LibraryManagerUI.java:237) ... 1 more
Any idea what is wrong or how to resolve this ?

DHCP Autoassign hangs and does not properly connect network.

Hello.
I have encountered an issue with this library with the DHCP not automatically assigning an IP/Gateway when the ESP82666 enters Station mode.

Here is a quick rundown of the logs I am receiving:

[WM] ESPAsync_WiFiManager::startConfigPortal : Enter loop
[WM] Connecting to new AP
[WM] Previous settings invalidated
[WM] Can't use Custom STA IP/GW/Subnet
[WM] Connect to new WiFi using new IP parameters
[WM] Connected after waiting (s) : 6.75
[WM] Local ip = (IP unset)
[WM] Connection result:  WL_NO_SSID_AVAIL
[WM] Failed to connect
Not connected to WiFi but continuing anyway.
[WM] * Add SSID =  SSIDNAMEHERE , PW =  networkPW
[WM] SaveWiFiCfgFile
[WM] OK
After waiting 0.00 secs more in setup(), connection result is WL_IDLE_STATUS
HTTP server started @ (IP unset)

After displaying this, it enters a loop without ever managing to gain a connection to the network.

WiFi lost. Call connectMultiWiFi in loop
[WM] ConnectMultiWiFi with :
[WM] * Additional SSID =  SSIDNAMEHERE, PW =  networkPW
[WM] Connecting MultiWifi...
[WM] WiFi not connected
F

Some notable configuration settings:

#define USER_DHCP_IP true

#if ( USE_DHCP_IP || ( defined(USE_STATIC_IP_CONFIG_IN_CP) && !USE_STATIC_IP_CONFIG_IN_CP ) )
  // Use DHCP
  #warning Using DHCP IP
  IPAddress stationIP   = IPAddress(0, 0, 0, 0);
  IPAddress gatewayIP   = IPAddress(192, 168, 1, 0);
  IPAddress netMask     = IPAddress(255, 255, 255, 0);

I have tried many times to re-upload the sketch, wipe the flash, etc. Oddly enough, I had it working at one point and made some modifications to sketch then reuploaded, and it stopped working.

Great library BTW! It's incredibly useful and feature filled.

Holy shit my friend! You are the wizard of oz

Sorry for "Missusing" the issue tracker - but there is no other way to say thank you somehow! THANK YOU!!!! I want to spent you some beer - or some more, so please contact me via github for your paypal.

Mike.

Config portal in client mode

I have an application where i am happy to user the WiFiManager.
Since I added some config parameters I wondered if it is
possible to access the Portal also in Client mode, when I
am connected to a hotspot.
These would easy the process of changing parameters here.

Exception 9: LoadStoreAlignmentCause: Load or store to an unaligned address

Hi, I'm trying to use this useful library with "Dynamic Params". I defined the struct as reported at end, but when I try to Serial print the value value of SENSOR_TYPE (Serial.print("TIPO SENSORE ");Serial.println(SENSOR_TYPE);) I get the exception as in subject.
Can you help me?
Thank you.

#define INFLUXDB_URL_LEN 251
char INFLUXDB_URL[INFLUXDB_URL_LEN + 1] = "http://influx.sapacasa.it:8086";

#define INFLUXDB_NAME_LEN 31
char INFLUXDB_NAME[INFLUXDB_NAME_LEN + 1] = "domus";

#define INFLUXDB_USER_LEN 31
char INFLUXDB_USER[INFLUXDB_USER_LEN + 1] = "usor";

#define INFLUXDB_PASS_LEN 31
char INFLUXDB_PASS[INFLUXDB_PASS_LEN + 1] = "usor";

#define SENSOR_NAME_LEN 31
char SENSOR_NAME[SENSOR_NAME_LEN + 1] = "SonOff";

#define SENSOR_TYPE_LEN 11
char SENSOR_TYPE[SENSOR_TYPE_LEN + 1] = "UNKNOW";

#define SENSOR_LOCATION_LEN 31
char SENSOR_LOCATION[SENSOR_LOCATION_LEN + 1] = "stanza letto";

#define SENSOR_BOOT_STATE_LEN 12
char SENSOR_BOOT_STATE[SENSOR_BOOT_STATE_LEN + 1]   = "ultimo";

MenuItem myMenuItems [] = {
  { "ixul", "Url InfluxDb",      INFLUXDB_URL,  INFLUXDB_URL_LEN  },
  { "ixdb", "Schema Influx",     INFLUXDB_NAME, INFLUXDB_NAME_LEN },
  { "ixun", "Utente Influx",     INFLUXDB_USER, INFLUXDB_USER_LEN },
  { "ixup", "Password Influx",   INFLUXDB_PASS, INFLUXDB_PASS_LEN },
  { "snnm", "Nome Sensore",      SENSOR_NAME,   SENSOR_NAME_LEN },
  { "sndv", "Tipo Sensore",      SENSOR_TYPE,   SENSOR_TYPE_LEN },
  { "ubic", "Ubicazione",        SENSOR_LOCATION, SENSOR_LOCATION_LEN },
  { "bste", "Stato iniziale",    SENSOR_BOOT_STATE, SENSOR_BOOT_STATE_LEN },
};

uint16_t NUM_MENU_ITEMS = sizeof(myMenuItems) / sizeof(MenuItem);  //MenuItemSize;

Not working when not connected to Serial

The WiFi Manager doesn't work when powering the ESP32 over its VIN Port, but does when powering it through USB. I'm simply using the Code from the Async_AutoConnect_ESP32_minimal.ino example. I already remove the while (!Serial); delay(200); line. Is there a simple fix for this?

question ModelessConnect & WiFiServer

hi.
(sorry. poor english.)

I am testing the ModelessConnect example.

In addition, an FTP server (using WiFiServer) is used together.

ModelessConnect cannot connect to the router after rebooting after configuring the router in the portal.

Can't I use it with WifiServer(FTP server)?

Please help.


  • device: ESP32

  • IDE : platformIO/Arduino

  • simple example

void setup()
{
	Serial.begin(115200);
	Serial.flush();
	delay(50);

	setupModelessConnect();  // ESPAsync_WiFiManager
	setupFTPServer();  // using WifiServer
}

void loop()
{
	loopModelessConnect();
	loopFTPServer();
}

In which mode ist the WiFiManager?

One question which would help me to make my things easier.
Is there a way to find out it the WiFiManager is:

  • initalizing
  • in AP mode
  • connected to a WiFi network
    (- or maybe doing other weird things)
    ?

DHCP mode not working properly

I am using Async_ConfigOnSwitch example but instead of static ip configuration I am using DHCP mode. Thus for this I am using following settings #define USE_STATIC_IP_CONFIG_IN_CP false in modified code but the device always gets 255.255.255.255 ip on connection to router. The router address or gateway address is 192.168.0.1. The device is thus connected to router but I am still not able to access remote tcp server. This is happening with different router also.

/close does not close the config portal

I'm using Async_ConfigOnSwitch (1.1.2) unchanged on ESP32.

When I click "Exit Portal" (i.e. request /close) the WiFi Manager remains in config mode until timeout is reached. This is unexpected to me. I expected the config portal to close and for the WiFi Manager to go back to station mode.

In order to exit the config portal I have to hit "Configuration" and then "Save" without entering any values.

Does this work as designed?

File Not Found error when accessing the config portal the second time

HI ,
When i first connected to a network using the wifi portal it worked as it should when i wanted to change the network credentials for another network (when the first network is not available and esp32 is in AP mode) i get the following response in the static ip address
`File Not Found

URI: /
Method: GET
Arguments: 0`

use AsyncElegantOTA

Hi,
I used AsyncElegantOTA (https://github.com/ayushsharma82/AsyncElegantOTA) successfully in other projects, but in combination with ESPAsync_WiFiManager it won't compile.
I started from your example Async_ESP_FSWebServer_DRD.ino
Normally 3 lines of code are sufficient to setup AsyncElegantOTA in the code:

  1. at the top: #include <AsyncElegantOTA.h>
  2. just before line server.begin(); in setup(): AsyncElegantOTA.begin(&server);
  3. somewhere in loop(): AsyncElegantOTA.loop();
    Now after applying these 3 lines to your example the AsyncElegantOTA type is not recognized:

sketch_apr07a:229:1: error: 'AsyncElegantOTA' does not name a type
AsyncElegantOTA.begin(&server); // Start ElegantOTA (reach out to http://{ip-address}/update)
^
Is this my fault? Or can you explain this behavior?

Portal configuration window not opening

I have been using the ESPAsync_WiFiManager 1.7.1 library on a ESP32 without issues. I then tried using the library on a Wemos D1, the portal opens, information page loads, but the configuration (wifi selection) page is blank.

I tried several different examples from the GitHub. Tried accessing the Portal from another computer, on 192,168.4.1 getting the same result, a blank Configuration page. I tried your ESP_WifiManager and the code/library works.

Boards using:
esp32doit-devkit-v1
d1_mini 8266

Visual Code Studio
Version: 1.55.2
Commit: 3c4e3df9e89829dce27b7b5c24508306b151f30d
Date: 2021-04-13T09:36:32.643Z
Electron: 11.3.0
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
OS: Darwin x64 20.3.0

Thank you for your help.
Glen

When using custom parameters root config page is available but all other config pages are blank.

I am willing to contribute. I just need to know where to add the custom parameters. In your documentation you don't say where to add them. I tried to add them in the same place as your example (loop, after the instantiation of ESPAsync_wifiManager), however the web page /wifi becomes blank after adding the custom parameter via copy paste exactly as it is in the example file.

So, if you will elaborate I will amend the documentation and pull request. I will also amend any other parts that were difficult for me to figure out and make it clear in the documentation where to add and why.

    //
    // START WEB SERVER LOOP
    //
    // is configuration portal requested?
    if ((digitalRead(TRIGGER_PIN) == LOW))
    {
        Serial.println("\nConfiguration portal requested.");
        digitalWrite(LED_BUILTIN, LED_ON); // turn the LED on by making the voltage LOW to tell us we are in configuration mode.

        //Local intialization. Once its business is done, there is no need to keep it around
        ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, &dnsServer, "AsyncCP-ParamsOnSW");

        char customhtml[24] = "type=\"checkbox\""; //<--This is where I copied from
        bool sensorDht22 = true;
        if (sensorDht22)
        {
            strcat(customhtml, " checked");
        }
        ESPAsync_WMParameter p_sensorDht22("DHT-22", "DHT-22 Sensor", "T", 2, customhtml, WFM_LABEL_AFTER);
        ESPAsync_wifiManager.addParameter(&p_sensorDht22); //<-- This is the end of the copy/paste

        //Check if there is stored WiFi router/password credentials.
        //If not found, device will remain in configuration mode until switched off via webserver.
        Serial.print("Opening configuration portal. ");
        
        Router_SSID = ESPAsync_wifiManager.WiFi_SSID();
        Router_Pass = ESPAsync_wifiManager.WiFi_Pass();
        
        // From v1.1.0, Don't permit NULL password
        if ( (Router_SSID != "") && (Router_Pass != "") )
        {
        ESPAsync_wifiManager.setConfigPortalTimeout(120); //If no access point name has been previously entered disable timeout.
        Serial.println("Got stored Credentials. Timeout 120s");
        }
        else
        Serial.println("No stored Credentials. No timeout");

        // Extra parameters to be configured
        // After connecting, parameter.getValue() will get you the configured value
        // Format: <ID> <Placeholder text> <default value> <length> <custom HTML> <label placement>

        // Config Portal SSID - this is a straight forward string parameter
        ESPAsync_WMParameter p_PortalSSID(PortalSSID_Label, "Portal_SSID", PortalSSID, SSID_MAX_LENGTH + 1);

        // Config Portal SSID - this is a straight forward string parameter
        ESPAsync_WMParameter p_PortalPassword(PortalPassword_Label, "Portal_Password", PortalPassword, PASSWORD_MAX_LENGTH + 1);

        //add all parameters here
        ESPAsync_wifiManager.addParameter(&p_PortalSSID);
        ESPAsync_wifiManager.addParameter(&p_PortalPassword);

        // Sets timeout in seconds until configuration portal gets turned off.
        // If not specified device will remain in configuration mode until
        // switched off via webserver or device is restarted.
        //ESPAsync_wifiManager.setConfigPortalTimeout(120);

        ESPAsync_wifiManager.setMinimumSignalQuality(-1);

        // From v1.0.10 only
        // Set config portal channel, default = 1. Use 0 => random channel from 1-13
        ESPAsync_wifiManager.setConfigPortalChannel(0);
        //////

        //set custom ip for portal
        //ESPAsync_wifiManager.setAPStaticIPConfig(IPAddress(192, 168, 100, 1), IPAddress(192, 168, 100, 1), IPAddress(255, 255, 255, 0));
        
    #if !USE_DHCP_IP    
    #if USE_CONFIGURABLE_DNS  
        // Set static IP, Gateway, Subnetmask, DNS1 and DNS2. New in v1.0.5
        ESPAsync_wifiManager.setSTAStaticIPConfig(stationIP, gatewayIP, netMask, dns1IP, dns2IP);  
    #else
        // Set static IP, Gateway, Subnetmask, Use auto DNS1 and DNS2.
        ESPAsync_wifiManager.setSTAStaticIPConfig(stationIP, gatewayIP, netMask);
    #endif 
    #endif  

    // New from v1.1.0
    #if USING_CORS_FEATURE
    ESPAsync_wifiManager.setCORSHeader("Your Access-Control-Allow-Origin");
    #endif

        // Start an access point and goes into a blocking loop awaiting configuration.
        // Once the user leaves the portal with the exit button
        // processing will continue

        static bool resultConfigPortal;
        if ( (PortalSSID[0] == 0) || (PortalPassword[0] == 0) )
        {
        resultConfigPortal = ESPAsync_wifiManager.startConfigPortal((const char *) DefaultPortalSSID.c_str(), DefaultPortalPassword.c_str());
        }
        else
        {
        resultConfigPortal = ESPAsync_wifiManager.startConfigPortal((const char *) PortalSSID, PortalPassword);
        }

        if (resultConfigPortal)
        {
        Serial.println("WiFi connected...yeey :)");
        Serial.print("Local IP: ");
        Serial.println(WiFi.localIP());
        }
        else
        Serial.println("Not connected to WiFi but continuing anyway.");

        // Only clear then save data if CP entered and with new valid Credentials
        // No CP => stored getSSID() = ""
        if ( String(ESPAsync_wifiManager.getSSID(0)) != "" && String(ESPAsync_wifiManager.getSSID(1)) != "" )
        {
        // Stored  for later usage, from v1.1.0, but clear first
        memset(&WM_config, 0, sizeof(WM_config));
        
        for (uint8_t i = 0; i < NUM_WIFI_CREDENTIALS; i++)
        {
            String tempSSID = ESPAsync_wifiManager.getSSID(i);
            String tempPW   = ESPAsync_wifiManager.getPW(i);
        
            if (strlen(tempSSID.c_str()) < sizeof(WM_config.WiFi_Creds[i].wifi_ssid) - 1)
            strcpy(WM_config.WiFi_Creds[i].wifi_ssid, tempSSID.c_str());
            else
            strncpy(WM_config.WiFi_Creds[i].wifi_ssid, tempSSID.c_str(), sizeof(WM_config.WiFi_Creds[i].wifi_ssid) - 1);
        
            if (strlen(tempPW.c_str()) < sizeof(WM_config.WiFi_Creds[i].wifi_pw) - 1)
            strcpy(WM_config.WiFi_Creds[i].wifi_pw, tempPW.c_str());
            else
            strncpy(WM_config.WiFi_Creds[i].wifi_pw, tempPW.c_str(), sizeof(WM_config.WiFi_Creds[i].wifi_pw) - 1);  
        
            // Don't permit NULL SSID and password len < MIN_AP_PASSWORD_SIZE (8)
            if ( (String(WM_config.WiFi_Creds[i].wifi_ssid) != "") && (strlen(WM_config.WiFi_Creds[i].wifi_pw) >= MIN_AP_PASSWORD_SIZE) )
            {
            LOGERROR3(F("* Add SSID = "), WM_config.WiFi_Creds[i].wifi_ssid, F(", PW = "), WM_config.WiFi_Creds[i].wifi_pw );
            wifiMulti.addAP(WM_config.WiFi_Creds[i].wifi_ssid, WM_config.WiFi_Creds[i].wifi_pw);
            }
        }
        
        saveConfigData();
        }

        // Getting posted form values and overriding local variables parameters
        // Config file is written regardless the connection state
        strcpy(PortalSSID, p_PortalSSID.getValue());
        strcpy(PortalPassword, p_PortalPassword.getValue());

        // Writing JSON config file to flash for next boot
        writeConfigFile();

        digitalWrite(LED_BUILTIN, LED_OFF); // Turn LED off as we are not in configuration mode.
    }
    check_status();
    //
    // END WEB SERVER LOOP
    //

When using the above code the root config page is available but all other pages are blank.

Where do the custom parameters need to be located in the loop to function properly?

Feature request: Provide example using espidf framework

All the examples provided are using the arduino framework.

An example using the espidf framework would be desirable, particularly a non-C++ example.

According to the GitHub tags and the platformio/platformio.ini file, the espidf framework is supported for the espressif32 platform. If this actually isn't the case, perhaps those tags should be removed?

Captive portal is not triggered on IOS

On my iPhone running IOS version 14.3 the captive portal is not triggered. When I connect to the AP the first time I have to explicitly go to 192.168.100.1 in a browser to get to the config screen. I tried other frameworks, e.g. AutoConnect, and there the captive portal is automatically triggered.

ESPAsync_WiFiManager::startConfigPortal() will cause a watchdog timeout when called from a higher-priority task.

Hi, first I want to say thank you for this library. It's fantastically well documented. I've also compared the old version of this library to this newer async version, and the improved snappiness of the experience is night & day.

I'm working on fairly complex firmware for a sensor-based project, and can consistently repro a watchdog timeout crash that only happens when startConfigPortal() is called from a task with a priority above the default of 0.

Debugging my firmware, I've simplified the code down to these 2 tasks:

  1. Network Task (Priority of 1). This fires ESPAsync_WiFiManager::startConfigPortal() inside of a task.
  2. Idle Task (Priority of 0). This is the default implicit FreeRTOS task for that feeds the Task watchdog: https://gitdemo.readthedocs.io/en/latest/api/system/wdts.html

I noted that if I decrease the Network Task's priority to 0, the watchdog crash will not happen. This is intuitive if I examine the source code:

  • On line 887 of ESPAsync_WiFiManager.cpp, there's a yield() statement in the spin loop waiting for the ESPAsync_WiFiManager config portal to timeout or be closed.
  • Unlike delay(milliseconds)/vTaskDelay(ticks), which suspends the currently running Task and triggers the Task scheduler to schedule the next available Task, yield() doesn't necessarily suspend the current Task.
  • This would naturally cause a watchdog crash - in my case, the Network Task with a priority of 1 never yields time to the Idle Task do to the yield() in startConfigPortal(). This starves the watchdog and eventually triggering a crash.
  • Decreasing the Network Task's priority to 0 allows the Idle Task to get yielded time and feed the watchdog.
  • And lastly, replacing that yield() with delay() fixes the crash(!)

I'd suggest using delay() in line 887 instead, as that will allow yielding processing time to lower priority tasks. This allows using the library without modifications for more complex projects like mine, which require different task priorities. If you'd like to keep the same default behaviour for existing users, this would be easy to #ifdef with a flag like your other opt-in features.

I'm more than happy to create a PR with the fix if you'd review it. 😃

ESP 8266 - ConfigPortal in white after few seconds (out of memory)

Before all thanks for this great library!.

### Describe the bug

When board turns on and connects any device, the config portal begin and can be configured a wifi access point but portal close quickly (in a few seconds, less than a minute) because an oom - out of memory (checked with arduino ide debugger), this only occurs when I store a byte variable in RTC memory.

A clear and concise description of what the bug is.

ESP8266-12E board starts in AP, I try to connect to a wifi using the config portal and it works but in a few seconds navigation through pages go blank (unusable) and configportal breaks.. I have checked with Arduino debugger tool and get the following:

16:44:42.468 -> wifi evt: 5
16:44:42.739 -> wifi evt: 9
16:44:42.977 -> wifi evt: 7
16:44:43.011 -> wifi evt: 7
16:44:43.113 -> wifi evt: 7
16:44:43.246 -> :urn 56
16:44:43.246 -> :urd 56, 56, 0
16:44:43.279 -> :urn 60
16:44:43.279 -> :urd 60, 60, 0
16:44:43.756 -> :urn 34
16:44:43.756 -> :urch 62, 53
16:44:43.756 -> :urch 143, 45
16:44:43.756 -> :urd 34, 34, 0
16:44:43.756 -> :urd 53, 53, 0
16:44:43.756 -> :ust rc=-13
16:44:43.791 -> :urd 45, 45, 0
16:44:43.791 -> :ust rc=-13
16:44:44.634 -> :urn 30
16:44:44.634 -> :urd 30, 30, 0
16:44:44.634 -> :ust rc=-13
16:44:44.838 -> :urn 40
16:44:44.838 -> :urd 40, 40, 0
16:44:45.009 -> :urn 38
16:44:45.009 -> :urd 38, 38, 0
16:44:46.625 -> :urn 39
16:44:46.625 -> :urd 39, 39, 0
16:44:47.402 -> :urn 53
16:44:47.402 -> :urd 53, 53, 0
16:44:47.470 -> :urn 45
16:44:47.470 -> :urd 45, 45, 0
16:44:47.604 -> :urn 50
16:44:47.604 -> :urd 50, 50, 0
16:44:48.619 -> :urn 30
16:44:48.619 -> :urd 30, 30, 0
16:44:49.742 -> :urn 36
16:44:49.742 -> :urd 36, 36, 0
16:44:50.449 -> wifi evt: 7
16:44:50.483 -> wifi evt: 7
16:44:50.621 -> :urn 43
16:44:50.621 -> :urd 43, 43, 0
16:44:50.824 -> :urn 31
16:44:50.824 -> :urd 31, 31, 0
16:44:52.750 -> :oom(8784)@WString.cpp:182
16:44:55.118 -> :urn 38
16:44:55.118 -> :urd 38, 38, 0
16:44:56.686 -> :urn 39
16:44:56.686 -> :urd 39, 39, 0
16:45:02.579 -> :oom(8464)@WString.cpp:182
16:45:02.579 -> :oom(8464)@WString.cpp:182
16:45:02.579 -> :oom(8464)@WString.cpp:182
16:45:02.579 -> :oom(8368)@WString.cpp:182
16:45:02.579 -> :oom(8432)@WString.cpp:182

### Steps to Reproduce

Adding to Async_AutoConnect_ESP8266_minimal example sketch a RTC variable with RTCMemory library:

Sketch code:

/****************************************************************************************************************************
Async_AutoConnect_ESP8266_minimal.ino
For ESP8266 / ESP32 boards
Built by Khoi Hoang https://github.com/khoih-prog/ESPAsync_WiFiManager
Licensed under MIT license
*****************************************************************************************************************************/
#if !( defined(ESP8266) )
#error This code is intended to run on ESP8266 platform! Please check your Tools->Board setting.
#endif
#include <ESPAsync_WiFiManager.h> //https://github.com/khoih-prog/ESPAsync_WiFiManager
#include <rtc_memory.h>
AsyncWebServer webServer(80);
DNSServer dnsServer;
#define SERIAL_BAUDRATE 115200
#define LED_1 LED_BUILTIN //Cambiar por pin 4 o el que quiera

typedef struct {
byte estado; //Con esto sabremos si ejecutar estado 1 (servidor OTA) o estado 2 (borra wifis y resetea ESP8266). Este dato está dentro de la estructura de variables que se guarda en la memoria RTC
} MyData;

RtcMemory rtcMemory;
// -----------------------------------------------------------------------------

void setup()
{
// LEDs y Botón
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, LOW);

// put your setup code here, to run once:
Serial.begin(115200); while (!Serial); delay(200);
Serial.print("\nStarting Async_AutoConnect_ESP8266_minimal on " + String(ARDUINO_BOARD)); Serial.println(ESP_ASYNC_WIFIMANAGER_VERSION);
//RTC Memory
if(rtcMemory.begin()){
Serial.println("RTC initialization done!");
}
else {
Serial.println("No previous data found. The memory is reset to zeros!");
}
// Get the data
MyData* data = rtcMemory.getData();
Serial.println(String("En RTC hay guardado: ") + data->estado);
ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, &dnsServer, "AutoConnectAP");
if (data->estado == 2) {
ESPAsync_wifiManager.resetSettings(); //reset saved settings
data->estado = 0; //Modificamos el contador en RTC
rtcMemory.save(); //Guarda el nuevo estado en memoria RTC
}
//ESPAsync_wifiManager.setAPStaticIPConfig(IPAddress(192,168,186,1), IPAddress(192,168,186,1), IPAddress(255,255,255,0));
ESPAsync_wifiManager.autoConnect("AutoConnectAP");
if (WiFi.status() == WL_CONNECTED) { Serial.print(F("Connected. Local IP: ")); Serial.println(WiFi.localIP()); }
else { Serial.println(ESPAsync_wifiManager.getStatus(WiFi.status())); }
}

void loop() {

}

### Expected behavior

Espasync_WifiManager config portal doesn't close until a wifi was configured and saved.

### Actual behavior

Configuration portal close fast, it's difficult to to navigate between info page or configure a wifi access successfully (something I've noticed is that even when oom occurs if I was writing my wifi password (doen't update the config page) and save, the connection is successful.

A clear and concise description of what you expected to happen.

Spent the needed time to navigate through the config portal.

### Information

Please ensure to specify the following:

  • Arduino IDE version: 1.8.13
  • ESP8266 core v2.7.3-3-g2843a5ac=20703003
  • Contextual information: Im trying to store a variable in RTC memory to reboot and reset wifi setting when a button is pressed.
  • Operating system: Windows 10 Versión 10.0.18363 compilation 18363
  • EspaSync:WifiManager library version: 1.6.1

Captive portal instead of static ip portal

Hi I am using following code for wifi manger picked from examples.
`ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, &dnsServer, "AutoConnectAP");
ESPAsync_wifiManager.setDebugOutput(true);
ESPAsync_wifiManager.setAPStaticIPConfig(IPAddress(192, 168, 100, 1), IPAddress(192, 168, 100, 1), IPAddress(255, 255, 255, 0));

ESPAsync_wifiManager.setMinimumSignalQuality(-1);
ESPAsync_wifiManager.setConfigPortalChannel(0);

#if USING_CORS_FEATURE
	ESPAsync_wifiManager.setCORSHeader("Your Access-Control-Allow-Origin");
#endif

Router_SSID = ESPAsync_wifiManager.WiFi_SSID();
Router_Pass = ESPAsync_wifiManager.WiFi_Pass();

//Remove this line if you do not want to see WiFi password printed
Serial.println("Stored: SSID = " + Router_SSID + ", Pass = " + Router_Pass);

if (Router_SSID != "")
{
	ESPAsync_wifiManager.setConfigPortalTimeout(120); //If no access point name has been previously entered disable timeout.
	Serial.println("Got stored Credentials. Timeout 120s");
}
else
{
	Serial.println("No stored Credentials. No timeout");
}

String chipID = String(ESP_getChipId(), HEX);
chipID.toUpperCase();

// SSID and PW for Config Portal
String AP_SSID = "ESP_" + chipID + "_AutoConnectAP";
String AP_PASS = "12345678";

if ( !ESPAsync_wifiManager.startConfigPortal(AP_SSID.c_str(), AP_PASS.c_str()) )
	Serial.println("Not connected to WiFi but continuing anyway.");
else
	Serial.println("WiFi connected...yeey :)");`

The portal at 192.168.100.1 works fine when this code is called first time but if I call this code again in loop or setup function then it switches to captive portal which opens automatically when I connect to esp32 AP instead of portal at 192.168.100.1. What is the reason for this behaviour?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.