Как интегрировать глобальные переменные типа int/string в мой веб-сайт ESP8266?

Я использую свой NODEMCU ESP8266 для управления светодиодной лентой за диваном. У меня есть веб-сервер, который публикует HTML с server.send() в каждом цикле. Теперь я хочу, чтобы веб-сайт показывал текущее состояние светодиодной ленты, но я не могу просто интегрировать переменные в HTML-код веб-сайта, потому что сервер, очевидно, будет обрабатывать его как HTML, а не читать переменные.

//a variable I use for the LEDs
int colorCode;

// thats in the handler function
String s = MAIN_page; //Read HTML contents
server.send(200, "text/html", s); //Send web page

// thats the website
const char MAIN_page[] PROGMEM = R"=====(
  <!DOCTYPE HTML>
  <html lang="de">
     ...website...
  </html>
)=====";

Мне просто нужна небольшая подсказка, как я могу интегрировать такие переменные, как int colorCode, в HTML, прежде чем он будет отправлен на сервер с server.send().


person Raphael Nollau    schedule 06.06.2019    source источник
comment
Ну, colorCode не инициализирован, поэтому его нужно инициализировать чем-то, если вы не хотите просто случайный мусор. Но вы хотели бы перевести значение переменной в строку, а затем выполнить конкатенацию строк. Для этого потребуется, чтобы строка, которую вы сейчас отправляете, была не const tho.   -  person bigwillydos    schedule 07.06.2019
comment
@bigwillydos спасибо :) посмотрю. И я инициализирую это в коде, просто не размещал все это здесь :)   -  person Raphael Nollau    schedule 07.06.2019


Ответы (1)


То же самое было сделано, например, аппаратным проектом OpenEVSE, который «>строит свои ответы JSON в строки Arduino (String JSON):

  json += "{";
  json += "\"rssi\":"+String(WiFi.RSSI(i));
  json += ",\"hidden\":"+String(WiFi.isHidden(i)?"true":"false");
  json += "}";

Вы можете сделать то же самое, пока send() получает строку правильного типа. Это потребует отбрасывания PROGMEM, возможно, const и, вероятно, использования высокоуровневого строкового класса для удобства. Обратите внимание, что существует несколько причин, по которым OpenEVSE предпочитает сохранять Статический HTML:

  1. AJAX позволяет их приложению быть более отзывчивым, чем то, которое нужно перезагружать каждую страницу, и
  2. ограниченная память ESP8266 идет гораздо дальше, когда ему не нужно создавать целую веб-страницу.

С практической точки зрения: память программы может хранить большие строки, но они не будут динамическими. Если строка неизвестна во время компиляции, то ее придется собирать во время выполнения, а для ее отслеживания будет использоваться оперативная память. Построение веб-страницы в виде строки имеет смысл, если страница небольшая и переменных мало.

person MBer    schedule 08.06.2019