I've started going in circles with this. I am using the Ken Taylor port of the wifiManager library and want to add my own website.
I have the wifiManager library working.
I have the website working when the credentials are hard coded.
Failed at combining the two.
What I would like to achieve:
- Use the wifiManager portal to enter the wifi credentials
- Connect to the local wifi
- serve a small website over the local network.
- Still have the wifiManager portal active but only only when connected directly to the ESP8266 on 192.168.4.1
In the below sketch. The ESP8266 connects to the local network but when I go to the new ip address I get the wifiManager portal. I don't get my website. It appears the captive portal is still active.
The Looping message is not displayed until after I close the portal. After closing the portal the Looping message is displayed but I get no response from the local network. My webpage is not served.
Everything tells me this should be straight forward but I cannot get it to work.
#include <ESP8266WiFi.h>
WiFiServer server(80);
#include <ESP8266WiFi.h>
//needed for library
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>
// Onboard LED I/O pin on NodeMCU board
const int PIN_LED = D4;
String request = "";
unsigned long time_now = 0;
unsigned long time_prev = 0;
void setup()
{
pinMode(PIN_LED, OUTPUT);
Serial.begin(115200);
Serial.println("\n Starting");
unsigned long startedAt = millis();
WiFi.printDiag(Serial); //Remove this line if you do not want to see WiFi password printed
Serial.println("Opening configuration portal");
digitalWrite(PIN_LED, LOW); // 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
WiFiManager wifiManager;
//it starts an access point
//and goes into a blocking loop awaiting configuration
if (!wifiManager.startConfigPortal("ESP8266","password"))
{ //Delete these two parameters if you do not want a WiFi password on your configuration access point
Serial.println("Not connected to WiFi but continuing anyway.");
}
else
{
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
}
digitalWrite(PIN_LED, HIGH); // Turn led off as we are not in configuration mode.
// For some unknown reason webserver can only be started once per boot up
// so webserver can not be used again in the sketch.
Serial.print("After waiting ");
int connRes = WiFi.waitForConnectResult();
float waited = (millis()- startedAt);
Serial.print(waited/1000);
Serial.print(" secs in setup() connection result is ");
Serial.println(connRes);
if (WiFi.status()!=WL_CONNECTED)
{
Serial.println("failed to connect, finishing setup anyway");
}
else
{
Serial.print("local ip: ");
Serial.println(WiFi.localIP());
}
}
void loop()
{
// Check if a client has connected
WiFiClient client = server.available();
if (client)
{
Serial.println("Client is connected");
// Read the first line of the request
request = client.readStringUntil('\r');
Serial.print(F("request = ")); Serial.println( request );
client.flush();
client.print( "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" );
client.print( "<!DOCTYPE html><html><head><title>Title</title></head><body><div id='main'><h2>H2 title</h2></div></body></html>" );
delay(5);
client.stop();
Serial.println("Client disonnected");
time_prev = millis();
}
time_now = millis();
if (time_now - time_prev > 5000)
{
time_prev = millis();
Serial.println( "Looping" );
}
}
Here's what I get in the serial monitor. The Looping message starts when the portal is closed. Not sure if this is useful.
*WM: Connection result:
*WM: WL_CONNECTED
*WM: Handle root
*WM: Info
*WM: Sent info page
*WM: Handle root
*WM: Server Close
*WM: Sent server close page
connected...yeey :)
After waiting 73.47 secs in setup() connection result is 3
local ip: 192.168.169.2
Looping
Looping
The Esp8266 is connected to the local network but the new webpage is not being served. The connection has been verified.
Would really appreciate some help or a working example.