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 登录网页

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

相关推荐
GilgameshJSS1 小时前
STM32H743-ARM例程33-TOUCH
c语言·arm开发·stm32·单片机·嵌入式硬件
阿巴~阿巴~2 小时前
Linux同步机制:POSIX 信号量 与 SystemV信号量 的 对比
linux·服务器·线程·信号量·线程同步·posix·system v
fyakm2 小时前
Linux文件搜索:grep、find命令实战应用(附案例)
linux·运维·服务器
我只会写Bug啊4 小时前
Vue文件预览终极方案:PNG/EXCEL/PDF/DOCX/OFD等10+格式一键渲染,开源即用!
前端·vue.js·pdf·excel·预览
wanhengidc4 小时前
云手机存在的意义是什么
运维·服务器·arm开发·安全·智能手机
扯蛋4385 小时前
LangChain的学习之路( 一 )
前端·langchain·mcp
Mr.Jessy5 小时前
Web APIs学习第一天:获取 DOM 对象
开发语言·前端·javascript·学习·html
ConardLi7 小时前
Easy Dataset 已经突破 11.5K Star,这次又带来多项功能更新!
前端·javascript·后端
报错小能手7 小时前
计算机网络自顶向下方法25——运输层 TCP流量控制 连接管理 “四次挥手”的优化
服务器·网络·计算机网络
冴羽7 小时前
10 个被严重低估的 JS 特性,直接少写 500 行代码
前端·javascript·性能优化