当前位置: 首页 > news >正文

ESP32应用开发-Webserver

文章目录
    • 库调用
    • 实例
    • 实现思路
    • 技术要点
      • 1. 前端涉及的文件需要包装再发送
      • 2. http-GET路由
      • 3. http-POST路由
  • 开发环境:Arduino

库调用

#include <WebServer.h>
#include <ArduinoJson.h>	//IDE没有自带,需自行安装

实例

WebServer server(80);static const char index_html[] PROGMEM = R"==(  <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="styleLoading.css"> <title>沃进DTU配置系统</title><style></style>
</head>
<body><div class="content"><div><div class="casePage"><div class="disflex" style="justify-content: space-between;"><div class="titltInfo disflex"><div class="title_wayos" style="margin-bottom: 10px;"><a href="https://vollgo.cn/">沃进科技</a></div></div></div></div></div></div>
</body>
<script>
</script>
</html>)==";  void setup() {Serial.begin(115200);Serial.println("system start");IPAddress apIP({192, 168, 4, 1});    //设置AP的IP地址WiFi.mode(WIFI_AP_STA);WiFi.softAPConfig(apIP, apIP, IPAddress({255, 255, 255, 0}));server.on("/", [=]() {server.send(200, "text/html", FPSTR(index_html));});server.on("/index.html", [=]() {server.send(200, "text/html", FPSTR(index_html));});server.on("/wifi_params", HTTP_GET, [=]() {StaticJsonDocument<1024> doc;doc["code"] = 200;doc["message"]["ssid"] = "12345";String jsonString;serializeJson(doc, jsonString);Serial.println(jsonString);server.send(200, "text/json", jsonString.c_str());});server.onNotFound([](){String message = "File Not Found";message += "URI: ";message += server.uri();message += "
Method: ";message += (server.method() == HTTP_GET) ? "GET" : "POST";message += "
Arguments: ";message += server.args();message += "
";for (uint8_t i = 0; i < server.args(); i++) {message += " " + server.argName(i) + ": " + server.arg(i) + "
";}server.send(404, "text/plain", message);// digitalWrite(led, 0);});server.begin();
}
void loop() {delay(1);server.handleClient();
}

实现思路

ESP32作为AP模式,终端连接该AP,通过地址即可访问该web服务器了,前端界面文件通过http GET方式获取,包括css文件,图片,js文件等。

技术要点

1. 前端涉及的文件需要包装再发送
static const char index_html[] PROGMEM = R"==(  
)==";  

把整个前端文件的内容放在()括号里。

2. http-GET路由

访问路径/upd_pwd,操作方式GET,Arduino的编译链为c++,是支持lambda函数的,锁直接把函数传参直接写在调用处,是不是很方便。

  • serializeJson把json对象格式化成String

  • c_str()String转换成char *

  • server.arg("username")获取前端传递的路径中的参数username

    server.on(“/upd_pwd”, HTTP_GET, {
    String username = server.arg(“username”);
    StaticJsonDocument<512> doc;
    doc[“code”] = 201;
    String jsonString;
    serializeJson(doc, jsonString);
    server.send(200, “text/json”, jsonString.c_str());
    });

3. http-POST路由

访问路径/upd_pwd,操作方式POST,Arduino的编译链为c++,是支持lambda函数的,锁直接把函数传参直接写在调用处,是不是很方便。
post消息体的body数据放在plain字段中,以json字符串的形式存放。

  • serializeJson把json对象格式化成String

  • c_str()String转换成char *

  • server.arg("username")获取前端传递的路径中的参数username

  • const char *ip = doc["server"];获取json对象的server字段的值

    server.on(“/upd_pwd”, HTTP_POST, {
    String body= server.arg(“plain”);
    StaticJsonDocument<512> doc;
    DeserializationError error = deserializeJson(doc, body.c_str());
    if(error)
    {
    server.send(400, “text/json”, “{“success”: 400, “message”:“json error”}”);
    }
    else
    {
    const char *ip = doc[“server”];
    StaticJsonDocument<512> doc_ret;
    doc_ret[“code”] = 201;
    String jsonString;
    serializeJson(doc_ret, jsonString);
    server.send(200, “text/json”, jsonString.c_str());
    }
    });

