ESP32-Web-Server编程- 通过滑动条向 Web 提交数据

ESP32-Web-Server编程- 通过滑动条向 Web 提交数据

概述

上一节我们讲述了通过文本框向 ESP32 发送字符串、数字。有时,我们需要向 ESP32 发送连续的值,这种需求可以通过在网页端实现滑动条来实现。

需求及功能解析

本节演示如何在 ESP32 上部署一个 Web 服务器,并在访问该 web 服务器时在网页端提供一个滑动条。可以在网页移动滑动条,每次移动滑动条都会触发将新的数字发送到 ESP32 的 Web 服务器。这在一些实时性要求较高的项目中,比如控制 PWM 马达的频率时比较有用。

示例解析

目录结构

复制代码
├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c                 User application
├── components
│   └── fs_image
└── README.md                  This is the file you are currently reading
  • 目录结构主要包含主目录 main,以及组件目录 components.
  • 其中组件目录components中包含了用于存储网页文件的 fs_image 目录(即前述前端文件)。

前端代码

前端代码的 HTML 部分在 components/fs_image/web_image/index.html 中,主要是创建一个滑动条 pwmSlider,然后每次更新时触发函数 updateSliderPWM(),将在该函数内向 ESP32 Web 的 /slider 发送 POST 请求:

复制代码
 <div class="topnav">
    <h1>ESP WEB SERVER INPUT FIELDS</h1>
  </div>
  <script>
    function updateSliderPWM(element) {
      var sliderValue = document.getElementById("pwmSlider").value;
      document.getElementById("textSliderValue").innerHTML = sliderValue;
      console.log(sliderValue);
      var xhr = new XMLHttpRequest();
      xhr.open("POST", "/slider?value="+sliderValue, true);
      xhr.send();
    }
  </script>

后端代码

后端代码主要是增加了浏览器通过网页向服务器推送数据时的处理函数update_values_post_handler():

复制代码
 {"/", HTTP_POST, update_values_post_handler, rest_context},

在该函数中,接收推动数据,并解析推送数据中的字符串和数字:

复制代码
static esp_err_t update_values_post_handler(httpd_req_t* req)
{
    ESP_LOGI(TAG, "in post handler, uri=%s", req->uri);
    char filepath[FILE_PATH_MAX];
    rest_server_context_t* rest_context = (rest_server_context_t*) req->user_ctx;
    char* buf = ((rest_server_context_t*) (req->user_ctx))->scratch;
    int str_len = 0;
    char temp_str[128] = {0};

    str_len = httpd_find_arg(req->uri, "value", temp_str, sizeof(temp_str));
    if ((str_len != -1) && (strlen((char *)temp_str) != 0)) {
        my_num = atoi(temp_str);
        ESP_LOGI(TAG, "updates:num=%d", my_num);
    }

    return ESP_OK;
}

示例效果

讨论

总结

1)本节主要是介绍在 ESP32 Web 上部署带滑动条输入的网页,通过网页向 ESP32 发送数字。通过这种机制,我们可以实现对 实时性较高的数据下发功能。

资源链接

1)ESP32-Web-Server ESP-IDF系列博客介绍

2)对应示例的 code 链接 (点击直达代码仓库)

3)下一篇:SP32-Web-Server编程- 实现 Web 登录网页

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

相关推荐
2CM_Embed5 小时前
Altium Designer 原理图与 PCB 快速相互定位:Cross Probe 交叉探针
嵌入式硬件·pcb·altium designer·c2000
不可求~5 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
恒锐丰-罗生6 小时前
宽压大电流同步降压优选|CN3906 DC-DC 电源芯片,车载 / 工控 / IoT 全能供电方案
嵌入式硬件·硬件工程
2501_913981786 小时前
工业4.0时代的物联网解决方案:领先品牌如何引领智能制造变革
物联网·制造·工业物联网
躺不平的理查德7 小时前
ARCH与交叉编译器的关系
服务器·arm
虎王物联8 小时前
物联网协议网关设计:多协议融合与数据转换的工程实战
物联网·嵌入式·esp32
AC赳赳老秦9 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
谢慧琼9 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
happygrilclh9 小时前
STM32,串口单字节中断接受,每次上电后,会收到一个0x00的解决办法。
单片机·嵌入式硬件
weixin_4316004410 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点