esp32 静态资源处理

对于esp32的开发,如果有http web server 用到静态资源,我们一般是集成到代码里边的,有不少方法,但是更加推荐是将静态资源转为c

代码(当然和大小有关系,如果资源比较大,可以结合外部引用的模式),以下简单说明下代码嵌入模式的简单操作

一个示例

比如有一个操作摄像头的,我们需要html 嵌入到代码中,可以通过以下操作

  • gz

gz 可以减少大小

gzip -k CameraWeb.html
  • 通过xdd 工具生产c 格式的代码

c 代码就可以直接集成到系统中了

xxd -i CameraWeb.html.gz > CameraWeb.h
  • 效果

 

  • 代码使用

就是添加头文件,使用数据了, 如下http server 然后gzip 格式格式的数据

static esp_err_t index_handler(httpd_req_t *req)
{
    httpd_resp_set_type(req, "text/html");
    httpd_resp_set_hdr(req, "Content-Encoding", "gzip");
    sensor_t *s = esp_camera_sensor_get();
    if (s != NULL) {
        if (s->id.PID == OV3660_PID) {
            return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len);
        } else if (s->id.PID == OV5640_PID) {
            return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len);
        } else {
            return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len);
        }
    } else {
        log_e("Camera sensor not found");
        return httpd_resp_send_500(req);
    }
}

说明

实际上在esp32 项目中不少都会用到此方法,tinyml 也是经常会用到此方法的,对于资源,并不大的场景是不错的选择

参考资料

https://linux.die.net/man/1/xxd

posted on 2025-05-28 08:00  荣锋亮  阅读(49)  评论(0)    收藏  举报

导航