相关文章:

ESP32应用开发-Webserver

文章目录 库调用实例实现思路技术要点 1. 前端涉及的文件需要包装再发送2. http-GET路由3. http-POST路由 开发环境&#xff1a;Arduino 库调用 #include <WebServer.h> #include <ArduinoJson.h> //IDE没有自带&#xff0c;需自行安装实例 WebServer server…...

【IMU:视觉惯性SLAM系统】

视觉惯性SLAM系统简介 相机&#xff08;单目/双目/RGBD)与IMU结合起来就是视觉惯性&#xff0c;通常以单目/双目IMU为主。 IMU里面有个小芯片可以测量角速度与加速度&#xff0c;可分为6轴(6个自由度)和9轴&#xff08;9个自由度&#xff09;IMU&#xff0c;具体的关于IMU的介…...

前端开发 之 12个鼠标交互特效下【附完整源码】

前端开发 之 12个鼠标交互特效下【附完整源码】 文章目录 前端开发 之 12个鼠标交互特效下【附完整源码】七&#xff1a;粒子烟花绽放特效1.效果展示2.HTML完整代码 八&#xff1a;彩球释放特效1.效果展示2.HTML完整代码 九&#xff1a;雨滴掉落特效1.效果展示2.HTML完整代码 十…...

Unity文件路径访问总结:从基础到高级的资源加载方法

在Unity开发中&#xff0c;文件路径的访问和资源加载是开发者经常需要处理的任务。无论是加载纹理、模型、音频&#xff0c;还是读取配置文件&#xff0c;正确地处理路径和资源加载是确保项目顺利运行的关键。本文将以Unity文件路径访问为主线&#xff0c;详细介绍Unity中常见的…...

AWS Transfer 系列:简化文件传输与管理的云服务

在数字化转型的今天&#xff0c;企业对文件传输、存储和管理的需求日益增长。尤其是对于需要大量数据交换的行业&#xff0c;如何高效、可靠地传输数据成为了一大挑战。为了解决这一难题&#xff0c;AWS 提供了一系列的文件传输服务&#xff0c;统称为 AWS Transfer 系列。这些…...

Jenkins Api Token 访问问题

curl --location http://192.168.18.202:8080/view/ChinaFish/job/Ali/buildWithParameters?token1142be281174ee8fdf58773dedcef7ea4c&DeployTypeUpdateConfig \ --header Authorization: •••••• \ --header Cookie: JSESSIONID.824aa9a5node01ojk9yhh3imc24duwy67…...

垂起固定翼无人机大面积森林草原巡检技术详解

垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段&#xff0c;以下是对该技术的详细解析&#xff1a; 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点&#xff0c;具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…...

【Leetcode 每日一题】1387. 将整数按权重排序

问题背景 我们将整数 x x x 的 权重 定义为按照下述规则将 x x x 变成 1 1 1 所需要的步数&#xff1a; 如果 x x x 是偶数&#xff0c;那么 x x / 2 x x / 2 xx/2。如果 x x x 是奇数&#xff0c;那么 x 3 x 1 x 3 \times x 1 x3x1。 比方说&#xff0c; x …...

科研笔记 KDD 2025

1 基本介绍 KDD 每年有多次投稿周期。KDD 2025 将有两个截止时间&#xff1a;分别是 2024 年 8 月 1 日和 2025 年 2 月 1 日&#xff08;全文提交截止时间在摘要提交截止后一周&#xff09;。 同时&#xff0c;KDD 会议论文集&#xff08;Proceedings&#xff09;将分两批出…...

黑马Java面试教程_P8_并发编程

系列博客目录 文章目录 系列博客目录前言1.线程的基础知识1.1 线程和进程的区别&#xff1f;难2频3面试文稿 1.2 并行和并发有什么区别&#xff1f; 难1频1面试文稿 1.3 创建线程的四种方式 难2频4面试文稿 1.4 runnable 和 callable 有什么区别 难2频3面试文稿 1.5 线程的 run…...

