我正在使用esp-idf示例中包含的一个Web服务器示例来处理嵌入式ESP32设计。我能够将设备置于软AP模式并显示简单的网页。现在我已经开始工作,我正在尝试使用图形构建一个页面。
我正在使用Linux hex工具" xxd -i"将HTML文件转换为C包含文件的十六进制转储数组。如果文档只是HTML,它可以正常工作,但我仍然试图用图像来做这件事。
我甚至在HTML文件和图像文件上使用xxd并使用" netconn_write"写出两个文件。我也尝试将它们组合成一个十六进制转储文件。在这一点上,我不确定如何继续,非常感谢任何帮助。
答案 0 :(得分:2)
您可以使用this utility在可执行文件中嵌入任意数量的二进制文件。别忘了设置正确的哑剧类型。此外,如果文件很大,您必须对发送进行速率限制,这可能会成为一项非常重要的任务。
因此,我建议使用文件系统和嵌入式Web服务器来完成这项工作。看看https://github.com/cesanta/mongoose-os/tree/master/fw/examples/mjs_hello(免责声明:我是开发人员之一)。它需要几分钟时间才能获得具有工作HTTP服务器的固件,为您准备原型。
答案 1 :(得分:0)
您可以直接在CMakeLists.txt
中使用伪指令EMBED_FILES。例如,要将文件favicon.jpg
的图像添加到我的CMakeLists.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等(当然,要考虑设备内存)。