[GH-ISSUE #822] Configuration Portal does not load #689

Closed
opened 2026-02-28 01:26:35 +03:00 by kerem · 15 comments
Owner

Originally created by @DeltaVetal26 on GitHub (Feb 7, 2019).
Original GitHub issue: https://github.com/tzapu/WiFiManager/issues/822

Hardware

WiFimanager Branch/Release:

  • Master
  • Development

Esp8266/Esp32:

  • ESP32

**Hardware:
ESP32 Dev Module

ESP Core Version: 2.4.0, staging

  • 2.3.0
  • 2.4.0
  • staging (master/dev)

Description

I'm trying to check the WifiManager on my ESP32 card. I loaded an example, but the configuration portal does not want to run. In the list of Wifi networks, I also do not see my fee.

Sketch

#include "soc/soc.h" // Lib For Brownout Detector (Low Power Mode Fix)
#include "soc/rtc_cntl_reg.h" // Lib For Brownout Detector (Low Power Mode Fix)
#include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager


void setup() {
    // put your setup code here, to run once:
    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);
    Serial.begin(115200);

    //WiFiManager
    //Local intialization. Once its business is done, there is no need to keep it around
    WiFiManager wifiManager;
    //reset saved settings
    //wifiManager.resetSettings();
    
    //set custom ip for portal
    //wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

    //fetches ssid and pass from eeprom and tries to connect
    //if it does not connect it starts an access point with the specified name
    //here  "AutoConnectAP"
    //and goes into a blocking loop awaiting configuration
    wifiManager.autoConnect("AutoConnectAP");
    //or use this for auto generated name ESP + ChipID
    //wifiManager.autoConnect();

    
    //if you get here you have connected to the WiFi
    Serial.println("connected...yeey :)");
}

void loop() {}

Debug Messages

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:952
load:0x40078000,len:6084
load:0x40080000,len:7936
entry 0x40080310
*WM: [1] AutoConnect 

Originally created by @DeltaVetal26 on GitHub (Feb 7, 2019). Original GitHub issue: https://github.com/tzapu/WiFiManager/issues/822 #### Hardware **WiFimanager Branch/Release:** - [ ] Master - [x] Development **Esp8266/Esp32:** - [x] ESP32 **Hardware: ESP32 Dev Module **ESP Core Version: 2.4.0, staging** - [ ] 2.3.0 - [ ] 2.4.0 - [x] staging (master/dev) ### Description I'm trying to check the WifiManager on my ESP32 card. I loaded an example, but the configuration portal does not want to run. In the list of Wifi networks, I also do not see my fee. ### Sketch ```cpp #include "soc/soc.h" // Lib For Brownout Detector (Low Power Mode Fix) #include "soc/rtc_cntl_reg.h" // Lib For Brownout Detector (Low Power Mode Fix) #include <WiFiManager.h> //https://github.com/tzapu/WiFiManager void setup() { // put your setup code here, to run once: WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0); Serial.begin(115200); //WiFiManager //Local intialization. Once its business is done, there is no need to keep it around WiFiManager wifiManager; //reset saved settings //wifiManager.resetSettings(); //set custom ip for portal //wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); //fetches ssid and pass from eeprom and tries to connect //if it does not connect it starts an access point with the specified name //here "AutoConnectAP" //and goes into a blocking loop awaiting configuration wifiManager.autoConnect("AutoConnectAP"); //or use this for auto generated name ESP + ChipID //wifiManager.autoConnect(); //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); } void loop() {} ``` ### Debug Messages ``` ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:952 load:0x40078000,len:6084 load:0x40080000,len:7936 entry 0x40080310 *WM: [1] AutoConnect ```
kerem 2026-02-28 01:26:35 +03:00
Author
Owner

@DeltaVetal26 commented on GitHub (Feb 8, 2019):

Does anyone have any idea?

<!-- gh-comment-id:461805662 --> @DeltaVetal26 commented on GitHub (Feb 8, 2019): Does anyone have any idea?
Author
Owner

@tablatronix commented on GitHub (Feb 8, 2019):

use a basic example and post logs?

