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

news/2025/3/14 18:12:06/

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.ppmy.cn/news/1255983.html

相关文章

福州大学《嵌入式系统综合设计》 实验八:FFMPEG视频编码

一、实验目的 掌握使用算能平台进行视频编码的流程,包括开发主机环境与云平台的配置,视频编码程序的编写与理解,代码的编译、运行以及学习使用码流分析工具分析视频压缩码流等。 二、实验内容 搭建实验开发环境,编译并运行编码…

gcc CFI控制流完整性保护

一、CFI简介 GCC的CFI(Control Flow Integrity,控制流完整性)机制是一种用于防止针对函数指针和虚函数表的攻击的保护机制。它通过在编译时对程序进行加固,限制了程序中可能的跳转目标,以提高程序运行时的安全性。下面…

Python标准库:datetime模块【侯小啾python领航班系列(二十五)】

Python标准库:datetime模块【侯小啾python领航班系列(二十五)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

计算机网络TCP篇③问答篇

目录 一、如何理解 TCP 是面向字节流协议 先来说说为什么 UDP 是面向报文的协议? 如果收到了两个 UDP 报文,操作系统是如何区分开的呢? 再说说为什么 TCP 是面向字节流的协议? 二、如何解决粘包问题? ①、固定消…

[Golang] 高频次和高并发下的随机数重复问题的解决方案

一、概要: 在Golang中,获取随机数的方法一般会介绍有两种,一种是基于math/rand的伪随机,一种是基于crypto/rand的真随机。其中,math/rand由于其伪随机的原理,经常会出现重复的随机数,导致在需要…

QNX usleep测试

QNX usleep测试 结论 usleep时间在QNX上没有ubuntu上运行准确&#xff0c;但是10ms以上误差不大。 测试代码 testsleep.cpp的代码如下&#xff1a; #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h>double usleep_…

tomcat PUT任意方法写文件

漏洞介绍 该漏洞是Apache Tomcat服务器中的PUT方法任意写文件漏洞,可以让攻击者上传Webshell并获取服务器权限。 该漏洞在2017年9月19日被Apache官方发布并修复CVE-2017-12615。在conf/web.xml文件中,readonly默认为true,当设置为false时,可以通过PUT / DELETE进行文件操作…

C#,数值计算——插值和外推,二维三次样条插值(Spline2D_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 二维三次样条插值 /// Object for two-dimensional cubic spline interpolation on a matrix.Construct /// with a vector of x1 values, a vector of x2 values, and a ma…