• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Использование PROGMEM в фийле index.h

malone2033

New member
Делал сервер для управления пинами esp в виде флажков, необходимо чтобы при включенном пине флажок был отмечен для этого в файле index.h пришлось разделить MAIN_page на два куска, но микроконтроллер краситься при запросе этой страницы.

Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
//#include <avr\pgmspace.h>
#include "index.h"
//#include <ESP8266mDNS.h
ESP8266WebServer server(80);

//const char MAIN_page0[] PROGMEM={"<HTML>\n<head>\n<meta charset=\"utf-8\">\n<title>Управлялка</title>\n</head>\n<body>\n<form action=\"/\" method=\"post\" name=\"form\">"};
//const char MAIN_page1[] PROGMEM={"<input type=\"submit\" name=\"send\" value=\"Отправить\">\n</form>\n</body>\n</HTML>"};

int sig0;
int sig1;
int sig2;
String sos0;
String sos1;
String sos2;

void handleHome(){
  String Var0 = server.arg("var0");
String Var1 = server.arg("var1");
String Var2 = server.arg("var2");
sig0 = atoi(Var0.c_str());
sig1 = atoi(Var1.c_str());
sig2 = atoi(Var2.c_str());
if(sig0 != 1)sig0 = 0;
if(sig1 != 1)sig1 = 0;
if(sig2 != 1)sig2 = 0;
if(sig0 == 1)sos0 = "checked";
else sos0 = "";
if(sig1 == 1)sos1 = "checked";
else sos1 = "";
if(sig2 == 1)sos2 = "checked";
else sos2 = "";
Serial.print("var0:");
Serial.println(sig0);
digitalWrite(12,sig0);
Serial.print("var1:");
Serial.println(sig1);
digitalWrite(14,sig0);

Serial.print("var2:");
Serial.println(sig2);
digitalWrite(16,sig0);

  String s = MAIN_page0;
  s += "Транзистор 4А:<input name=\"var0\" type=\"checkbox\" value=\"1\" ";
  s += sos0;
  s += "><br>";
  s += "Транзистор 7А:<input name=\"var1\" type=\"checkbox\" value=\"1\" ";
  s += sos1;
  s += "><br>";
  s += "Транзистор 15А:<input name=\"var2\" type=\"checkbox\" value=\"1\" ";
  s += sos2;
  s += "><br>";
  //s += "<input type=\"submit\" name=\"send\" value=\"Сохранить\">\n</form>\n</body>\n</HTML>";
  s += MAIN_page1;
 
  server.send(200, "text/html", s);
}

void handleTEST(){
String Var0 = server.arg("var0");
String Var1 = server.arg("var1");
String Var2 = server.arg("var2");
sig0 = atoi(Var0.c_str());
sig1 = atoi(Var1.c_str());
sig2 = atoi(Var2.c_str());
if(sig0 != 1)sig0 = 0;
if(sig1 != 1)sig1 = 0;
if(sig2 != 1)sig2 = 0;
if(sig0 == 1)sos0 = "checked";
else sos0 = " ";
if(sig1 == 1)sos1 = "checked";
else sos1 = " ";
if(sig2 == 1)sos2 = "checked";
else sos2 = " ";
Serial.print("var0:");
Serial.println(sig0);
Serial.print("var1:");
Serial.println(sig1);

Serial.print("var2:");
Serial.println(sig2);
  String mess;
  mess+=server.args();
  mess+="\n";
  for(uint8_t i = 0; i<server.args();i++){
    mess+=""+server.argName(i)+":"+server.arg(i)+"\n";
  }
  Serial.println(mess);
  Serial.println(server.argName(0));
  Serial.println(server.arg(0));
  server.send(200,"text/plain",mess);
}
void setup()
{
  Serial.begin(115200);
  Serial.println();
  pinMode(12,OUTPUT);
  pinMode(14,OUTPUT);
  pinMode(16,OUTPUT);
  WiFi.mode(WIFI_STA);
  WiFi.begin("TP-LINK_5A3946", "91495341");
  Serial.print("Connecting");  //  "Подключение"
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected, IP address: ");
           //  "Подключились, IP-адрес: "
  Serial.println(WiFi.localIP());
  server.on("/test",handleTEST);
  server.on("/",handleHome);
  server.begin();
  Serial.println("server started");
}
void loop() {
 
  server.handleClient();
  }
index.h
HTML:
const char MAIN_page0[] PROGMEM = R"=====(
<HTML>
<head>
<meta charset="utf-8">
<title>Управлялка</title>
</head>
<body>
<form action="/" method="post" name="form">)=====";

const char MAIN_page1[] PROGMEM = R"======(
  <input type="submit" name="send" value="Сохранить">
</form>
</body>
</HTML>
)======";
 
Сверху Снизу