网络视频监控平台/安防监控/视频综合管理Liveweb视频汇聚平台解决方案

一、当前现状分析 当前视频资源面临以下问题&#xff1a; 1&#xff09;不同单位在视频平台建设中以所属领域为单位&#xff0c;设备品牌众多&#xff0c;存在的标准不一&#xff0c;各系统之间也没有统一标准&#xff1b; 2&#xff09;各单位视频平台建设分散、统筹性差&am…...

workman服务端开发模式-应用开发-后端api推送修改二

需要修改两个地方&#xff0c;第一个是总控制里面的续token延时&#xff0c;第二个是操作日志记录 一、总控续token延时方法 在根目录下app文件夹下controller文件夹下Base.php中修改isLoginAuth方法&#xff0c;具体代码如下&#xff1a; <?php /*** 总控制* User: 龙哥…...

SQL 使用带聚集函数的联结

聚集函数用于汇总数据&#xff0c;通常用于从一个表中计算统计信息&#xff0c;但也可以与联结一起使用。以下是一个例子&#xff0c;展示如何使用聚集函数统计每个顾客的订单数。 示例 1&#xff1a;使用 COUNT() 函数与 INNER JOIN 假设我们需要检索所有顾客及每个顾客所下…...

Restaurants WebAPI(三)——Serilog/FluenValidation

文章目录 项目地址一、Serilog使用1.1 安装 Serilog1.2 注册日志服务1.3 设置日志级别和详情1.4 配置到文件里1.5 给不同的环境配置日志1.5.1 配置appsettings.Development.json二、Swagger的使用三、自定义Exception中间件3.1 使用FluentValidation项目地址 教程作者:教程地址…...

概率论得学习和整理32: 用EXCEL描述正态分布,用δ求累计概率,以及已知概率求X的区间

目录 1 正态分布相关 2 正态分布的函数和曲线 2.1 正态分布的函数值&#xff0c;用norm.dist() 函数求 2.2 正态分布的pdf 和 cdf 2.3 正态分布的图形随着u 和 δ^2的变化 3 正态分布最重要的3δ原则 3.0 注意&#xff0c;这里说的概率一定是累计概率CDF&#xff0c;而…...

【原生js案例】让你的移动页面实现自定义的上拉加载和下拉刷新

目前很多前端UI都是自带有上拉加载和下拉刷新功能,按照官网配置去实现即可,比如原生小程序,vantUI等UI框架,都替我们实现了内部功能。 那如何自己来实现一个上拉加载和下拉刷新的功能? 实现效果 不用浏览器的css滚动条,自定义实现滚动效果 自定义实现滚动,添加上拉加载…...

【linux 常用命令】

1. 使用xshell 通过SSH连接到Linux服务器 ssh -p 端口号 usernameip地址2. 查看当前目录下的子文件夹的内存占用情况 du -a -h -d 1或者 du -ah -d 1-a &#xff1a;展示所有子文件夹&#xff08;包括隐藏文件夹&#xff09;&#xff0c;-h &#xff1a;以人类可读的形式&am…...

【JetPack】Room数据库笔记

Room数据库笔记 ORM框架&#xff1a;对齐数据库数据结构与面向对象数据结构之间的关系&#xff0c;使开发编程只考虑面向对象不需要考虑数据库的结构 Entity : 数据实体&#xff0c;对应数据库中的表 <完成面向对象与数据库表结构的映射> 注解&#xff1a; 类添加注解…...

【CSS in Depth 2 精译_088】第五部分:添加动效概述 + 第 15 章:CSS 过渡特效概述 + 15.1:状态间的由此及彼

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 15 章 过渡】 ✔️ 15.1 状态间的由此及彼 ✔️15.2 定时函数 文章目录 第 5 部分 添加动效 Adding motion第 15 章 过渡 Transitions15.1 状态间的由此及彼 From here…...

# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)

↑ 上方下载文档 (大小374KB) 接口文档预览 (超过50个接口) 一、数据库25张表er-关系清晰构图&#xff01;(tip: 鼠标右键图片 > 放大图像) 二、难点/经验 详细说明 热门评论排序评论点赞列表|DTO封装经验分享|精华接口文档说明 组员都说喜欢分档对应枚举码 如果这篇文章…...