<!-- gh-comment-id:461892385 --> @tablatronix commented on GitHub (Feb 8, 2019): use a basic example and post logs?
Author
Owner

@codebeat-nl commented on GitHub (Feb 8, 2019):

Had the same problem.

Found this: https://www.esp8266.com/viewtopic.php?f=6&t=15993

This post of eduperez:


"Android devices have the Google DNSs hard-coded, they will always use 8.8.8.8 and 8.8.4.4, despite what the DHPC server might tell them to use. You need to configure your gateway to redirect all outgoing traffic to port 53 to your DNS."


That gives the idea, use 8.8.8.8 as IP-address and as DNS-server address.
Tada! Works like a charm!

So this demo sketch provided/included at ESP library will work:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>

/*
   This example serves a "hello world" on a WLAN and a SoftAP at the same time.
   The SoftAP allow you to configure WLAN parameters at run time. They are not setup in the sketch but saved on EEPROM.
   Connect your computer or cell phone to wifi network ESP_ap with password 12345678. A popup may appear and it allow you to go to WLAN config. If it does not then navigate to http://192.168.4.1/wifi and config it there.
   Then wait for the module to connect to your wifi and take note of the WLAN IP it got. Then you can disconnect from ESP_ap and return to your regular WLAN.
   Now the ESP8266 is in your network. You can reach it through http://192.168.x.x/ (the IP you took note of) or maybe at http://esp8266.local too.
   This is a captive portal because through the softAP it will redirect any http request to http://192.168.4.1/
*/

/* Set these to your desired softAP credentials. They are not configurable at runtime */
#ifndef APSSID
#define APSSID "TheGeekMan"
#define APPSK  "12345678"
#endif

const char *softAP_ssid = APSSID;
const char *softAP_password = APPSK;

/* hostname for mDNS. Should work at least on windows. Try http://esp8266.local */
const char *myHostname = "thegeekman";

/* Don't set this wifi credentials. They are configurated at runtime and stored on EEPROM */
char ssid[32] = "";
char password[32] = "";

// DNS server
const byte DNS_PORT = 53;
DNSServer dnsServer;

// Web server
ESP8266WebServer server(80);

/* Soft AP network parameters */
//IPAddress apIP(192, 168, 4, 1);
IPAddress apIP(8, 8, 8, 8);
IPAddress netMsk(255, 255, 255, 0);


/** Should I connect to WLAN asap? */
boolean connect;

/** Last time I tried to connect to WLAN */
unsigned long lastConnectTry = 0;

/** Current WLAN status */
unsigned int status = WL_IDLE_STATUS;

/** Is this an IP? */
boolean isIp(String str) {
  for (size_t i = 0; i < str.length(); i++) {
    int c = str.charAt(i);
    if (c != '.' && (c < '0' || c > '9')) {
      return false;
    }
  }
  return true;
}

/** IP to String? */
String toStringIp(IPAddress ip) {
  String res = "";
  for (int i = 0; i < 3; i++) {
    res += String((ip >> (8 * i)) & 0xFF) + ".";
  }
  res += String(((ip >> 8 * 3)) & 0xFF);
  return res;
}

/** Load WLAN credentials from EEPROM */
void loadCredentials() {
  EEPROM.begin(512);
  EEPROM.get(0, ssid);
  EEPROM.get(0 + sizeof(ssid), password);
  char ok[2 + 1];
  EEPROM.get(0 + sizeof(ssid) + sizeof(password), ok);
  EEPROM.end();
  if (String(ok) != String("OK")) {
    ssid[0] = 0;
    password[0] = 0;
  }
  Serial.println("Recovered credentials:");
  Serial.println(ssid);
  Serial.println(strlen(password) > 0 ? "********" : "<no password>");
}

/** Store WLAN credentials to EEPROM */
void saveCredentials() {
  EEPROM.begin(512);
  EEPROM.put(0, ssid);
  EEPROM.put(0 + sizeof(ssid), password);
  char ok[2 + 1] = "OK";
  EEPROM.put(0 + sizeof(ssid) + sizeof(password), ok);
  EEPROM.commit();
  EEPROM.end();
}

