Вариант, WIFIManager. Все сети и пароли называете одинаково.
Вы используете штатные настройки WiFi сети ЕСП8266. даже при этом у меня компилируется нормально.
Код: Выделить всё
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <ESP8266WiFiMulti.h>
extern "C"
{
#include "user_interface.h"
}
ESP8266WiFiMulti wifiMulti;
/*bool ESPControllerWifiClient_HRD = 0;
bool ESPControllerWifiClient_status = 1;
bool ESPControllerWifiClient_isDHCP = 1;
bool ESPControllerWifiClient_IsNeedReconect = 0;
bool ESPControllerWifiClient_workStatus = 1;
char ESPControllerWifiClient_SSID[40] = "MTS";
char ESPControllerWifiClient_password[40] = "12345678";*/
IPAddress ESPControllerWifiClient_ip(0, 0, 0, 0);
/*IPAddress ESPControllerWifiClient_dns (0, 0, 0, 1);
IPAddress ESPControllerWifiClient_gateway (0, 0, 0, 1);
IPAddress ESPControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESPControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};*/
bool ESPControllerWifi_isNeededRestsrt= 0;
ESP8266WebServer ESPControllerWifi_tspWebServer(80);
String ESPControllerWifi_tspWebServer_client_buffer="";
bool _webInterfaceMinuItemsVisualMode[] = {0};
String webSettingPageHeader1 = "<!DOCTYPE HTML><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><html>";
String getXmlHttpFunction = "function gX()\n{\nvar x;\ntry\n{\nx=new ActiveXObject(\"Msxml2.XMLHTTP\");\n}\ncatch (e)\n{\ntry\n{\nx = new ActiveXObject(\"Microsoft.XMLHTTP\");\n}\ncatch (E)\n{\nx=false;\n}\n}\nif(!x && typeof XMLHttpRequest!='undefined')\n{\nx=new XMLHttpRequest();\n}\nreturn x;\n}";
String webSettingPageFooterString = "ESP8266 - Разработано в программе FLProg (https://flprog.ru)";
String webSettingPageHeaderString = "ESP8266";
struct WebSettingPageWidgetParametrs
{
String label;
String style;
String id;
bool isClient;
bool isIp;
bool isAutoSave;
bool hasLabel;
bool hasCommonDiv;
String labelStyle;
byte labelPosition;
String valueStyle;
int maximumStringLength;
}
;
WebSettingPageWidgetParametrs _webSettingPageWidgetParametrs;
String _ESP8266WebInterfacePageButton_save= "<button class = \"buttonFlp\" onclick=\"sDat()\">Сохранить</button>";
String _ESP8266WebInterfacePageButton_reset= "<button class = \"buttonFlp\" onclick=\"rCon()\">Перезагрузить</button>";
String resetControllerFromWebScript = " function rCon(){var x=gX();\nx.onreadystatechange=function(){if (x.readyState==4){document.location.reload();}}\nx.open(\"GET\",\"/27e999da-8651-42e8-b2c0-26d9bd18a5f7\",true); x.send(); }";
String webServerSettingPageSaveParametrsScript =" function sDat()\n{\nvar x=gX();\nvar r=\"/b639083e-fd40-4c9b-a872-0cb0213d448d?\";\nfor(let i=0;i<sD.c;i++)\n{\nlet e=document.getElementById(sD.d[i].i);\nsD.d[i].e=false;\nif(e!=null)\n{\nif(i>0)\n{\nr=r+\"&\";\n}\nr=r+sD.d[i].i+\"=\"+e.value;\n}\n}\nx.onreadystatechange=function()\n{\nif(x.readyState==4)\n{\n}\n}\nx.open(\"GET\",r,true);\nx.send();}";
String webServerSettingPageAutoSaveParametrsScript =" function sED(id)\n{\nvar x=gX();\nvar r=\"/b639083e-fd40-4c9b-a872-0cb0213d448d?\";\nvar e=document.getElementById(id);\nif(e!=null)\n{\nr=r+id+\"=\"+e.value;\n}\nfor(let i=0;i<sD.c;i++)\n{\nsD.d[i].e=false;\n}\nx.onreadystatechange=function()\n{\nif(x.readyState==4)\n{}\n}\nx.open(\"GET\",r,true);\nx.send();\n}";
String webSettingPageMainStyle = ".menu{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;padding:1%;margin:1%;width:16%;border:1px solid black;border-radius:8px;}.menuItem{font-weight:600;font-family:'Times New Roman', Times, serif;display:block;margin:5px;width:95%;}.header{padding:10px;left:0px;right:0px;top:0px;background:#00FFFF;text-align:center;font-weight:600;font-family:'Times New Roman', Times, serif;font-size:250%;}.content{float:right;width:78%;}.footer{float:left;padding:1%;width:98%;background:#00FFFF;margin-top:1%;text-align:center;font-weight:600;font-family:'Times New Roman', Times, serif;font-size:150%;}.buttonFlp{width:150px;border-radius:20px;background:#459DE5;color:#fff;font-size:12px;cursor:pointer;float:left;padding:1%;margin:1%;}.buttonFlp:hover{background:#358DE5;}.buttonFlp:focus{outline:none;}.stLab{margin:5px 0;}.stBtn{margin:5px;}.stLig{margin:5px;width:50px;height:50px;border-radius:20%;display:inline-flex;align-items:center;justify-content:center;}.stText{margin:5px 0;}.stIF{margin:5px 0;}.stWL{height:100px;width:400px;overflow:auto;}.stChb{margin:5px 0;}.stRb{margin:5px 0;}.stCB{margin:5px 0;}";
String parseWebServerResponseScript =" function pRD(x){\ntry {var r=JSON.parse(x.responseText);}\ncatch (e) {setTimeout(gND(),1000); return;}\nif(r.r < 1){setTimeout(gND(),1000); return;}\nfor(let i=0;i<r.c;i++){uCE(i,r);}\nsetTimeout(gND(),1000);\n}\nfunction uCE(i,r){\nlet e=document.getElementById(r.d[i].i);\nif(e==null){return;}\nif(r.d[i].t==\"T\") { e.innerHTML=r.d[i].v; return;}\nif(r.d[i].t==\"L\") {e.style.backgroundColor=r.d[i].v; return;}\nif(!(cND(r.d[i].i))){return;}\ne.value=r.d[i].v;\nif(r.d[i].t==\"H\")\n{\ne=document.getElementById(r.d[i].i+\"A\");\nif(e!=null){e.checked=(r.d[i].v==\"1\");}\n}\nif(r.d[i].t==\"R\"){\ne=document.getElementsByName(r.d[i].i);\nif(e==null){return;}\nfor(let i1=0;i1<e.length;i1++){\nif(e[i1].value ==r.d[i].v){\ne[i1].checked=true;\n}\nelse {\ne[i1].checked=false;\n}\n}\n}\n}\nfunction cND(id){\nfor(let i=0;i<sD.c;i++){\nif(sD.d[i].i == id){return !sD.d[i].e;}\n}\nreturn false;\n}\nfunction blI(id){\nfor(let i=0;i<sD.c;i++){\nif(sD.d[i].i == id){sD.d[i].e=true; return; }\n}\n}";
String sendWebServerResponseScriptPart1 =" function gND(){\nlet x=gX();\nx.onreadystatechange=function()\n{\nif(x.readyState==4)\n{pRD(x);\n}\n};\nlet r=\"/c1f1724b-d2ee-4caf-98d7-f0053fc4b2f2?page=";
String sendWebServerResponseScriptPart2 ="\";\nx.open(\"GET\",r,true);\nx.send();\n}";
bool isNeededCommitESP8266EEprom = 0;
void setup()
{
EEPROM.begin(5);
if(((readByteFromEEPROM(0, 0, 0x0))) != 93)
{
(updateByteToEEPROM(0, 0, 0x0, (93)));
(updateUnsignedLongToEEPROM(1, 0, 0x0, (0)));
EEPROM.commit();
}
/* ESPControllerWifiClient_ip = _ipAddressFromUnsignetLong(readUnsignedLongFromEEPROM(1, 0, 0x0));
WiFi.mode(WIFI_STA);
if (WiFi.getAutoConnect() != true) WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
_esp8266WifiModuleClientReconnect();*/
ESPControllerWifi_tspWebServer.on("/", _sendWebServerPage1);
ESPControllerWifi_tspWebServer.on("/27e999da-8651-42e8-b2c0-26d9bd18a5f7", _resetControllerFromWebPage);
ESPControllerWifi_tspWebServer.on("/b639083e-fd40-4c9b-a872-0cb0213d448d", _parseChangedDataFromWebPage);
ESPControllerWifi_tspWebServer.on("/c1f1724b-d2ee-4caf-98d7-f0053fc4b2f2", _newDataReqestForWebPage);
ESPControllerWifi_tspWebServer.onNotFound(_sendWebServerSend404Page);
ESPControllerWifi_tspWebServer.begin();
ESPControllerWifiClient_ip = WiFi.localIP(); // Добавить
Serial.begin(115200);
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
wifiMulti.addAP("MTS_137", "12345678");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
}
void loop()
{
ESPControllerWifi_tspWebServer.handleClient();
if (isNeededCommitESP8266EEprom)
{
EEPROM.commit();
isNeededCommitESP8266EEprom=0;
}
if(ESPControllerWifi_isNeededRestsrt)
{
ESP.restart();
}
/* if(ESPControllerWifiClient_IsNeedReconect)
{
_esp8266WifiModuleClientReconnect();
ESPControllerWifiClient_IsNeedReconect = 0;
}
ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESPControllerWifiClient_status)
{
if (! ESPControllerWifiClient_HRD)
{
ESPControllerWifiClient_ip = WiFi.localIP();
ESPControllerWifiClient_subnet = WiFi.subnetMask();
ESPControllerWifiClient_gateway = WiFi.gatewayIP();
ESPControllerWifiClient_dns = WiFi.dnsIP();
WiFi.macAddress(ESPControllerWifiClient_mac);
ESPControllerWifiClient_HRD = 1;
}
}
else
{
ESPControllerWifiClient_HRD = 0;
}*/
//Плата:1
if (wifiMulti.run(5000) == WL_CONNECTED)
{
Serial.print("WiFi connected: ");
Serial.print(WiFi.SSID());
Serial.print(" ");
Serial.println(WiFi.localIP());
}
else
{
Serial.println("WiFi not connected!");
}
delay(1000);
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
void _sendWebServerSend404Page()
{
String page = "<!DOCTYPE HTML><html><body><p>404 - Page not fond</p></body></html>";
ESPControllerWifi_tspWebServer.send(400, "text/html", page);
}
void _parseChangedDataFromWebPage()
{
String id;
String value;
for (int i = 0; i < ESPControllerWifi_tspWebServer.args(); i++)
{
id = ESPControllerWifi_tspWebServer.argName(i);
value = ESPControllerWifi_tspWebServer.arg(i);
}
ESPControllerWifi_tspWebServer.send(200, "text/plain", "ok");
}
void _resetControllerFromWebPage()
{
ESPControllerWifi_isNeededRestsrt = 1;
ESPControllerWifi_tspWebServer.send(200, "text/plane", "");
}
void _sendWebServerPage1()
{
ESPControllerWifi_tspWebServer.chunkedResponseModeStart(200, "text/html");
ESPControllerWifi_tspWebServer.sendContent(webSettingPageHeader1);
ESPControllerWifi_tspWebServer.sendContent("<head>");
ESPControllerWifi_tspWebServer.sendContent("<style>");
ESPControllerWifi_tspWebServer.sendContent((String(webSettingPageMainStyle)+" "));
ESPControllerWifi_tspWebServer.sendContent("\"</style>");
ESPControllerWifi_tspWebServer.sendContent("</head>");
ESPControllerWifi_tspWebServer.sendContent("<body>");
ESPControllerWifi_tspWebServer.sendContent("<div class=\"header\">");
ESPControllerWifi_tspWebServer.sendContent(String(webSettingPageHeaderString));
ESPControllerWifi_tspWebServer.sendContent("</div>");
ESPControllerWifi_tspWebServer.sendContent("<div class=\"content\">");
_webSettingPageWidgetParametrs.style = "";
_webSettingPageWidgetParametrs.label = "ip adress";
_webSettingPageWidgetParametrs.hasLabel = 1;
_webSettingPageWidgetParametrs.hasCommonDiv = 1;
_webSettingPageWidgetParametrs.labelStyle = "stLab";
_webSettingPageWidgetParametrs.valueStyle = "stText";
_webSettingPageWidgetParametrs.labelPosition = 0;
_webSettingPageWidgetParametrs.id = "P1";
_webSettingPageWidgetParametrs.isIp = 1;
_webSettingPageWidgetParametrs.isClient = 1;
ESPControllerWifi_tspWebServer.sendContent(_eSP8266SettingWebPageTextVisualElement());
ESPControllerWifi_tspWebServer.sendContent("<div>");
ESPControllerWifi_tspWebServer.sendContent(String(_ESP8266WebInterfacePageButton_save));
ESPControllerWifi_tspWebServer.sendContent(_ESP8266WebInterfacePageButton_reset);
ESPControllerWifi_tspWebServer.sendContent("</div>");
ESPControllerWifi_tspWebServer.sendContent("</div>");
ESPControllerWifi_tspWebServer.sendContent("<div class=\"footer\">");
ESPControllerWifi_tspWebServer.sendContent(String(webSettingPageFooterString));
ESPControllerWifi_tspWebServer.sendContent("</div>");
ESPControllerWifi_tspWebServer.sendContent("<script>");
ESPControllerWifi_tspWebServer.sendContent(getXmlHttpFunction);
ESPControllerWifi_tspWebServer.sendContent(resetControllerFromWebScript);
ESPControllerWifi_tspWebServer.sendContent("let sD={c:0,d:[]};");
ESPControllerWifi_tspWebServer.sendContent(webServerSettingPageSaveParametrsScript);
ESPControllerWifi_tspWebServer.sendContent(sendWebServerResponseScriptPart1);
ESPControllerWifi_tspWebServer.sendContent("1");
ESPControllerWifi_tspWebServer.sendContent(sendWebServerResponseScriptPart2);
ESPControllerWifi_tspWebServer.sendContent(parseWebServerResponseScript);
ESPControllerWifi_tspWebServer.sendContent(" window.onload = function() {gND();");
ESPControllerWifi_tspWebServer.sendContent("};");
ESPControllerWifi_tspWebServer.sendContent("</script>");
ESPControllerWifi_tspWebServer.sendContent("</body></html>");
ESPControllerWifi_tspWebServer.chunkedResponseFinalize();
}
void _newDataReqestForWebPage()
{
int page = (String(ESPControllerWifi_tspWebServer.arg("page"))).toInt();
String result ="{";
switch (page)
{
case 1:
result.concat("\"r\":\"");
result.concat("1000");
result.concat("\",\"c\":\"1\",\"d\":[");
result.concat("{\"i\":\"P1\", \"v\":");
result.concat("\"");
result.concat((ESPControllerWifiClient_ip.toString()));
result.concat("\"");
result.concat(", \"t\":\"T\"}");
result.concat("]");
break;
}
result.concat("}");
ESPControllerWifi_tspWebServer.send(200, "text/json",result);
}
byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return EEPROM.read(addres);
}
void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value)
{
isNeededCommitESP8266EEprom = 1;
return EEPROM.write(addres, value);
}
unsigned long readUnsignedLongFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte x[4];
for(byte i = 0; i < 4; i++)
{
x[i] = readByteFromEEPROM((addres+i), bitAddres, chipAddres);
}
unsigned long *y = (unsigned long *)&x;
return y[0];
}
void updateUnsignedLongToEEPROM(int addres, byte bitAddres, byte chipAddres, unsigned long value)
{
byte *x = (byte *)&value;
for(byte i = 0; i < 4; i++)
{
updateByteToEEPROM((addres+i), bitAddres, chipAddres, x[i]);
}
}
IPAddress _ipAddressFromUnsignetLong(unsigned long value)
{
IPAddress result;
byte *x = (byte *)&value;
for (byte i = 0; i < 4; i++)
{
result[i] = x[i];
}
return result;
}
bool checkIPAdressString(String value)
{
IPAddress temp;
return temp.fromString(value);
}
IPAddress _ipAddressFromString(String value)
{
IPAddress temp;
temp.fromString(value);
return temp;
}
unsigned long _unsignetLongFromIPAdress(IPAddress value)
{
byte buufer[4] = {0, 0, 0, 0};
for (byte i = 0; i < 4; i++)
{
buufer[i] = value[i];
}
unsigned long *y = (unsigned long *)&buufer;
return y[0];
}
String IpAddressToString(const IPAddress& ipAddress)
{
return String(ipAddress[0]) + String(".") + String(ipAddress[1]) + String(".") + String(ipAddress[2]) + String(".") + String(ipAddress[3]) ;
}
String _eSP8266SettingWebPageStartMainDivVisualElement ()
{
if(!(_webSettingPageWidgetParametrs.hasCommonDiv && _webSettingPageWidgetParametrs.hasLabel))
{
return "";
}
String result ="<div";
if (_webSettingPageWidgetParametrs.style.length() > 0)
{
result.concat(" class=\"");
result.concat(_webSettingPageWidgetParametrs.style);
result.concat("\"");
}
result.concat(">");
return result;
}
String _eSP8266SettingWebPageStopMainDivVisualElement ()
{
if(_webSettingPageWidgetParametrs.hasCommonDiv && _webSettingPageWidgetParametrs.hasLabel)
{
return "</div>";
}
return "";
}
String _eSP8266SettingWebPageWidgetLabelVisualElement (byte position)
{
if(!(_webSettingPageWidgetParametrs.hasLabel &&(_webSettingPageWidgetParametrs.labelPosition==position)))
{
return "";
}
String result ="";
bool isNeededDiv =(((position == 1) &&(_webSettingPageWidgetParametrs.labelStyle.length() > 0))||(position != 1));
if(isNeededDiv)
{
result.concat("<div ");
}
if (_webSettingPageWidgetParametrs.labelStyle.length() > 0)
{
result.concat(" class=\"");
result.concat(_webSettingPageWidgetParametrs.labelStyle);
result.concat("\"");
}
if(isNeededDiv)
{
result.concat(" > ");
}
result.concat(_webSettingPageWidgetParametrs.label);
if(isNeededDiv)
{
result.concat("</div>");
}
return result;
}
String _eSP8266SettingWebPageTextVisualElement ()
{
String result = _eSP8266SettingWebPageStartMainDivVisualElement ();
result.concat(_eSP8266SettingWebPageWidgetLabelVisualElement (0));
result.concat("<div id =\"");
result.concat(_webSettingPageWidgetParametrs.id);
result.concat("\" ");
if (_webSettingPageWidgetParametrs.valueStyle.length() > 0)
{
result.concat(" class=\"");
result.concat(_webSettingPageWidgetParametrs.valueStyle);
result.concat("\"");
}
result.concat("></div>");
result.concat(_eSP8266SettingWebPageWidgetLabelVisualElement (2));
result.concat(_eSP8266SettingWebPageStopMainDivVisualElement ());
return result;
}
/*int hexStrToInt(String instring)
{
byte len = instring.length();
if (len == 0) return 0;
int result = 0;
for (byte i = 0; i < 8; i++) // только первые 8 цыфар влезуть в uint32
{
char ch = instring[i];
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - '0');
else result = result | (ch - 'A' + 10);
}
return result;
}
void _esp8266WifiModuleClientReconnect()
{
if(_checkMacAddres(ESPControllerWifiClient_mac))
{
wifi_set_macaddr(0, const_cast<uint8*>(ESPControllerWifiClient_mac));
}
if(ESPControllerWifiClient_isDHCP)
{
WiFi.config(0U, 0U, 0U, 0U, 0U);
}
else
{
WiFi.config(ESPControllerWifiClient_ip, ESPControllerWifiClient_gateway, ESPControllerWifiClient_subnet, ESPControllerWifiClient_dns , ESPControllerWifiClient_dns);
}
WiFi.begin(ESPControllerWifiClient_SSID, ESPControllerWifiClient_password);
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array[i] == 255)
{
return 0;
}
if (array[i] > 0)
{
result = 1;
}
}
return result;
}
void _parseMacAddressString(String value, byte array[])
{
int index;
byte buffer[6] = {255, 255, 255, 255, 255, 255};
byte raz = 0;
String tempString;
while ((value.length() > 0) && (raz <= 6))
{
index = value.indexOf(":");
if (index == -1)
{
tempString = value;
value = "";
}
else
{
tempString = value.substring(0, index);
value = value.substring(index + 1);
}
buffer[raz] = byte(hexStrToInt(tempString));
raz++;
}
if (_checkMacAddres(buffer))
{
for (byte i = 0; i < 6; i++)
{
array[i] = buffer[i];
}
}
}
bool _compareMacAddreses(byte array1[], byte array2[])
{
for (byte i = 0; i < 6; i++)
{
if (array1[i] != array2[i])
{
return 0;
}
}
return 1;
}
bool _compareMacAddresWithString(byte array[], String value)
{
byte buffer[6] = {255, 255, 255, 255, 255, 255};
_parseMacAddressString(value, buffer);
return _compareMacAddreses(array, buffer);
}
bool _checkMacAddresString(String value)
{
byte buffer[6] = {255, 255, 255, 255, 255, 255};
_parseMacAddressString(value, buffer);
return _checkMacAddres(buffer);
}
String _macAddresToString(byte array[])
{
String result = "";
String temp ="";
for (byte i = 0; i < 6; i++)
{
temp=String(array[i],HEX);
if (temp.length() < 2)
{
temp = String("0") + temp;
}
result = result + temp;
if (i < 5)
{
result = result + String(":");
}
}
result.toUpperCase();
return result;
}*/
Ок
Попробуйте в штатных настройках имя и пароль сети поставить как 4ую сеть, в блоке у меня 3 сети.