7

I am currently using a Nodemcu ESP8266-12E with the Arduino IDE in order to control my boiler. Everything is working fine, however I haven't figured out yet how to serve binary files, eg. images. (I am hosting them on a server at the moment).

ESP8266WebServer server(80); void setup() { [...] server.on("/", handleResponse); server.onNotFound(handleResponse); server.begin(); } void handleResponse() { if (server.uri() == "/style.css") { server.send(200, "text/css", "[css]"); return; } if (server.uri() == "/favicon.ico") { server.send(404, "text/html", "Not set"); return; } [...] } unsigned char favicon_ico[] = { 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x68, 0x03, 0x00,......... 0x00 }; unsigned int favicon_ico_len = 894; 

Converting the arary to a string and serving it with server.send does not work and server.stream expects a file.

1 Answer 1

7

It looks like you can use the send_P function to send raw PROGMEM data:

void send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength);

I.e., (from what I can gather):

PGM_P favicon = { 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x68, 0x03, 0x00,......... 0x00 }; server.send_P(200, "image/x-icon", favicon, sizeof(favicon)); 

Incidentally, PGM_P is just a typedef for const char *.

1
  • Thank you very much, after changing unsigned char favicon_ico to const char favicon_ico it worked with server.send_P()! Setting it to PGM_P somehow threw an error. Commented Jul 13, 2016 at 12:38

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.