/** Handle root or redirect to captive portal */
void handleRoot() {
  if (captivePortal()) { // If caprive portal redirect instead of displaying the page.
    return;
  }
  server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  server.sendHeader("Pragma", "no-cache");
  server.sendHeader("Expires", "-1");

  String Page;
  Page += F(
            "<html><head></head><body>"
            "<h1>HELLO WORLD!!</h1>");
  if (server.client().localIP() == apIP) {
    Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>");
  } else {
    Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>");
  }
  Page += F(
            "<p>You may want to <a href='/wifi'>config the wifi connection</a>.</p>"
            "</body></html>");

  server.send(200, "text/html", Page);
}

/** Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */
boolean captivePortal() {
  if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname) + ".local")) {
    Serial.println("Request redirected to captive portal");
    server.sendHeader("Location", String("http://") + toStringIp(server.client().localIP()), true);
    server.send(302, "text/plain", "");   // Empty content inhibits Content-length header so we have to close the socket ourselves.
    server.client().stop(); // Stop is needed because we sent no content length
    return true;
  }
  return false;
}

/** Wifi config page handler */
void handleWifi() {
  server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  server.sendHeader("Pragma", "no-cache");
  server.sendHeader("Expires", "-1");

  String Page;
  Page += F(
            "<html><head></head><body>"
            "<h1>Wifi config</h1>");
  if (server.client().localIP() == apIP) {
    Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>");
  } else {
    Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>");
  }
  Page +=
    String(F(
             "\r\n<br />"
             "<table><tr><th align='left'>SoftAP config</th></tr>"
             "<tr><td>SSID ")) +
    String(softAP_ssid) +
    F("</td></tr>"
      "<tr><td>IP ") +
    toStringIp(WiFi.softAPIP()) +
    F("</td></tr>"
      "</table>"
      "\r\n<br />"
      "<table><tr><th align='left'>WLAN config</th></tr>"
      "<tr><td>SSID ") +
    String(ssid) +
    F("</td></tr>"
      "<tr><td>IP ") +
    toStringIp(WiFi.localIP()) +
    F("</td></tr>"
      "</table>"
      "\r\n<br />"
      "<table><tr><th align='left'>WLAN list (refresh if any missing)</th></tr>");
  Serial.println("scan start");
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n > 0) {
    for (int i = 0; i < n; i++) {
      Page += String(F("\r\n<tr><td>SSID ")) + WiFi.SSID(i) + ((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? F(" ") : F(" *")) + F(" (") + WiFi.RSSI(i) + F(")</td></tr>");
    }
  } else {
    Page += F("<tr><td>No WLAN found</td></tr>");
  }
  Page += F(
            "</table>"
            "\r\n<br /><form method='POST' action='wifisave'><h4>Connect to network:</h4>"
            "<input type='text' placeholder='network' name='n'/>"
            "<br /><input type='password' placeholder='password' name='p'/>"
            "<br /><input type='submit' value='Connect/Disconnect'/></form>"
            "<p>You may want to <a href='/'>return to the home page</a>.</p>"
            "</body></html>");
  server.send(200, "text/html", Page);
  server.client().stop(); // Stop is needed because we sent no content length
}

/** Handle the WLAN save form and redirect to WLAN config page again */
void handleWifiSave() {
  Serial.println("wifi save");
  server.arg("n").toCharArray(ssid, sizeof(ssid) - 1);
  server.arg("p").toCharArray(password, sizeof(password) - 1);
  server.sendHeader("Location", "wifi", true);
  server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  server.sendHeader("Pragma", "no-cache");
  server.sendHeader("Expires", "-1");
  server.send(302, "text/plain", "");    // Empty content inhibits Content-length header so we have to close the socket ourselves.
  server.client().stop(); // Stop is needed because we sent no content length
  saveCredentials();
  connect = strlen(ssid) > 0; // Request WLAN connect with new credentials if there is a SSID
}

void handleNotFound() {
  if (captivePortal()) { // If caprive portal redirect instead of displaying the error page.
    return;
  }
  String message = F("File Not Found\n\n");
  message += F("URI: ");
  message += server.uri();
  message += F("\nMethod: ");
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += F("\nArguments: ");
  message += server.args();
  message += F("\n");

  for (uint8_t i = 0; i < server.args(); i++) {
    message += String(F(" ")) + server.argName(i) + F(": ") + server.arg(i) + F("\n");
  }
  server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  server.sendHeader("Pragma", "no-cache");
  server.sendHeader("Expires", "-1");
  server.send(404, "text/plain", message);
}

