Serving HTML as C array from Arduino code - String size limit problem

I've been working on a HTML / websocket server on a Wiznet W5100S-EVB-Pico, programmed in the Arduino IDE. It all worked fine up until now but I'm running into, I think, a string size limit. I guess it is in the way the code handles the const char but I don't know how to do it properly.

I hope someone is willing to help :)

Let me explain:

  • I convert the index.html to a index_html.h file containing a const char array:
const char c_index_html[] = {
0x3c,0x21,0x44,0x4f,0x43,..., ..., 0x6d,0x6c,0x3e};
  • In my code I include the index_html.h file:
#include "index_html.h"

Now the code that actually serves the "HTML"

if (web_client){
    
    Serial.println("New client");
    // an http request ends with a blank line
    bool currentLineIsBlank = true;

    while (web_client.connected()){
      
      if (web_client.available()){
        
        char c = web_client.read();
        
        if (c == '\n' && currentLineIsBlank)                // if you've gotten to the end of the line (received a newline
        {                                                   // character) and the line is blank, the http request has ended,
          Serial.println(F("Sending response"));            // so you can send a reply

          String strData;
          strData = c_index_html;
          web_client.println(strData);
          break;
        }

        if (c == '\n')
        {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r')
        {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }

This is not the prettiest code, it's smashed together from examples and now the main culprit seems to be:

String strData;
strData = c_index_html;
web_client.println(strData);

When I add extra code to the HTML and view the page source, the code is incomplete. I tested reducing the HTML to a minimum and that solves the problem.

So my main question is:

  • How do I serve the 'const char c_index_html' without use of 'String'?

But also:

  • How could I prettify the whole 'if (web_client)' serving function?

Thank you very much for making it all the way through this post and if you have a suggestion I would very much appreciate it ;)



Comments

Popular posts from this blog

Spring Elasticsearch Operations

Network Error and Timeout on Authorize.net JS

Object oriented programming concepts (OOPs)