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

用ESP32打造动态网页仪表盘

手把手教你用Mongoose Wizard打造ESP32动态网页仪表盘(附代码管理秘籍)

引言

在物联网项目中,用ESP32构建一个网页来实时显示传感器数据是非常常见的需求。虽然我们可以手动编写HTML+CSS+JS,但效率和美观度往往难以兼得。Mongoose Wizard 是一个强大的在线可视化工具,只需拖拽组件就能生成完整的ESP32网页仪表盘代码,支持Arduino IDE直接编译。本文将带你从零开始,完成一个能自动刷新动态数据(0~100循环)的仪表盘,并重点解决一个痛点:如何在重新生成UI代码时不丢失手动添加的业务逻辑


第一部分:Mongoose Wizard快速入门

1. 访问在线工具

打开浏览器,访问https://mongoose.ws/wizard/https://mongoose.ws/wizard/。你将看到一个可视化的UI编辑器界面。

2. 设计你的仪表盘

  • 从左侧组件库拖拽一个数值显示卡片到画布。

  • 可以添加一个仪表盘,用于显示速度。

  • 选择开发板

  • 布局调整满意后,点击右上角的Generate code按钮。


第二部分:本地编译与基础配置

1. 解压并打开项目

将下载的.zip文件解压,你会看到一个包含.ino文件和src文件夹的目录。用Arduino IDE打开.ino文件。

2. 添加WiFi连接

编译上传,打开串口监视器,你应该能看到IP地址正常显示。浏览器访问该IP,即可看到你设计的仪表盘(可能需要输入默认用户名密码admin/admin,可后续禁用)。


第三部分:添加动态数据(0~100循环)

现在我们要让仪表盘上的数字自动从0循环到100。Wizard生成的代码中,所有UI组件的数据都由src/mongoose_glue.c中的glue_get_state()函数提供。该函数返回一个结构体,包含所有UI组件的当前值。

1. 在mongoose_glue.c中添加动态变量和更新函数

打开src/mongoose_glue.c,在文件顶部添加全局变量和update函数:

#include <Arduino.h> // 如果还没有,需要包含以使用millis() static int g_dynamic_value = 0; // 动态值,从0到100循环 void update_dynamic_value() { static unsigned long lastUpdate = 0; unsigned long now = millis(); if (now - lastUpdate > 100) { // 每100ms更新一次 lastUpdate = now; g_dynamic_value++; if (g_dynamic_value > 100) { g_dynamic_value = 0; } } }

2. 修改glue_get_state函数

找到glue_get_state(struct state *data)函数,它通常是将静态的s_state复制给data。我们需要用动态值覆盖对应的成员。假设你在Wizard中将数值组件的Key设为dynamic_value,那么结构体中应该有一个同名成员(具体名称取决于Wizard生成,可能是dynamic_value或类似)。安全起见,可以用成员名直接赋值:

void glue_get_state(struct state *data) { *data = s_state; // 先复制静态初始值 >#ifndef APP_LOGIC_H #define APP_LOGIC_H #include <Arduino.h> extern int g_dynamic_value; // 声明全局变量 void update_dynamic_value(); // 声明更新函数 #endif

app_logic.cpp

#include "app_logic.h" int g_dynamic_value = 0; void update_dynamic_value() { static unsigned long lastUpdate = 0; unsigned long now = millis(); if (now - lastUpdate > 100) { lastUpdate = now; g_dynamic_value++; if (g_dynamic_value > 100) g_dynamic_value = 0; } }

2. 修改mongoose_glue.c引用业务逻辑

src/mongoose_glue.c顶部添加:

#include "app_logic.h"

glue_get_state中,用g_dynamic_value赋值:

data->dynamic_value = g_dynamic_value;

3. 在主循环中调用更新

wizard.ino保持不变,仍调用update_dynamic_value()

4. 未来更新流程

  • 在Wizard中修改UI → 重新生成代码 → 解压新项目。

  • 将旧的app_logic.happ_logic.cpp复制到新项目根目录。

  • 在新mongoose_glue.c中添加#include "app_logic.h",恢复赋值代码(可提前备份赋值语句,直接粘贴)。

  • 编译上传,所有业务逻辑完好无损!


总结与进阶

现在,你可以在此基础上扩展更多功能:接入真实传感器(如DHT22)、添加图表、通过开关控制设备等。Mongoose Wizard还支持OTA更新、用户认证等高级特性,值得深入探索。

提示:Wizard的项目数据存储在浏览器缓存中,如果需要永久保存设计,可以导出为JSON文件或定期备份屏幕截图和Key配置。

http://www.jsqmd.com/news/425411/

相关文章:

  • flutter: 用getxservice管理状态
  • 感受一下谷歌的语义识别能力 和 古老的每个关键词单独做一个站的玩法
  • 2026年诚信的景观灯光护栏厂家优质推荐 - 品牌鉴赏师
  • 【claude】拒绝为美军提供“黑暗版”Claude,Anthropic成首个被五角大楼列入“供应链风险”的美国AI公司
  • 碎碎念
  • 正确理解C++中的值语义:move
  • 2026年防爆声级计制造厂推荐,防爆认证噪声监测专业厂商 - 品牌鉴赏师
  • 华为OD技术面八股文_C++_01
  • 分布式系统高并发:缓存策略与限流方案实践
  • P15546 学习笔记
  • 【二分】BISHI85 【模板】整数域二分
  • 《深度解析!Agentic AI在智能制造潜力,提示工程架构师视角揭秘》
  • AI原生应用开发:Llama模型的10个高级用法
  • SVG Stroke 属性详解
  • 数据仓库监控体系搭建:从ETL到查询全链路监控
  • SQL ROUND() 函数详解
  • 解读大数据领域结构化数据的管理模式
  • 华为OD机考双机位C卷 - Alice的安全旅行 (Java Python JS GO C++ C)
  • 基于双层优化与二阶锥松弛模型的电动汽车时空调度策略:在MATLAB环境中的配电网研究
  • 从MVP到规模化:AI原生应用的成长路径
  • 2026年最受欢迎的三亚海鲜餐厅TOP5推荐,带你畅享鲜美海味盛宴
  • Aspose.Total for .NET 2026全系列来了,官方包
  • day100(3.1)——leetcode面试经典150
  • 2026年三亚湘菜餐厅对比推荐,必尝五大经典美味,让你领略湘味魅力
  • AI赋能,AI应用架构师重塑渠道管理格局
  • COMSOL氩气双层介质阻挡放电模型——利用等离子体模块的探讨
  • 微信小程序 springboot_uniapp的坭兴陶文化传承与创新系统的设计与实现_a8uyn972
  • 微信小程序 springboot_uniapp的大学生兼职推荐系统的设计与实现_ly2blc52
  • 流水线贴膜机:PLC与触摸屏程序详解,适合初学者学习的简单控制工艺及运动控制教程(支持博图V1...
  • 指针核心训练-位操作-随笔