void setup() {
  delay(1000);
  Serial.begin(9600);
  Serial.println();
  Serial.println("Configuring access point...");
  /* You can remove the password parameter if you want the AP to be open. */
  WiFi.softAPConfig(apIP, apIP, netMsk);
  WiFi.softAP(softAP_ssid, softAP_password);
  delay(500); // Without delay I've seen the IP address blank
  Serial.print("AP IP address: ");
  Serial.println(WiFi.softAPIP());

  /* Setup the DNS server redirecting all the domains to the apIP */
  dnsServer.setErrorReplyCode(DNSReplyCode::NoError);
  dnsServer.start(DNS_PORT, "*", apIP);

  /* Setup web pages: root, wifi config pages, SO captive portal detectors and not found. */
  server.on("/", handleRoot);
  server.on("/wifi", handleWifi);
  server.on("/wifisave", handleWifiSave);
  server.on("/generate_204", handleRoot);  //Android captive portal. Maybe not needed. Might be handled by notFound handler.
  server.on("/fwlink", handleRoot);  //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler.
  server.onNotFound(handleNotFound);
  server.begin(); // Web server start
  Serial.println("HTTP server started");
  loadCredentials(); // Load WLAN credentials from network
  connect = strlen(ssid) > 0; // Request WLAN connect if there is a SSID
}

void connectWifi() {
  Serial.println("Connecting as wifi client...");
  WiFi.disconnect();
  WiFi.begin(ssid, password);
  int connRes = WiFi.waitForConnectResult();
  Serial.print("connRes: ");
  Serial.println(connRes);
}

