【转载】ESP8266 基ESP8266_RTOS_SDK (ESP-IDF )中嵌入网页文件

在开发ESP8266web服务时,可以通过ESP-IDF的COMPONENT_EMBED_FILES和COMPONENT_EMBED_TXTFILES变量将HTML和CSS文件直接嵌入到固件中,无需转换为C源文件。文件内容会存储在.rodata段,并可通过特定符号访问作为数组使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

在写ESP8266 web服务的时候,免不了要将自己设计的网页html和css等文件放入到固件中。在arduino中有fs可以进行上传文件,然后通过文件系统读出。那在ESP-IDF中该怎么办呢。有几个思路

  1. 通过flash_download_tools 直接向固定地址写入文件。然后在代码中读出来
    2.通过串口或者tcp等通信方式传给8266然后再写到flash 中。
    3.直接转成C字符串嵌入到代码中

上述是我之前想到的,比较麻烦,看到了官方文档提供了一种更简单的方法。

链接:https://docs.espressif.com/projects/esp-idf/zh_CN/v4.1-beta1/api-guides/build-system-legacy.html

这里我就直接贴官方说明了,稍微改了下例子,方便举一反三:

有时您的组件希望使用一个二进制文件或者文本文件,但是您又不希望将它重新格式化为 C 源文件。

这时,您可以在 component.mk 文件中设置变量 COMPONENT_EMBED_FILES,以这种方式指定要嵌入的文件的名称:

COMPONENT_EMBED_FILES := server_root_cert.der

或者,如果文件是字符串,则可以使用变量 COMPONENT_EMBED_TXTFILES,这将把文本文件的内容当成以 null 结尾的字符串嵌入:

COMPONENT_EMBED_TXTFILES := web_page/index.css
COMPONENT_EMBED_TXTFILES += web_page/index.html

在这里插入图片描述
文件的内容会被编译进 flash 中的 .rodata 段,并通过符号名称来访问,如下所示:

extern const uint8_t web_file_index_html_start[] asm("_binary_index_html_start");
extern const uint8_t web_file_index_html_end[] asm("_binary_index_html_end");

符号名称是根据文件的全名生成的,如 COMPONENT_EMBED_FILES 中的所示,字符 / , . , 等都将会被下划线替代。符号名称中的 _binary 前缀由 objcopy 添加,对于文本和二进制文件都是相同的。

这样一看就能直接当数组引用了。

extern const uint8_t web_file_index_html_start[] asm("_binary_index_html_start");
extern const uint8_t web_file_index_html_end[] asm("_binary_index_html_end")
char *str =web_file_index_html_start;
unsigned int str_len =web_file_index_html_end-web_file_index_html_start; httpd_resp_send(req, str,str_len );

ESP32也一样~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值