ESP实现Web服务器

典型的基于 ESP32 的静态网页与图片嵌入展示的 本地 Web Server(AP 模式)项目


项目功能概述

ESP32 创建一个 Wi-Fi 热点,启动一个 HTTP Web Server,当手机或电脑连接到此热点时,可以通过浏览器(192.168.4.1)访问静态网页(index.html)以及显示嵌入的图片(pic.png)。


代码逻辑结构分析

1. 嵌入资源声明

//html网页文件
extern const uint8_t _binary_index_html_start[];
extern const uint8_t _binary_index_html_end[];
//png图片文件
extern const uint8_t _binary_pic_png_start[];
extern const uint8_t _binary_pic_png_end[];
  • 使用 idf_component_register(... EMBED_FILES ...)index.htmlpic.png 文件嵌入到固件中。
  • 这几个符号由构建系统自动生成,用于访问文件在 Flash 中的位置。

2. HTTP 处理器函数

index_handler:返回网页

static esp_err_t index_handler(httpd_req_t *req)
{
httpd_resp_set_type(req, "text/html");
return httpd_resp_send(req, (const char *)_binary_index_html_start, _binary_index_html_end - _binary_index_html_start);
}

️ pic_handler:返回图片

static esp_err_t pic_handler(httpd_req_t *req)
{
httpd_resp_set_type(req, "image/png");
return httpd_resp_send(req, (const char *)_binary_pic_png_start, _binary_pic_png_end - _binary_pic_png_start);
}

3. 启动 Web 服务器

httpd_handle_t start_webserver(void)
{
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
httpd_handle_t server = NULL;
if (httpd_start(&server, &config) == ESP_OK) {
// 注册网页 URI
httpd_register_uri_handler(server, &index_uri);
// 注册图片 URI
httpd_register_uri_handler(server, &pic_uri);
}
return server;
}
  • /:返回 index.html
  • /pic.png:返回图片内容

4. 配置 Wi-Fi 为 AP 模式

void wifi_init_softap()
{
// 初始化网络接口
ESP_ERROR_CHECK(esp_netif_init());
// 创建默认的事件循环
ESP_ERROR_CHECK(esp_event_loop_create_default());
// 创建默认的WiFi AP网络接口
esp_netif_create_default_wifi_ap(); // 初始化WiFi配置
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
// 初始化WiFi
ESP_ERROR_CHECK(esp_wifi_init(&cfg)); // 设置WiFi配置
wifi_config_t wifi_config = {
.ap = {
.ssid = "ESP32_WEB", // 设置AP的SSID
.ssid_len = strlen("ESP32_WEB"), // 设置SSID的长度
.password = "12345678", // 设置AP的密码
.max_connection = 2, // 设置最大连接数
.authmode = WIFI_AUTH_WPA_WPA2_PSK // 设置认证模式
},
}; // 如果密码为空,则设置为开放模式
if (strlen((char *)wifi_config.ap.password) == 0)
wifi_config.ap.authmode = WIFI_AUTH_OPEN; // 设置WiFi模式为AP
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
// 设置WiFi配置
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
// 启动WiFi
ESP_ERROR_CHECK(esp_wifi_start()); // 打印AP已启动的信息
ESP_LOGI(TAG, "Wi-Fi AP started. SSID:%s password:%s", "ESP32_WEB", "12345678");
}
  • ESP32 开启 AP 模式,创建名为 ESP32_WEB 的热点,密码为 12345678
  • 支持最多 2 个客户端连接
  • 一旦连接上,就可以通过 IP 访问该 Web Server(默认 192.168.4.1)

5. 程序入口 app_main()

void app_main()
{
nvs_flash_init(); // 初始化 NVS
wifi_init_softap(); // 启动热点(设置为AP模式)
start_webserver(); // 启动 Web 服务
}

总结(功能模块)

模块 功能
wifi_init_softap 启动 Wi-Fi 热点(AP)
start_webserver 启动 HTTP Web 服务器
index_handler 处理 / 请求,返回网页
pic_handler 处理 /pic.png 请求,返回嵌入图片
EMBED_FILES 将静态资源嵌入到固件中

简单插入图片例程:

html文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>ESP32 Web Server</title>
</head>
<body style="background-color: #202020; color: #fff; text-align: center">
<h1>ESP32嵌入图片展示</h1>
<img
src="/pic.png"
alt="Embedded Image"
style="max-width: 90%; height: auto"
/>
</body>
</html>

现象:

插入高清图片,并添加文本标题,简单设计静态界面:

工程框架:

概括:

ESP32s3服务器,使用AP模式开启热点。

客户端(手机,电脑)连接热点,与ESP32s3形成局域网通信。

客户端通过http请求服务器,服务器响应,返回html和图片

项目的功能实现是依靠 ESP-IDF 提供的 HTTP Server 组件(esp_http_server)作为底层核心支持的。


HTTP Server 的核心作用

ESP-IDF 中的 esp_http_server 是一个轻量级、嵌入式的 HTTP 服务模块,它提供了一套完整的 HTTP 请求响应框架,就像一个 Web 后端框架一样,只是运行在 ESP32 芯片上。

它在项目中实现了的功能