void loop() {
  if (connect) {
    Serial.println("Connect requested");
    connect = false;
    connectWifi();
    lastConnectTry = millis();
  }
  {
    unsigned int s = WiFi.status();
    if (s == 0 && millis() > (lastConnectTry + 60000)) {
      /* If WLAN disconnected and idle try to connect */
      /* Don't set retry time too low as retry interfere the softAP operation */
      connect = true;
    }
    if (status != s) { // WLAN status change
      Serial.print("Status: ");
      Serial.println(s);
      status = s;
      if (s == WL_CONNECTED) {
        /* Just connected to WLAN */
        Serial.println("");
        Serial.print("Connected to ");
        Serial.println(ssid);
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());

        // Setup MDNS responder
        if (!MDNS.begin(myHostname)) {
          Serial.println("Error setting up MDNS responder!");
        } else {
          Serial.println("mDNS responder started");
          // Add service to MDNS-SD
          MDNS.addService("http", "tcp", 80);
        }
      } else if (s == WL_NO_SSID_AVAIL) {
        WiFi.disconnect();
      }
    }
    if (s == WL_CONNECTED) {
      MDNS.update();
    }
  }
  // Do work:
  //DNS
  dnsServer.processNextRequest();
  //HTTP
  server.handleClient();
}
<!-- gh-comment-id:461938646 --> @codebeat-nl commented on GitHub (Feb 8, 2019): Had the same problem. Found this: https://www.esp8266.com/viewtopic.php?f=6&t=15993 This post of eduperez: ---------------- *"Android devices have the Google DNSs hard-coded, they will **always use 8.8.8.8** and 8.8.4.4, despite what the DHPC server might tell them to use. You need to configure your gateway to redirect all outgoing traffic to port 53 to your DNS."* --------------- That gives the idea, use **8.8.8.8 as IP-address and as DNS-server address**. Tada! Works like a charm! So this demo sketch provided/included at ESP library will work: #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <DNSServer.h> #include <ESP8266mDNS.h> #include <EEPROM.h> /* This example serves a "hello world" on a WLAN and a SoftAP at the same time. The SoftAP allow you to configure WLAN parameters at run time. They are not setup in the sketch but saved on EEPROM. Connect your computer or cell phone to wifi network ESP_ap with password 12345678. A popup may appear and it allow you to go to WLAN config. If it does not then navigate to http://192.168.4.1/wifi and config it there. Then wait for the module to connect to your wifi and take note of the WLAN IP it got. Then you can disconnect from ESP_ap and return to your regular WLAN. Now the ESP8266 is in your network. You can reach it through http://192.168.x.x/ (the IP you took note of) or maybe at http://esp8266.local too. This is a captive portal because through the softAP it will redirect any http request to http://192.168.4.1/ */ /* Set these to your desired softAP credentials. They are not configurable at runtime */ #ifndef APSSID #define APSSID "TheGeekMan" #define APPSK "12345678" #endif const char *softAP_ssid = APSSID; const char *softAP_password = APPSK; /* hostname for mDNS. Should work at least on windows. Try http://esp8266.local */ const char *myHostname = "thegeekman"; /* Don't set this wifi credentials. They are configurated at runtime and stored on EEPROM */ char ssid[32] = ""; char password[32] = ""; // DNS server const byte DNS_PORT = 53; DNSServer dnsServer; // Web server ESP8266WebServer server(80); /* Soft AP network parameters */ //IPAddress apIP(192, 168, 4, 1); IPAddress apIP(8, 8, 8, 8); IPAddress netMsk(255, 255, 255, 0); /** Should I connect to WLAN asap? */ boolean connect; /** Last time I tried to connect to WLAN */ unsigned long lastConnectTry = 0; /** Current WLAN status */ unsigned int status = WL_IDLE_STATUS; /** Is this an IP? */ boolean isIp(String str) { for (size_t i = 0; i < str.length(); i++) { int c = str.charAt(i); if (c != '.' && (c < '0' || c > '9')) { return false; } } return true; } /** IP to String? */ String toStringIp(IPAddress ip) { String res = ""; for (int i = 0; i < 3; i++) { res += String((ip >> (8 * i)) & 0xFF) + "."; } res += String(((ip >> 8 * 3)) & 0xFF); return res; } /** Load WLAN credentials from EEPROM */ void loadCredentials() { EEPROM.begin(512); EEPROM.get(0, ssid); EEPROM.get(0 + sizeof(ssid), password); char ok[2 + 1]; EEPROM.get(0 + sizeof(ssid) + sizeof(password), ok); EEPROM.end(); if (String(ok) != String("OK")) { ssid[0] = 0; password[0] = 0; } Serial.println("Recovered credentials:"); Serial.println(ssid); Serial.println(strlen(password) > 0 ? "********" : "<no password>"); } /** Store WLAN credentials to EEPROM */ void saveCredentials() { EEPROM.begin(512); EEPROM.put(0, ssid); EEPROM.put(0 + sizeof(ssid), password); char ok[2 + 1] = "OK"; EEPROM.put(0 + sizeof(ssid) + sizeof(password), ok); EEPROM.commit(); EEPROM.end(); } /** Handle root or redirect to captive portal */ void handleRoot() { if (captivePortal()) { // If caprive portal redirect instead of displaying the page. return; } server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); server.sendHeader("Pragma", "no-cache"); server.sendHeader("Expires", "-1"); String Page; Page += F( "<html><head></head><body>" "<h1>HELLO WORLD!!</h1>"); if (server.client().localIP() == apIP) { Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>"); } else { Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>"); } Page += F( "<p>You may want to <a href='/wifi'>config the wifi connection</a>.</p>" "</body></html>"); server.send(200, "text/html", Page); } /** Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */ boolean captivePortal() { if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname) + ".local")) { Serial.println("Request redirected to captive portal"); server.sendHeader("Location", String("http://") + toStringIp(server.client().localIP()), true); server.send(302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. server.client().stop(); // Stop is needed because we sent no content length return true; } return false; } /** Wifi config page handler */ void handleWifi() { server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); server.sendHeader("Pragma", "no-cache"); server.sendHeader("Expires", "-1"); String Page; Page += F( "<html><head></head><body>" "<h1>Wifi config</h1>"); if (server.client().localIP() == apIP) { Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>"); } else { Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>"); } Page += String(F( "\r\n<br />" "<table><tr><th align='left'>SoftAP config</th></tr>" "<tr><td>SSID ")) + String(softAP_ssid) + F("</td></tr>" "<tr><td>IP ") + toStringIp(WiFi.softAPIP()) + F("</td></tr>" "</table>" "\r\n<br />" "<table><tr><th align='left'>WLAN config</th></tr>" "<tr><td>SSID ") + String(ssid) + F("</td></tr>" "<tr><td>IP ") + toStringIp(WiFi.localIP()) + F("</td></tr>" "</table>" "\r\n<br />" "<table><tr><th align='left'>WLAN list (refresh if any missing)</th></tr>"); Serial.println("scan start"); int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n > 0) { for (int i = 0; i < n; i++) { Page += String(F("\r\n<tr><td>SSID ")) + WiFi.SSID(i) + ((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? F(" ") : F(" *")) + F(" (") + WiFi.RSSI(i) + F(")</td></tr>"); } } else { Page += F("<tr><td>No WLAN found</td></tr>"); } Page += F( "</table>" "\r\n<br /><form method='POST' action='wifisave'><h4>Connect to network:</h4>" "<input type='text' placeholder='network' name='n'/>" "<br /><input type='password' placeholder='password' name='p'/>" "<br /><input type='submit' value='Connect/Disconnect'/></form>" "<p>You may want to <a href='/'>return to the home page</a>.</p>" "</body></html>"); server.send(200, "text/html", Page); server.client().stop(); // Stop is needed because we sent no content length } /** Handle the WLAN save form and redirect to WLAN config page again */ void handleWifiSave() { Serial.println("wifi save"); server.arg("n").toCharArray(ssid, sizeof(ssid) - 1); server.arg("p").toCharArray(password, sizeof(password) - 1); server.sendHeader("Location", "wifi", true); server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); server.sendHeader("Pragma", "no-cache"); server.sendHeader("Expires", "-1"); server.send(302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. server.client().stop(); // Stop is needed because we sent no content length saveCredentials(); connect = strlen(ssid) > 0; // Request WLAN connect with new credentials if there is a SSID } void handleNotFound() { if (captivePortal()) { // If caprive portal redirect instead of displaying the error page. return; } String message = F("File Not Found\n\n"); message += F("URI: "); message += server.uri(); message += F("\nMethod: "); message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += F("\nArguments: "); message += server.args(); message += F("\n"); for (uint8_t i = 0; i < server.args(); i++) { message += String(F(" ")) + server.argName(i) + F(": ") + server.arg(i) + F("\n"); } server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); server.sendHeader("Pragma", "no-cache"); server.sendHeader("Expires", "-1"); server.send(404, "text/plain", message); } void setup() { delay(1000); Serial.begin(9600); Serial.println(); Serial.println("Configuring access point..."); /* You can remove the password parameter if you want the AP to be open. */ WiFi.softAPConfig(apIP, apIP, netMsk); WiFi.softAP(softAP_ssid, softAP_password); delay(500); // Without delay I've seen the IP address blank Serial.print("AP IP address: "); Serial.println(WiFi.softAPIP()); /* Setup the DNS server redirecting all the domains to the apIP */ dnsServer.setErrorReplyCode(DNSReplyCode::NoError); dnsServer.start(DNS_PORT, "*", apIP); /* Setup web pages: root, wifi config pages, SO captive portal detectors and not found. */ server.on("/", handleRoot); server.on("/wifi", handleWifi); server.on("/wifisave", handleWifiSave); server.on("/generate_204", handleRoot); //Android captive portal. Maybe not needed. Might be handled by notFound handler. server.on("/fwlink", handleRoot); //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler. server.onNotFound(handleNotFound); server.begin(); // Web server start Serial.println("HTTP server started"); loadCredentials(); // Load WLAN credentials from network connect = strlen(ssid) > 0; // Request WLAN connect if there is a SSID } void connectWifi() { Serial.println("Connecting as wifi client..."); WiFi.disconnect(); WiFi.begin(ssid, password); int connRes = WiFi.waitForConnectResult(); Serial.print("connRes: "); Serial.println(connRes); } void loop() { if (connect) { Serial.println("Connect requested"); connect = false; connectWifi(); lastConnectTry = millis(); } { unsigned int s = WiFi.status(); if (s == 0 && millis() > (lastConnectTry + 60000)) { /* If WLAN disconnected and idle try to connect */ /* Don't set retry time too low as retry interfere the softAP operation */ connect = true; } if (status != s) { // WLAN status change Serial.print("Status: "); Serial.println(s); status = s; if (s == WL_CONNECTED) { /* Just connected to WLAN */ Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Setup MDNS responder if (!MDNS.begin(myHostname)) { Serial.println("Error setting up MDNS responder!"); } else { Serial.println("mDNS responder started"); // Add service to MDNS-SD MDNS.addService("http", "tcp", 80); } } else if (s == WL_NO_SSID_AVAIL) { WiFi.disconnect(); } } if (s == WL_CONNECTED) { MDNS.update(); } } // Do work: //DNS dnsServer.processNextRequest(); //HTTP server.handleClient(); }
Author
Owner

