ESP8266 基ESP8266_RTOS_SDK (ESP-IDF )中嵌入网页文件

场景:

在写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也一样~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

原文地址:https://www.cnblogs.com/skyraker/p/12617083.html

时间: 2024-10-06 00:16:19

ESP8266 基ESP8266_RTOS_SDK (ESP-IDF )中嵌入网页文件的相关文章

js在页面中嵌入pdf文件

由于项目需求,需要在jsp页面中嵌入PDF文件,在网上搜了很多方法,大部分是用<object>标签钱嵌入,发现并不好用. 这里介绍一个很好用的插件,PDFObject  https://pdfobject.com/ 由于用的是框架,所以我直接把pdfobjects.js的代码复制到了项目中,按照上面说的方法成功插入了pdf.

#网页中嵌入PDF文件#

关于在网页中嵌入PDF在ICPF平台项目开发中遇到的问题: 问题1:如何网页中嵌入PDF: 常用到的方法有以下几种: 代码片段1: 1 <object type="application/pdf" data="file:///D:/atm/prtPDF/2016-07-28622262104000373211200009087.pdf" id="review" style="width:800px; height:750px; m

Unity中嵌入网页插件Embedded Browser2.1.0

背景 最近刚换了工作,新公司不是做手游的,一开始有点抵触,总觉得不是做游戏自己就是跨行了,认为自己不对口,但是慢慢发现在这可以学的东西面很广,所以感觉又到了打怪升级的时候了,老子就在这进阶了. 一进公司他们使用H5开发,做一款地形信息系统的软件,基于Unity开发,但是所有页面都是Js写的,所以我第一件事要做的是实现Unity嵌入网页,并实现交互. 在这里,领导说之前做过类似的即用的Embedded Browser2.1.0这个插件,让我研究下做个简单Demo. 实现方案 使用插件Embedde

网页中嵌入swf文件的几种方法

1. object + embed       传统的方法 优点:浏览器兼容性好,是 Macromedia 一直以来的官方方法缺点:a.embed 标签是不符合 W3C 的规范的,无法通过验证.当然,如果你不在乎什么规范不规范,另当别论.b.微软由于种种原因,在 sp2 后限制了 IE 的 ActiveX 的使用模式,就是在页面中的 ActiveX 有一个虚框,需要用户点击一次才能正常交互.Flash是作为一个 ActiveX 嵌入到网页中的,所以它也会受牵连,只有通过 JS 嵌入 Flash

技术分享:如何在PowerShell脚本中嵌入EXE文件

我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点,包括: 1.无需在目标上安装其他任何东西. 2.强大的引擎(例如可以直接调用 .NET 代码). 3.可以使用 base64 编码命令来混淆恶意命令,使恶意命令变的不容易被发现.这同样也是一种可以避免使用特殊字符的方法,尤其是在一个涉及多个步骤需要分离不同攻击负荷的高级攻击中. 4.可以使用Invoke-Expression将字符串解释为 Powershe

关于Centos6中httpd的DocumentRoot下子文件中的网页文件无法访问题

错误还原 首先 我在/etc/httpd/conf/http.conf配置如下Documentroot "/var/www/html"然后在/var/www/html中创建了一个aa文件和一个index.html文件,并在aa中又写了一个index.html文件.然后通过浏览器输入192.168.10.2/aa出现错误提示,去掉/aa却能够正常显示/var/www/html下的index.html内容. 解决方法 这是由于没有关闭selinux导致的,关闭方法写在这了(百度搜的) 1.

如何用web api在网页中嵌入二维码?

如何用web api在网页中嵌入二维码? 随着智能手机和平板电脑的日益普及,二维码逐渐成了链接智能终端和传统网站的桥梁.在下文中,笔者将介绍几个实时生成二维码的web api,希望能够简化web design过程中的二维码集成工作. 1. 范例一 <img src="http://qrickit.com/api/qr?d=http://www.taobao.com" > 上述代码产生如下的二维码图片: 该web api还支持下面的这些特性, 说明文字:例如addtext=H

博客代码:iframe—网页中嵌入其他网页

iframe 是一个可以把另外一个网页嵌入到一个网页里的代码,非常有用.对于一个内容不错的网页,要方便地把它搬到自己的博客里,用这个代码最合适.而对于在新浪博客里不支持的一些网页效果和代码,可先把他们设置好,在支持他们的网站上使用,或上传到一个免费的网络空间或网络硬盘里,获取相应的网页地址,然后用 iframe嵌入到新浪博客里,非常好用! 一.固定位置的iframe代码: <DIV align=center><IFRAME src="http://weather.265.com

使用JWPlayer在网页中嵌入视频

首发:个人博客,持续更新和纠错 我一直以为在网页中嵌入视频是件复杂的事,一研究才知道原来非常简单. 实际就是在页面中嵌入个控件.社区里已有很多解决方案了.jwplayer是最受欢迎的(之一).控件包括js.css和swf文件,swf文件就是播放器,它是控件的一部分,引入控件包跟引入其他的前端控件包方法一样,拷贝到项目路径下即可.视频是个flv文件,flv文件就放哪里都行了.个人建议像图片一样放个单独的服务器. 示例程序在这里,代码已经传到了github上.jwplayer本身的文档在这里,藏得非