0

我正在使用 esp-idf 示例中包含的 Web 服务器示例之一进行嵌入式 ESP32 设计。我能够让设备进入软 AP 模式并显示一个简单的网页。现在我已经开始工作了,我正在尝试构建一个带有图形的页面。

我正在使用 Linux 十六进制工具“xxd -i”将 HTML 文件转换为 C 包含文件的十六进制转储数组。如果文档只是 HTML,它可以正常工作,但我坚持尝试使用图像执行此操作。

我在 HTML 文件和图像文件上都使用了 xxd,并使用“netconn_write”来写出这两个文件。我还尝试将它们组合成一个十六进制转储文件。在这一点上,我不确定如何继续,非常感谢任何帮助。

4

2 回答 2

2

您可以使用此实用程序在可执行文件中嵌入任意数量的二进制文件。不要忘记设置正确的 mime 类型。此外,如果文件很大,您必须对发送进行速率限制,这可能会成为一项不平凡的任务。

因此,我建议使用文件系统和嵌入式 Web 服务器来完成这项工作。看看https://github.com/cesanta/mongoose-os/tree/master/fw/examples/mjs_hello(免责声明:我是开发人员之一)。您只需几分钟即可获得带有工作 HTTP 服务器的固件,为您的原型做好准备。

于 2017-01-30T09:58:59.393 回答
0

您可以直接在CMakeLists.txt. 例如,要添加文件favicon.jpg图像,在 myCMakeLists.txt的同一目录中main.c

idf_component_register(SRCS "main.c"
  INCLUDE_DIRS "."
  EMBED_FILES "favicon.jpg")

在 main.c 的某个地方:

/* The favicon */
static esp_err_t favicon_handler(httpd_req_t *req)
{
    extern const char favicon_start[] asm("_binary_favicon_jpg_start");
    extern const char favicon_end[] asm("_binary_favicon_jpg_end");
    size_t favicon_len = favicon_end - favicon_start;

    httpd_resp_set_type(req, "image/jpeg");
    httpd_resp_send(req, favicon_start, favicon_len);

    return ESP_OK;
}

static const httpd_uri_t favicon_uri = {
                                         .uri       = "/favicon.ico",
                                         .method    = HTTP_GET,
                                         .handler   = favicon_handler,
                                         .user_ctx  = NULL
};

您可以通过这种方式添加所需的任意数量的文件,文本、html、json 等...(当然要考虑设备内存)。

于 2020-08-17T19:33:48.957 回答