ESP32开发板创建同步WebServer网页服务器

ESP32开发板创建同步WebServer网页服务器

文章目录


前言

ESP32 内置了 Wi-Fi 功能,能够作为网页服务器(Web Server)向网络中的其他设备提供服务。通过在 ESP32 上运行网页服务器,可以创建基于浏览器的用户界面,用于监控传感器数据或控制设备状态,是实现物联网(IoT)应用的基础功能之一。

WebServer 库简介

Arduino-ESP32 核心库内置了 WebServer.h,它提供了一套简洁的 API 来快速构建 Web Server 轻量级的 HTTP 服务器。通过注册路由(URL 路径)及回调函数,实现请求分发与应答。适用于绝大多数典型 IOT 项目的本地网页交互。

选择建议

使用同步WebServer当:
轻量级,入门和资源受限场景,无需额外安装;
项目简单,只有一个用户;
请求处理非常快速(<100ms);
不需要同时处理其他重要任务;
内存资源非常有限;

使用异步WebServer当:
对大流量/高并发等复杂场景,需要高性能,服务多个用户;
有耗时操作(文件操作、网络请求);
需要实时功能(WebSocket);
需要处理上传/下载;
系统有其他重要任务需要及时响应;

同步阻塞模型,服务器一次只能处理一个客户端请求,必须等待当前请求完全处理完成后,才能处理下一个请求。

以下为同步WebServer与异步WebServer对比

在这里插入图片描述

基础网页服务 (STA 模式)

在 STA 模式下创建一个基础的网页服务器,用于显示一个包含"Hello World!"的静态页面。

#include<WiFi.h>#include<WebServer.h>constchar*ssid ="Maker";// 替换为你的 Wi-Fi 名称constchar*password ="12345678";// 替换为你的 Wi-Fi 密码 WebServer server(80);voidsetup(){ Serial.begin(115200);delay(10);// 连接 WiFi 网络 Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password);// 等待连接成功while(WiFi.status()!= WL_CONNECTED){delay(500); Serial.print(".");} Serial.println(); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP());// 配置路由和启动服务器 server.on("/", handleRoot); server.begin();}voidloop(){ server.handleClient();}// 处理根路径请求voidhandleRoot(){ server.send(200,"text/html",generateHTML());}// 生成 HTML 页面内容 String generateHTML(){ String htmlContent ="<!DOCTYPE html> <html>\n"; htmlContent +="<head><meta charset=\"utf-8\" name=\"viewport\" content=\"width=device-width\">\n"; htmlContent +="<title>ESP32S3 Test</title>\n"; htmlContent +="</head><body>\n"; htmlContent +="<h1>Hello World!</h1>\n"; htmlContent +="<p>Hello from ESP32</p>\n"; htmlContent +="</body>\n"; htmlContent +="</html>\n";return htmlContent;}

代码解释​
#include <WebServer.h>:引入 Web Server 库,用以在 ESP32 上创建 HTTP 服务器。

WebServer server(80);:创建一个服务器对象,监听标准的 HTTP 端口 80。80 是 HTTP 协议的默认端口。

server.on(“/”, handleRoot);:注册路由处理函数。当客户端访问根路径"/"时,调用 handleRoot() 函数。

server.begin();:启动服务器,开始监听客户端的连接请求。

server.handleClient();:在 loop() 中持续调用,处理传入的客户端请求。

handleRoot():这是一个自定义的回调函数,用于处理特定路径的请求。

server.send(statusCode, contentType, content);:向客户端发送一个 HTTP 响应。向客户端浏览器返回包含 “Hello World” 的简单 HTML 页面。
200:HTTP 状态码,200 OK 表示请求成功。
“text/html”:MIME 类型,告知浏览器响应内容是 HTML 文本。
generateHTML():函数返回的字符串,即网页的实际内容。
generateHTML():一个辅助函数,将 HTML 代码拼接成一个 String 对象,返回包含完整 HTML 结构的字符串。

运行结果​

将代码中的 ssid 和 password 修改为目标 Wi-Fi 网络的名称和密码后上传。串口监视器将显示连接过程和获取到的 IP 地址。在同一局域网的设备上打开浏览器,输入显示的 IP 地址,即可看到"Hello World!"页面。

在这里插入图片描述


在这里插入图片描述

Read more

双剑破天门:攻防世界Web题解之独孤九剑心法(八)

双剑破天门:攻防世界Web题解之独孤九剑心法(八)

免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任 **本文以攻防世界部分题为例进行演示,后续会对攻防世界大部分的web题目进行演示,如果你感兴趣请关注** 目录 一:WEB 2 二:Web_php_unserialize 三:php_rce 四:web_php_include 五:总结 1. WEB 2 2. Web_php_unserialize 3. php_rce 4. web_php_include 一:WEB 2 打开是一个php代码 代码审计 1.首先给了一段密文也就是需要解密的flag 2.然后对传进来的str进行字符串反转($_o) 3.

H.265 (HEVC) 网页播放:WebAssembly + FFmpeg 实现浏览器端的硬解/软解兼容方案

H.265 (HEVC) 网页播放:WebAssembly + FFmpeg 实现浏览器端的硬解/软解兼容方案

标签: #WebAssembly #FFmpeg #H.265 #WebCodecs #音视频开发 #前端性能 📉 前言:浏览器对 H.265 的“爱恨情仇” 为什么 <video src="video.h265.mp4"> 在 Chrome 里放不出来? 因为 H.265 的专利池太深了。只有 Safari (即使是 iOS) 和 Edge (需硬件支持) 原生支持较好。 我们的目标是构建一套混合解码方案: 1. 优先硬解 (WebCodecs):如果浏览器支持硬件加速(如 Chrome 94+ 的 WebCodecs),直接调用

使用 Node.js 从零开始构建你自己的 Web 服务器

来源请点击 二 HTTP 概述 2.1 概述 http请求或响应都有一个头部和一个可选的payload组成。头部包含URL或响应码,后跟一个头部字段列表。 2.2 示例 netcat命令 nc baidu.com 80 nc(netcat)命令会创建一个到目标主机和端口的 TCP 连接,然后将该连接附加到标准输入和标准输出。 然后输入 @111 ~ % nc example.com 80 GET / HTTP/1.0 Host:example.com (空行) 会看到输出: HTTP/1.0 200 OK Accept-Ranges: bytes Content-Type: text/html ETag:

OpenClaw Webhook 详解:完整指南

Webhook 是将 OpenClaw 从“聊天助手”快速转变为“响应式系统”的最佳方式。无需等待您主动发送消息,GitHub 可以在 PR 提交时通知 OpenClaw,Stripe 可以在支付失败时通知 OpenClaw,n8n 也可以按计划通知 OpenClaw。OpenClaw 会接收这些传入事件,并将其转换为代理运行或轻量级唤醒操作,然后将结果路由回您实际使用的任何渠道。 本文重点介绍 OpenClaw 网关上的 HTTP Webhook。OpenClaw 中还有另一种东西,在一些文档和配置中也被称为“钩子”。这些是网关内部的事件钩子,当本地生命周期事件触发时运行。它们也很有用,但 Stripe 或 GitHub 与服务器通信的方式并非通过它们。 如果您的 OpenClaw 实例是刚刚部署在 VPS 上,并且您仍然使用 SSH 进行基本操作,那么首先要确保网关稳定,