ESP32-Web-Server编程-简单的照片浏览器

ESP32-Web-Server编程-简单的照片浏览器

概述

从本节开始我们开始制作一些有趣的多媒体 Web 的示例。

当你希望在网页上展示一些广告、照片,或者你的开发板带摄像头,能够采集一些图片,这时你希望可以通过手头的浏览器查看图片,或者播放广告。可以使用 ESP32 来建立 Web 服务器,让浏览器加载对应的照片即可。

需求及功能解析

本节演示如何在 ESP32 上部署一个最简单的 Web 服务器,来存储图片,并在浏览器访问这些图片时,自动刷新下一张。

示例解析

目录结构

├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c                 User application
└── README.md                  This is the file you are currently reading
  • 目录结构主要包含主目录 main。

前端代码

该示例非常简单,不需要前端文件。

后端代码

后端代码建立了一个 URL 为 /pic 的 pic_get_handler(),当用户访问该 URL 时,将执行该 handler 函数:

 httpd_uri_t pic_uri = {.uri = "/pic",.method = HTTP_GET,.handler = pic_get_handler,.user_ctx = NULL};

pic_get_handler()中,存储了两张图片:

extern const unsigned char pic1_jpg_start[] asm("_binary_pic1_jpg_start");
extern const unsigned char pic1_jpg_end[]   asm("_binary_pic1_jpg_end");
extern const unsigned char pic2_jpg_start[] asm("_binary_pic2_jpg_start");
extern const unsigned char pic2_jpg_end[]   asm("_binary_pic2_jpg_end");#if CONFIG_IMAGE_JPEG_FORMAThttpd_resp_set_type(req, "image/jpg");httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.jpg");
#elif CONFIG_IMAGE_BMP_FORMAThttpd_resp_set_type(req, "image/bmp");httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.bmp");
#endifhttpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");switch (pic_index) {case 0:image_data_buf_len = (pic1_jpg_end - pic1_jpg_start);image_data_buf = pic1_jpg_start;pic_index = 1;break;case 1:image_data_buf_len = (pic2_jpg_end - pic2_jpg_start);image_data_buf = pic2_jpg_start;pic_index = 0;break;default:break;}

每次刷新网页都会重新进入该函数,进而更新 pic_index,显示不同的图片。

示例效果

在这里插入图片描述

点击浏览器的刷新按钮,或者按下快捷键 F5,将刷新网页,显示下一张图片:

在这里插入图片描述

讨论

1)当你需要的功能很简单时,这种无前端文件的 Web 服务器很有用,它可以提供包括图片、文本、音乐、视频的简单访问,我们将在后面逐渐了解它们。

2)如果你需要保存对应的文件,可以使用浏览器的下载功能下载这些文件,如果是命令行系统,也可以使用 wget 命令下载对应的文件。你可以参考:1秒钟使用 python 建立文件服务器

总结

1)本节主要是介绍 通过 ESP32 Web Server 实现在网页端预览图片。我们将在下一节讲述如何通过这种无前端的简单 Web Server,实现文本的下载。

资源链接

1)ESP32-Web-Server ESP-IDF系列博客介绍
2)对应示例的 code 链接 (点击直达代码仓库)

3)下一篇:

(码字不易感谢点赞或收藏)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二证券:国际金价创新高 国内锂电企业有望加速出海

12月首个交易日,两市股指盘中弱势下探,午后止跌回升,沪指、创业板指翻红,北证50指数再度跳水。到收盘,沪指微涨0.07%报3031.64点,深成指跌0.07%报9720.57点,创业板指涨0.19%报1926.28点&#xf…

如何打印社保参保凭证

西安市: 陕西政务服务网: 个人服务 珠海市: 广东政务服务网: 用户登录 | 珠海市人力资源和社会保障网上服务平台 武汉市: 湖北政务服务网: 湖北政务服务网

vue: 线上项目element-ui的icon偶尔乱码问题

线上环境偶尔会复现, 具体: 一般使用不会出现这个问题,因为一般引入的是element-ui的css文件,问题出在于为了主题色变化啊,需要用到scss变量引入了scss文件。 import “~element-ui/packages/theme-chalk/src/index”…

python代码,要求选中XML中 <string> 标签中的文本并且将其首字母改为大写

当你说 "选中XML中 <string> 标签中的文本并且将其首字母改为大写" 时&#xff0c;我理解你是希望从一个XML文件中提取 <string> 标签中的文本&#xff0c;然后将每个字符串的首字母改为大写。 下面是一个简单的Python代码示例&#xff0c;使用xml.etre…

Python练习题(四)

本文主要是【Python】——Python练习题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#xff1a;狠狠沉淀&a…

Dockerfile build速度巨慢优化

通过Dockerfile创建容器的时候&#xff0c;有时候会遇到编译巨慢的情况&#xff0c;而docker run的方式却不会 跟踪定位下问题&#xff0c;注意到编译的时候日志打印 Sending build context to Docker daemon 7.188GB 为啥会这么大的文件&#xff0c;查了一下发现是log日志的…