Android息屏后定时器失效?手把手教你搞定华为/小米等主流机型后台保活

Android息屏定时器保活实战&#xff1a;主流机型后台运行全攻略 每次调试完的定时任务在息屏后莫名停止&#xff1f;这可能是Android开发者最头疼的问题之一。去年我们团队开发一款健康提醒应用时&#xff0c;就遇到了这个经典难题——用户锁屏后定时提醒功能完全失效&#xff…...

NCMconverter完整指南:3步解锁NCM音乐文件的终极播放方案

NCMconverter完整指南&#xff1a;3步解锁NCM音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况&#xff1a;从音乐平台下载了心…...

Detectron2特征图热力可视化实战:从Faster R-CNN到自定义网络

1. 为什么需要特征图热力可视化 当你训练一个目标检测模型时&#xff0c;有没有遇到过这样的困惑&#xff1a;模型在某些场景下表现很好&#xff0c;但在另一些场景却频频出错&#xff1f;作为算法工程师&#xff0c;我们往往只能看到最终的检测结果&#xff0c;却不知道模型内…...

【2026年阿里巴巴春招- 3月25日-算法岗-第二题- 该博弈了】(题目+思路+JavaC++Python解析+在线测试)

题目内容 有一个 nmnmnm 的棋盘,记第 iii<...

ChatTTS 本地部署性能优化实战:从生成缓慢到高效推理的解决方案

最近在本地部署 ChatTTS 进行语音合成时&#xff0c;发现生成速度慢得让人有点抓狂。一段几秒钟的音频&#xff0c;等待时间却要十几秒甚至更长&#xff0c;这严重影响了交互体验和批量处理效率。于是&#xff0c;我花了一些时间深入研究&#xff0c;尝试了多种优化手段&#x…...

【MySQL】7.MySQL基本查询(2)

文章目录6. 表的增删改查6.2 Retrieve(读取/筛选)6.2.2 WHERE 条件6.2.2.1 英语不及格的同学及英语成绩 ( < 60 )6.2.2.2 语文成绩在 [80, 90] 分的同学及语文成绩6.2.2.3 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩6.2.2.4 姓孙的同学 及 孙某同学6.2.2.5 …...

低成本替代方案:OpenClaw+Qwen3-32B镜像实现ChatGPT插件功能

低成本替代方案&#xff1a;OpenClawQwen3-32B镜像实现ChatGPT插件功能 1. 为什么需要本地化插件替代方案 去年我在团队内部推广ChatGPT时&#xff0c;发现一个尴尬现象&#xff1a;每当演示网页摘要或代码解释功能时&#xff0c;总会有人问"这些数据会不会传到OpenAI服…...

ComfyUI工作流迁移终极指南:从新手到专家的完整备份与复用教程

ComfyUI工作流迁移终极指南&#xff1a;从新手到专家的完整备份与复用教程 【免费下载链接】ComfyUI 最强大且模块化的具有图形/节点界面的稳定扩散GUI。 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 想要将精心设计的AI创作工作流在不同设备间无缝迁移吗…...

STM32CubeMX + HAL 库:定时器输入捕获的进阶应用,多通道PWM信号同步测量与动态分析

1. 多通道PWM信号同步测量的核心挑战 在电机控制或无人机舵机系统中&#xff0c;经常需要同时监测多个PWM信号的实时状态。比如四轴飞行器的四个电调信号&#xff0c;或者机械臂的六个关节舵机反馈。传统单通道测量方法需要轮流采样&#xff0c;无法捕捉各通道间的相位关系&…...

mFS:面向EEPROM的轻量级嵌入式文件系统

1. mFS 文件系统概述mFS&#xff08;micro File System&#xff09;是一个专为串行 EEPROM 存储器芯片设计的轻量级嵌入式文件系统库。它不依赖于任何操作系统或硬件抽象层&#xff0c;以纯 C 实现&#xff0c;代码体积紧凑&#xff08;典型编译后 ROM 占用 < 4 KB&#xff…...