HTML-страница переменной ESP8266 Webserver ESP8266WebServer (не как один постоянный символ)
Цель состоит в том, чтобы отобразить нестатическую HTML-страницу в зависимости от некоторого переменного условия.
В коде, который я создал, есть проблема, заключающаяся в том, что esp8266 сбрасывает настройки в тот момент, когда я запрашиваю страницу.
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);
}
Если я показываю статическую страницу, esp8266 не перезапускается при запросе страницы.
@kimliv, 👍2
Обсуждение1 ответ
Лучший ответ:
▲ 2
Компилятор не может отличить строки PROGMEM от строк-констант в строках SRAM. Оба являются const char*
. Но строка PROGMEM должна обрабатываться по-другому. По этой причине существует _P вариантов функций.
Вы должны использовать функции stcpy_P и strcat_P.
Примечание: на esp8266 некоторые функции ядра Arduino используют трюк для идентификации строк PROGMEM по их конкретному диапазону адресов.
,
@Juraj
Смотрите также:
- ESP8266 Webserver ESP8266WebS сервер перемещает функцию обработчика в отдельный файл .h .c
- Wemos D1 mini зависает через несколько минут
- esp8266 WiFi не может подключиться к PHP- серверу
- Несколько клиентских серверов через Wi-Fi
- Esp8266 Vin контакт
- Как получить параметры запроса от ESPAsyncWebServer?
- контент» не захватывается
- Получение ошибки ets 8 января 2013,rst cause:4,boot mode(1,6) wdt reset
попробуйте strcpy_P и strcat_P, @Juraj
@Juraj это работает!, @kimliv