调和阶段setState干了什么?

在React中&#xff0c;setState 是用来更新组件的状态的方法之一。 在React的生命周期中&#xff0c;setState 调用的时机对于组件的更新非常重要。通常&#xff0c;setState 调用会在组件的更新阶段之后触发&#xff0c;而不会立即生效。React会将多个 setState 调用合并成一…

图像语义分割算法(FCN/U-net)

Some definitions &#xfeff; 与目标检测不同&#xff0c;语义分割任务不但要对图片中的物体的位置和类别进行预测&#xff0c;还要精确地描绘出不同类物体之间的边界&#xff08;注意是不同类物体&#xff0c;而不是不同物体。若对同一类的不同物体也进行区分&#xff0c;则…

iptables防火墙之SNAT与DNET

NAT 1.SNAT&#xff1a;让内网可以访问外网 2.DNAT&#xff1a;让外网可以访问到内网的机器 网关服务器&#xff0c;要开启路由功能 内核功能&#xff1a; sysctl -a 列出所有参数 内核参数&#xff0c;然后grep可以查看到默认的内核参数 内核参数配置文件 /etc/sysctl.…

【ArcGIS Pro微课1000例】0046:深度学习--汽车检测

本实验讲述ArcGIS Pro中人工智能深度学习应用之–汽车检测。 文章目录 一、学习效果二、工具介绍三、案例实现四、注意事项一、学习效果 采用深度学习工具,可以很快速精准的识别汽车。 案例一: 案例二: 下面讲解GIS软件实现流程。 二、工具介绍 该案例演示的是ArcGIS Pro中…

L1-018:大笨钟

题目描述 微博上有个自称“大笨钟V”的家伙&#xff0c;每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律&#xff0c;所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的&#xff0c;如果正好在某个整点敲&#xff0c;那么“当”数就等于那个整点数…

Java笔记

md5加密 spring框架我我们提供了一个工具类DigestUtils 调用类中的md5digestAsHes对密码进行加密 但是要将密码转成bytes数组 password DigestUtils.md5DigestAsHex(password.getBytes()); 对象的属性拷贝 BeanUtils.copyProperties(有数据的对象&#xff0c;空对象)&#…

python毕业设计论文选题管理系统b615y

毕业论文管理方式效率低下&#xff0c;为了提高效率&#xff0c;特开发了本毕业论文管理系统。本毕业论文管理系统主要实现的功能模块包括学生模块、导师模块和管理员模块三大部分&#xff0c;具体功能分析如下&#xff1a; &#xff08;1&#xff09;导师功能模块&#xff1a;…

微信小程序自定义数据实现级联省市区组件

前言 在微信小程序中&#xff0c;官方文档提供的省市区组件&#xff0c;可以让用户更加方便快捷地选择省市区&#xff0c;但是官方提供的组件有一个缺点&#xff0c;无法自定义数据&#xff0c;但如果项目中需要使用自己的数据&#xff0c;显然就得寻找其它的组件实现。 官方组…

使用Linux docker方式快速安装Plik并结合内网穿透实现公网访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

数据库设计之三范式

第一范式&#xff08;1NF&#xff09; 列具有原子性&#xff0c;设计列要做到列不再拆分。 idcontry1中国上海2美国纽约 以上的表设计就不满足第一范式&#xff0c;因为contry对应的值可以拆分 so&#xff0c;满足第一范式的设计如下&#xff1a; idcontrycity1中国上海2美…

Leetcode 2949. Count Beautiful Substrings II

Leetcode 2949. Count Beautiful Substrings II 1. 解题思路2. 代码实现 Leetcode 2949. Count Beautiful Substrings II 1. 解题思路 这一题真的很丢脸&#xff0c;居然没有搞定&#xff0c;是看了大佬们的思路之后才想明白的&#xff0c;就感觉丢脸丢大了…… 这道题讲道…

《视觉SLAM十四讲 从理论到实践(第2版)》

书中代码&#xff1a;GitHub - gaoxiang12/slambook2: edition 2 of the slambook 书籍PDF&#xff1a;关注【Learn from Zero】回复【SLAM142】即可领取

如何去掉Win10电脑右下角弹出来的广告?

如何去掉Win10电脑右下角弹出来的广告&#xff1f;在Win10电脑中&#xff0c;用户看到桌面右下角老是弹出来广告&#xff0c;特别影响用户自己的操作体验感。接下来小编给大家分享不同的关闭方法&#xff0c;操作后大家可以看到Win10电脑右下角不再出现广告。 具体去掉方法如下…

【蓝桥杯】二分查找

二分查找 题目描述 输入 n n n 个不超过 1 0 9 10^9 109 的单调不减的&#xff08;就是后面的数字不小于前面的数字&#xff09;非负整数 a 1 , a 2 , … , a n a_1,a_2,\dots,a_{n} a1​,a2​,…,an​&#xff0c;然后进行 m m m 次询问。对于每次询问&#xff0c;给出一…