@DeltaVetal26 commented on GitHub (Feb 9, 2019):

@tablatronix
I found the Basic example, installed it. But nothing has changed. The access point is also not created.

#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include "soc/soc.h" // Lib For Brownout Detector (Low Power Mode Fix)
#include "soc/rtc_cntl_reg.h" // Lib For Brownout Detector (Low Power Mode Fix)

void setup() {
    // put your setup code here, to run once:
    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);
    Serial.begin(115200);
    Serial.println("Prograamm Started!");

    //WiFiManager, Local intialization. Once its business is done, there is no need to keep it around
    WiFiManager wm;
    
    //reset settings - wipe credentials for testing
    //wm.resetSettings();

    // Automatically connect using saved credentials,
    // if connection fails, it starts an access point with the specified name ( "AutoConnectAP"),
    // if empty will auto generate SSID, if password is blank it will be anonymous AP (wm.autoConnect())
    // then goes into a blocking loop awaiting configuration and will return success result

    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");
        // ESP.restart();
    } 
    else {
        //if you get here you have connected to the WiFi    
        Serial.println("connected...yeey :)");
    }

}

void loop() {
    // put your main code here, to run repeatedly:    
}
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:952
load:0x40078000,len:6084
load:0x40080000,len:7936
entry 0x40080310
*WM: [1] AutoConnect 

