SoftAP - creating Web server
Posted: Thu May 23, 2024 7:25 am
Hi,
I have a program that used to work, but it no longer works the way I want it to. I am creating web server with Esp8266. After connecting Esp8266 normally when I open 192.168.6.1 needs to show me wifi page so I can enter my wifi name and password. It used to work this way but now it redirects me to 192.168.6.1/static. There is nothing on this page, it just says "Not found: /static/". I don't know what changed. I am adding the function where I created the web server below.
Regards Fatih
Code: Select all
void createWebServer (void){
const char * headerkeys[] = {"User-Agent","Cookie"} ;
size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
//ask server to track these headers
server.collectHeaders(headerkeys, headerkeyssize );
server.begin();
server.on("/", []
{
if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
header = "HTTP/1.1 301 OK\r\nLocation: /static/\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
last_active = millis(); // SUAT
mobcn = 1; //oc4100 tarafi wifi menusunden ciksin.
});
/*server.on("/static", []
{
if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
header = "HTTP/1.1 301 OK\r\nLocation: /static/\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
}); */
server.on("/login", handleLogin);
server.on("/apupdate", []()
{
/*if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}*/
//if (we_are == STATION) //sadece networkde iken, ap reconfigureye izin veriyoruz. Cunku guvenlikten oturu. Komsuda ayni fırın varsa, girip bizim sifremizid degistirmesin diye...
//{
String apusid = server.arg("apssid");
String apupass = server.arg("appphrs");
if ((apusid.length() > 0) && (apupass.length() > 7) && (apusid.length()<12) && (apupass.length() < 9))
{
Serial.println("APSID: "); Serial.println(apusid);
Serial.println("APPAS: "); Serial.println(apupass);
//EEPROM.begin(512);
EEPROM.write(2, apusid.length());
EEPROM.write(14, apupass.length());
for (int i = 0; i < apusid.length(); ++i)
{
EEPROM.write(i+3, apusid[i]);
}
for (int i = 0; i < apupass.length(); ++i)
{
EEPROM.write(i+15, apupass[i]);
}
//EEPROM.write(0, 0xAB);
//EEPROM.write(1, 0xCD);
EEPROM.write(122, 0x01); //custom AP
Serial.println("EEPROM Updated with: ");
Serial.print(EEPROM.read(122), HEX);
EEPROM.commit();
delay(100);
}
else
{
Serial.println("Length Error");
}
String header = "HTTP/1.1 301 OK\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
if (we_are == STATION)
{
delay(1);
}
else
{
delay(100);
ESP.restart();
}
});
server.on("/wifi", []()
{
if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
int n = WiFi.scanNetworks();
content = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"tr\" lang=\"tr\">";
content += "<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-16\" /><meta http-equiv=\"Content-Language\" content=\"tr\"/>";
content += "<head> <title>OC4100</title> </head> <body style=\"padding:0px; margin:0px; overflow:hidden; background-color:#000000;\"> <div id=\"content\" style=\"position:absolute; overflow:hidden; width: 370px; margin-top:40px; margin-left:0px;\">";
content += "<table id=\"scanTable\" cellpadding=\"2\" border=\"0\"><tbody><tr><td colspan=\"4\">";
for (int x=0; x < n; x++)
{
content += "<button type=\"button\" style=\"width:300px\" value=\"";
content += WiFi.SSID(x);
content += "\" onclick=\"get_ssid(this.value)\">";
content += WiFi.SSID(x);
content += " Signal: ";
content += WiFi.RSSI(x);
content += "</button></br>";
}
switch(act_lang)
{
case 0:
content += "<div id=\"ssids\"></p><form method='get' action='setting'><h3 style='color:white;'>AĞ: </h3><input name='ssid' id=\"ss\" length=32 style=\"width:300px\"><h3 style='color:white;'>ŞİFRE: </h3><input name='pass' id=\"pass\" length=64 style=\"width:300px\"></br></br></br><input type='submit' style=\"width:300px\" value=\"Gönder\"></form></div></td></tr></tbody><tr><td colspan=\"4\"><input style=\"width:300px\" id=\"retbtn\" type=\"button\" value=\"Geri\" onclick=\"location.href='/'\"/></td></tr></table></div>";
break;
case 1:
content += "<div id=\"ssids\"></p><form method='get' action='setting'><h3 style='color:white;'>NETWORK: </h3><input name='ssid' id=\"ss\" length=32 style=\"width:300px\"><h3 style='color:white;'>PASSWORD: </h3><input name='pass' id=\"pass\" length=64 style=\"width:300px\"></br></br></br><input type='submit' style=\"width:300px\" value=\"Send\"></form></div></td></tr></tbody><tr><td colspan=\"4\"><input style=\"width:300px\" id=\"retbtn\" type=\"button\" value=\"Return\" onclick=\"location.href='/'\"/></td></tr></table></div>";
break;
case 2:
content += "<div id=\"ssids\"></p><form method='get' action='setting'><h3 style='color:white;'>NETZWERK: </h3><input name='ssid' id=\"ss\" length=32 style=\"width:300px\"><h3 style='color:white;'>PASSWORT: </h3><input name='pass' id=\"pass\" length=64 style=\"width:300px\"></br></br></br><input type='submit' style=\"width:300px\" value=\"Senden\"></form></div></td></tr></tbody><tr><td colspan=\"4\"><input style=\"width:300px\" id=\"retbtn\" type=\"button\" value=\"Rückkehr\" onclick=\"location.href='/'\"/></td></tr></table></div>";
break;
case 3:
content += "<div id=\"ssids\"></p><form method='get' action='setting'><h3 style='color:white;'>RÉSEAU: </h3><input name='ssid' id=\"ss\" length=32 style=\"width:300px\"><h3 style='color:white;'>MOT DE PASSE: </h3><input name='pass' id=\"pass\" length=64 style=\"width:300px\"></br></br></br><input type='submit' style=\"width:300px\" value=\"Envoyer\"></form></div></td></tr></tbody><tr><td colspan=\"4\"><input style=\"width:300px\" id=\"retbtn\" type=\"button\" value=\"Revenir\" onclick=\"location.href='/'\"/></td></tr></table></div>";
break;
case 4:
content += "<div id=\"ssids\"></p><form method='get' action='setting'><h3 style='color:white;'>RETE: </h3><input name='ssid' id=\"ss\" length=32 style=\"width:300px\"><h3 style='color:white;'>PAROLA D'ORDINE: </h3><input name='pass' id=\"pass\" length=64 style=\"width:300px\"></br></br></br><input type='submit' style=\"width:300px\" value=\"Inviare\"></form></div></td></tr></tbody><tr><td colspan=\"4\"><input style=\"width:300px\" id=\"retbtn\" type=\"button\" value=\"Ritorno\" onclick=\"location.href='/'\"/></td></tr></table></div>";
break;
case 5:
content += "<div id=\"ssids\"></p><form method='get' action='setting'><h3 style='color:white;'>RED: </h3><input name='ssid' id=\"ss\" length=32 style=\"width:300px\"><h3 style='color:white;'>CONTRASEÑA: </h3><input name='pass' id=\"pass\" length=64 style=\"width:300px\"></br></br></br><input type='submit' style=\"width:300px\" value=\"Enviar\"></form></div></td></tr></tbody><tr><td colspan=\"4\"><input style=\"width:300px\" id=\"retbtn\" type=\"button\" value=\"Regreso\" onclick=\"location.href='/'\"/></td></tr></table></div>";
break;
}
content += "<script type=\"text/javascript\">var ssid; function get_ssid(ssid){console.log(ssid); var entry = document.getElementById(\"ss\"); entry.setAttribute(\"value\", ssid);};</script></body></html>";
last_active = millis(); // SUAT
server.send(200, "text/html", content);
});
server.on("/stat.xml", []()
{
if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
last_active = millis(); // SUAT
SendStat();
} );
server.on("/setting", []()
{
//Serial.println("setting req");
if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
last_active = millis(); // SUAT
String qsid = server.arg("ssid");
String qpass = server.arg("pass");
content = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">";
if (qsid.length() > 0 && qpass.length() > 0)
{
for (int i = 0; i < qsid.length(); ++i)
{
EEPROM.write(i+23, qsid[i]);
//Serial.print("Wrote: ");
//Serial.println(qsid[i]);
}
for (int i = 0; i < qpass.length(); ++i)
{
EEPROM.write(56+i, qpass[i]);
//Serial.print("Wrote: ");
//Serial.println(qpass[i]);
}
network_recorded = 0;
main_stat = CMD_CONNECT;
stat = WIFI_CONNECTING;
EEPROM.write(121, 0x01); //connecting
EEPROM.commit();
//Serial.println("Restarting for NETWORK");
delay(200);
ESP.restart();
}
else
{
content += "<head> <title>OC4100</title><meta http-equiv=\"refresh\" content=\"0; url=http://" + WiFi.localIP().toString() + "/wifi\"> </head>";
content += "<body style=\"padding:0px; margin:0px; overflow:hidden; background-color:#000000;\"> </body></html>";
statusCode = 404;
server.send(statusCode, "text/html", content);
}
});
server.on("/buttons", []()
{
if ((!is_authentified()) && (we_are == STATION))
{
header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
last_active = millis(); // SUAT
if (server.hasArg("ckdly"))
{
String arg2 = server.arg("ckdly");
int val2 = arg2.toInt();
String arg1 = server.arg("ckdur");
int val = arg1.toInt();
/*String arg3 = server.arg("ffonk");
int val3 = arg3.toInt();
String arg4 = server.arg("ctemp");
int val4 = arg4.toInt();*/
buttonpressed = 1;
//Serial.println(val2);
//Serial.println(val);
command_byte = byte(231); //ckdly
data_byte[0] = (byte) (val / 256); //Hi kisim
data_byte[1] = (byte) (val % 256); //Lo kisim
data_byte[2] = (byte) (val2 / 256); //Hi kisim
data_byte[3] = (byte) (val2 % 256); //Lo kisim
/*data_byte[4] = (byte) val3;
data_byte[5] = (byte) (val4 / 256);
data_byte[6] = (byte) (val4 % 256);*/
}
else if (server.hasArg("ckdly2"))
{
String arg2 = server.arg("ckdly2");
int val2 = arg2.toInt();
String arg1 = server.arg("ckdur2");
int val = arg1.toInt();
/*String arg3 = server.arg("ffonk");
int val3 = arg3.toInt();
String arg4 = server.arg("ctemp");
int val4 = arg4.toInt();*/
buttonpressed = 1;
//Serial.println(val2);
//Serial.println(val);
command_byte = byte(229); //ckdly //escye basildi. gonderip geri gidecegiz.
data_byte[0] = (byte) (val / 256); //Hi kisim
data_byte[1] = (byte) (val % 256); //Lo kisim
data_byte[2] = (byte) (val2 / 256); //Hi kisim
data_byte[3] = (byte) (val2 % 256); //Lo kisim
/*data_byte[4] = (byte) val3;
data_byte[5] = (byte) (val4 / 256);
data_byte[6] = (byte) (val4 % 256);*/
}
else if (server.hasArg("ffonk"))
{
String arg1 = server.arg("ffonk");
int val1 = arg1.toInt();
String arg2 = server.arg("ctemp");
int val2 = arg2.toInt();
data_byte[4] = (byte) val1;
data_byte[5] = (byte) (val2 / 256);
data_byte[6] = (byte) (val2 % 256);
buttonpressed = 1;
command_byte = byte(232); //fonktemp
}
else if (server.hasArg("almsethr"))
{
String arg1 = server.arg("almsethr");
int val1 = arg1.toInt();
String arg2 = server.arg("almsetmin");
int val2 = arg2.toInt();
data_byte[0] = (byte) val1;
data_byte[1] = (byte) val2;
buttonpressed = 1;
command_byte = byte(233); //alm set
}
else if (server.hasArg("sethr"))
{
String arg1 = server.arg("sethr");
int val1 = arg1.toInt();
String arg2 = server.arg("setmin");
int val2 = arg2.toInt();
data_byte[0] = (byte) val1;
data_byte[1] = (byte) val2;
buttonpressed = 1;
command_byte = byte(234); //clock set
}
else if (server.hasArg("setyear"))
{
String arg1 = server.arg("setyear");
int val1 = arg1.toInt();
String arg2 = server.arg("setmonth");
int val2 = arg2.toInt();
String arg3 = server.arg("setday");
int val3 = arg3.toInt();
if (val1 >= 2000) val1 = val1-2000;
data_byte[0] = (byte) val1;
data_byte[1] = (byte) val2;
data_byte[2] = (byte) val3;
buttonpressed = 1;
command_byte = byte(235); //date set
}
else if (server.hasArg("mpset"))
{
String arg1 = server.arg("mpset");
int val1 = arg1.toInt();
String arg2 = server.arg("ffonk");
int val2 = arg2.toInt();
String arg3 = server.arg("ctemp");
int val3 = arg3.toInt();
data_byte[0] = (byte) val1;
data_byte[1] = (byte) val2;
data_byte[2] = (byte) (val3 / 256);
data_byte[3] = (byte) (val3 % 256);
buttonpressed = 1;
command_byte = byte(236); //mp set
}
else
{
if (buttonpressed == 1) return;
String but_id = server.arg("but");
int sw = but_id.toInt();
if ((sw == 0) || (sw == 0x30))
{
//Serial.println("error");
return;
}
buttonpressed = 1;
//Serial.println(85);
//Serial.println(sw);
switch (sw) {
case 0:
command_byte = byte(160); // I/O Button
break;
case 1:
command_byte = byte(161); // ESC button
break;
case 2:
command_byte = byte(162); // Menu button
break;
case 3:
command_byte = byte(163); // Up button
break;
case 4:
command_byte = byte(164); // Down button
break;
case 5:
command_byte = byte(165); // OK button
break;
case 6: // Exit Button
if (server.hasArg("DISCONNECT")){
if (we_are == STATION) //AP isek logout bir ise yaramaz.
{
//Serial.println("Disconnection");
String header = "HTTP/1.1 301 OK\r\nSet-Cookie: c=0\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
}
else
{
String header = "HTTP/1.1 301 OK\r\nLocation:/ \r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
}
buttonpressed = 0;
return;
//command_byte = byte(111); // buraya "client offline oldu" tarzı bisey koyabiliriz
}
break;
case 7:
command_byte = byte(167); // Light button
break;
case 8:
command_byte = byte(168); // up arrow button
break;
case 9:
command_byte = byte(169); // Lock button
break;
case 10:
command_byte = byte(170); // x1 button
break;
case 11:
command_byte = byte(171); // fonk_left button
break;
case 12:
command_byte = byte(172); // fonk_right button
break;
case 13:
command_byte = byte(173); // temp_left button
break;
case 14:
command_byte = byte(174); // temp_right button
break;
default:
command_byte = 0;
break;
}
}
server.send(200);
});
}