The aim is to display a non-static html page depending on some variable condition.
The code I created hast the problem, that the esp8266 is ressetting in the moment I request the page.
const char htmlIndexHeader[] PROGMEM = R"=====(
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test</title>
</head>
<body>
<p>Hello World</p>
<ol>
)=====";
const char htmlIndexProgress1[] PROGMEM = R"=====(
<li>lorem</li>
)=====";
const char htmlIndexProgress2[] PROGMEM = R"=====(
<li>ipsum</li>
)=====";
const char htmlIndexFooter[] PROGMEM = R"=====(
</ol>
</body>
</html>
)=====";
char htmlIndexAll[2000];
void handleRoot()
{
Serial.println("GET /");
strcpy(htmlIndexAll, htmlIndexHeader);
if(var1==true)
{
strcat(htmlIndexAll, htmlIndexProgress1);
}
if(var2==true)
{
strcat(htmlIndexAll, htmlIndexProgress2);
}
strcat(htmlIndexAll, htmlIndexFooter);
server.send(200, "text/html", htmlIndexAll);
}
If I display a static page the esp8266 does not restart at page request.
-
2try strcpy_P and strcat_PJuraj– Juraj ♦2019年12月14日 14:15:01 +00:00Commented Dec 14, 2019 at 14:15
-
1@Juraj it is working!kimliv– kimliv2019年12月14日 18:27:27 +00:00Commented Dec 14, 2019 at 18:27
1 Answer 1
Compiler can't differentiate the PROGMEM strings from constant strings in SRAM strings. Both are const char*
. But the PROGMEM string must be handled differently. For that reason _P variants of functions exists.
You should use stcpy_P and strcat_P functions.
Note: On esp8266 some functions of Arduino core use a trick to identify PROGMEM strings by their specific address range.
Explore related questions
See similar questions with these tags.