<!-- gh-comment-id:462020801 --> @DeltaVetal26 commented on GitHub (Feb 9, 2019): @tablatronix I found the Basic example, installed it. But nothing has changed. The access point is also not created. ```cpp #include <WiFiManager.h> // https://github.com/tzapu/WiFiManager #include "soc/soc.h" // Lib For Brownout Detector (Low Power Mode Fix) #include "soc/rtc_cntl_reg.h" // Lib For Brownout Detector (Low Power Mode Fix) void setup() { // put your setup code here, to run once: WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0); Serial.begin(115200); Serial.println("Prograamm Started!"); //WiFiManager, Local intialization. Once its business is done, there is no need to keep it around WiFiManager wm; //reset settings - wipe credentials for testing //wm.resetSettings(); // Automatically connect using saved credentials, // if connection fails, it starts an access point with the specified name ( "AutoConnectAP"), // if empty will auto generate SSID, if password is blank it will be anonymous AP (wm.autoConnect()) // then goes into a blocking loop awaiting configuration and will return success result 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"); // ESP.restart(); } else { //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); } } void loop() { // put your main code here, to run repeatedly: } ``` ```txt ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:952 load:0x40078000,len:6084 load:0x40080000,len:7936 entry 0x40080310 *WM: [1] AutoConnect ```
Author
Owner

@DeltaVetal26 commented on GitHub (Feb 9, 2019):

@codebeat-nl

I'm trying to find an ESP network through an iPhone and a laptop (HP, Windows 10), but nowhere to see the ESP32 access point.

<!-- gh-comment-id:462021023 --> @DeltaVetal26 commented on GitHub (Feb 9, 2019): @codebeat-nl I'm trying to find an ESP network through an iPhone and a laptop (HP, Windows 10), but nowhere to see the ESP32 access point.
Author
Owner