功能 依赖 esp_http_server 实现 描述
启动 Web 服务器 httpd_start() 初始化一个监听端口(默认 80)的 Web Server
注册路由(URI) httpd_register_uri_handler() 绑定某个路径(如 //pic.png)到特定处理函数
处理 HTTP 请求 index_handler, pic_handler 根据请求的 URI 进行内容响应
设置响应类型 httpd_resp_set_type() 设置返回数据类型:text/html, image/png
返回数据内容 httpd_resp_send() 把嵌入的 HTML / PNG 数据返回给客户端
[浏览器发起请求]
|
v
[ESP32 HTTP Server] <--------- 启动于 SoftAP 模式下(默认 IP:192.168.4.1)
|
┌──────────────┬──────────────┐
│ │ │
v v v
/ /pic.png 其余
(index_handler) (pic_handler) 返回:
- text/html → index.html(嵌入)
- image/png → pic.png(嵌入)

源码分享:

jianzhiji/blog: 博客分享的代码

ESP实现Web服务器的更多相关文章

  1. 开源而又强大的迷你型web服务器推荐

    appweb显然是不二之选,看了下最新版,已经到了4了 下载下来,http://appwebserver.org/software/appweb-4.4.4-0-src.tgz,十几M,直接吓傻,离我 ...

  2. 嵌入式设备web服务器比较

    目录(?)[-] Boa Thttpd Mini_httpd Shttpd Lighttpd Goahead AppWeb Apache 开发语言和开发工具 结论 备注   现在在嵌入式设备中所使用的 ...

  3. 嵌入式设备web服务器

    操作系统:ubuntu10.04 前言:    为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器.    现在在嵌入式设备中所使用的web服 ...

  4. 闲来无聊,研究一下Web服务器 的源程序

    web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...

  5. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  6. Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web服务器

    最近在Ubuntu上搭建了Asp.Net的Web服务器,其中遇到很多问题,整理一下思路,以备后用. 搭建环境以及配套软件 Ubuntu: 11.10 Mono:3.0.6 下载地址(http://do ...

  7. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...

  8. 一不小心写了个WEB服务器

    开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...

  9. NodeJs+http+fs+request+cheerio 采集,保存数据,并在网页上展示(构建web服务器)

    目的: 数据采集 写入本地文件备份 构建web服务器 将文件读取到网页中进行展示 目录结构: package.json文件中的内容与上一篇一样:NodeJs+Request+Cheerio 采集数据 ...

  10. 前端学HTTP之WEB服务器

    前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...

随机推荐

  1. MySQL - [04] 分布式部署&主从复制&读写分离

    一.前言 Q1:为什么需要主从复制? 1.在业务复杂的系统中,有一条SQL语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务.使用主从复制,让主库负责写,从库负责读,这样即使主库出现了锁 ...

  2. vmware workstation 17 pro激活密钥

    vmware workstation 17 pro激活密钥,通用批量永久激活许可 17:JU090-6039P-08409-8J0QH-2YR7F 16:ZF3R0-FHED2-M80TY-8QYGC ...

  3. TIDB 数据库架构概述

    学习目标 题解数据库整体架构 了解 TiDB Server .TiKV.TiFlash.和 PD 的主要功能 文章末尾获取笔记.视频资料,持续更新 体系架构 水平扩容或者缩容 金融级高可用 实时 HT ...

  4. CentOS 8 上安装和配置 nginx

    1.检查yum上的nginx版本 yum info nginx 2.安装nginx yum install nginx 安装过程有时会询问是否安装,输入y回车即可 3.将服务设置为每次开机启动 sud ...

  5. Go1.24版本终于来了!各位开发者,准备好迎接这些激动人心的新功能了吗?让我们一起来探讨下Go1.24中有哪些精彩的亮点?

    前言 Gopher们,Go 1.24.0 正式发布了!与 Go 1.23.0 相比,这个版本带来了众多改进.让我们一同看看 Go 1.24.0 都有哪些新变化吧! 在 Windows 下,请在 htt ...

  6. 赶快检查,木马可能已经植入服务器,Redis未授权访问漏洞记录,redis的key值出现backup要谨慎

    问题描述:为图省事,很多时候我们在使用redis的时候会使用默认空密码,这就增加了安全隐患,如果有下属情况,那赶快去检查下redis,木马或许已经植入服务器,应尽快处理: 1.redis绑定在 0.0 ...

  7. Font-awesome失效恢复

    Font-awesome失效恢复策略 可能的原因有: 1.用了收费pro的版本,没充钱. Font Awesome 6 字体分为 Free 和 Pro 两个版本.Font Awesome 6 Free ...

  8. Web前端入门第 10 问:HTML 段落标签( <p> )嵌套段落标签( <p> )的渲染结果会怎样?

    HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 曾经有一个神奇的 bug 摆在我面前,为什么套娃一样的 HTML 语法,在段落标签 <p> 身上不生 ...

  9. 【HTML】步骤进度条组件

    HTML步骤进度条 效果图 思路 分份: 有多少个步骤就可以分成多少分,每份宽度应该为100%除以步骤数,故以上效果图中的每份宽度应该为25%,每份用一个div. 每份: 每份中可以看成是三个元素,一 ...

  10. AIops

    How does AIOps work?With AIOps, your organization takes a more proactive approach to resolve IT oper ...