Arduino, esp8266 и обслуживающие веб-страницы - PullRequest
0 голосов
/ 11 марта 2020

Я работаю над руководством по использованию esp8266, подключенного к Arduino Uno, для обслуживания веб-страницы с Ajax, которая возвращает файл json (также обслуживаемый Arduino). Учебное пособие (здесь не будет ссылки на него) выглядит как художественное произведение, потому что автор строит веб-страницу, используя такие строки: слишком долго для строки или uno не хватает памяти. Я пытался использовать строки типа c (считая, что они более эффективны), например:

    char webpage[1024] = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, minimumscale=1.0, maximum-scale=1.0, initial-scale=1\" />";
    strcat(webpage, "<style>body { background-color: #cccccc; text-align: center; max-width: 400px; margin: 10px auto; } #datavalues { max-width: 400px; display: block; margin-top: 30px; }</style>");

, но это, похоже, не имеет большого значения. Есть ли способ обслуживать веб-страницу такого размера от Arduino? / каков наиболее эффективный способ его построения и обслуживания?

1 Ответ

2 голосов
/ 11 марта 2020

В зависимости от свободной памяти на Arduino (UNO) вы можете переместить HTML в progmem
Пример кода

//HTML Code Start-----------------------------------
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!doctype html>
<html>
.... your page code here
        <script>
   ...even with javascript
       </script>
     </body>
 </html>
 )rawliteral";
//HTML Code END-----------------------------------

Затем вы будете использовать его в своем ответе (с такой либой как простой веб-сервер или аналогичный для Uno) как

 server.on("/index.html", HTTP_GET, []() {
    server.send(200, "text/html", (const char *)INDEX_HTML);
});

Для простой отправки по Wi-Fi вы должны сделать

  client.print(...);

Начните с минимальной страницы (следите за своей памятью после компиляции) - Следующий шаг должен состоять в том, чтобы разместить веб-функцию в esp (SPIFFS / LittleFS) и соединиться через последовательный порт с Arduino и обмениваться данными с / на контакты.
В заключение: никогда не используйте класс Arduino String и задачи связи - фрагментирует кучу и крад sh Arduino / ESP. Вместо этого работайте с предопределенными массивами символов и указателями.

...