@tablatronix commented on GitHub (Feb 9, 2019):

you have not posted logs of the basic example serial output. you just posted the same thing as before, and some brownout code ? Are you using esp32 staging?

<!-- gh-comment-id:462050080 --> @tablatronix commented on GitHub (Feb 9, 2019): you have not posted logs of the basic example serial output. you just posted the same thing as before, and some brownout code ? Are you using esp32 staging?
Author
Owner

@DeltaVetal26 commented on GitHub (Feb 9, 2019):

@tablatronix

I am using ESP32 DEV Module V1.
In this example, I apply a setting that disables the low voltage detector. Without this, my board will reboot indefinitely if I use the USB port of my computer. But this is clearly not the case, since I connected the board to a good power source, but nothing works there either.
The serial port displays only this information, nothing else.

<!-- gh-comment-id:462052703 --> @DeltaVetal26 commented on GitHub (Feb 9, 2019): @tablatronix I am using ESP32 DEV Module V1. In this example, I apply a setting that disables the low voltage detector. Without this, my board will reboot indefinitely if I use the USB port of my computer. But this is clearly not the case, since I connected the board to a good power source, but nothing works there either. The serial port displays only this information, nothing else.
Author
Owner

@tablatronix commented on GitHub (Feb 9, 2019):

well I was assuming it was your code that was breaking it, but no serial output ? That is strange.

I am at a loss, there should be something
no reset?

I mean wiifi wont start if chip is browing out, or less than 200ma, but it should throw logs..

<!-- gh-comment-id:462053512 --> @tablatronix commented on GitHub (Feb 9, 2019): well I was assuming it was your code that was breaking it, but no serial output ? That is strange. I am at a loss, there should be something no reset? I mean wiifi wont start if chip is browing out, or less than 200ma, but it should throw logs..
Author
Owner

@DeltaVetal26 commented on GitHub (Feb 10, 2019):

@tablatronix

Is it possible to somehow enable the expanded log?

<!-- gh-comment-id:462138467 --> @DeltaVetal26 commented on GitHub (Feb 10, 2019): @tablatronix Is it possible to somehow enable the expanded log?
Author
Owner

@tablatronix commented on GitHub (Feb 10, 2019):

Its on full by default

<!-- gh-comment-id:462140052 --> @tablatronix commented on GitHub (Feb 10, 2019): Its on full by default
Author
Owner

@DeltaVetal26 commented on GitHub (Feb 11, 2019):

@tablatronix
Happened! The problem is solved by thoroughly cleaning the flash with esptool.py.

<!-- gh-comment-id:462268192 --> @DeltaVetal26 commented on GitHub (Feb 11, 2019): @tablatronix Happened! The problem is solved by thoroughly cleaning the flash with esptool.py.
Author
Owner

@tablatronix commented on GitHub (Feb 11, 2019):

very odd, I would have expected some kind of crash or reboot in serial log.
Glad you got it fixed, can it be closed?

<!-- gh-comment-id:462328711 --> @tablatronix commented on GitHub (Feb 11, 2019): very odd, I would have expected some kind of crash or reboot in serial log. Glad you got it fixed, can it be closed?
Author
Owner

@giulicrenna commented on GitHub (Aug 30, 2022):

I had the same problem, my solution was because I over included the ESP8266WiFi.h in some part of the code.

<!-- gh-comment-id:1232121818 --> @giulicrenna commented on GitHub (Aug 30, 2022): I had the same problem, my solution was because I over included the **ESP8266WiFi.h** in some part of the code.
Author
Owner

@tablatronix commented on GitHub (Aug 31, 2022):

#1482

<!-- gh-comment-id:1233239378 --> @tablatronix commented on GitHub (Aug 31, 2022): #1482
Author
Owner

@mheig commented on GitHub (May 5, 2024):

Happened! The problem is solved by thoroughly cleaning the flash with esptool.py.

Hi! How did you do that?

<!-- gh-comment-id:2094927898 --> @mheig commented on GitHub (May 5, 2024): > Happened! The problem is solved by thoroughly cleaning the flash with esptool.py. Hi! How did you do that?
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/WiFiManager#689
No description provided.