基于W5100S与Node-RED的嵌入式物联网数据可视化实战

发布时间:2026/6/2 20:16:12

基于W5100S与Node-RED的嵌入式物联网数据可视化实战 1. 项目概述从嵌入式设备到可视化大屏的轻量级路径在物联网项目的开发中数据可视化往往是“最后一公里”也是最直观体现项目价值的一环。很多开发者尤其是嵌入式背景的工程师常常卡在这里前端技术栈复杂Web开发门槛高导致一个功能强大的硬件项目其数据只能躺在串口监视器里难以形成有效的监控界面。今天分享的这套组合方案——W5100S-EVB-Pico与Node-RED正是为了解决这个痛点。它绕开了繁重的全栈开发利用硬件自带的以太网能力和低代码可视化工具让一个功能完整的物联网仪表盘从想法到落地最快可能只需要一杯咖啡的时间。这套方案的核心逻辑非常清晰硬件负责可靠地采集与发送数据软件负责优雅地接收与展示数据。W5100S-EVB-Pico这块板子很有意思它本质上是一块Raspberry Pi Pico但集成了WIZnet的W5100S以太网控制器芯片这意味着它出厂就自带了一个稳定的、硬件的TCP/IP协议栈联网能力是它的原生属性无需外接模块稳定性和性能都比软件模拟或串口转接的方案要好得多。而Node-RED则是一个基于Node.js的流程编排工具它通过“拖拽节点连线”的方式构建应用逻辑内置了HTTP、TCP、MQTT等大量物联网常用协议节点以及专门用于UI构建的Dashboard节点库。将这两者结合你只需要写几十行Arduino代码让开发板定时发送数据然后在Node-RED里拖拽几个节点并做简单配置一个实时刷新图表和仪表的专业级监控页面就诞生了。这个方案特别适合以下几类场景一是快速原型验证当你需要向客户或团队演示传感器数据的实时效果时二是中小型监控项目例如车间内的温湿度看板、家庭环境监测站、小型实验室设备状态监控等三是嵌入式开发者拓展技能边界希望以最小成本为自己的硬件项目增加网络和可视化能力。整个过程几乎不涉及复杂的网络编程和前端代码注意力可以始终聚焦在你的核心业务逻辑——也就是传感器数据本身上。接下来我将拆解从硬件准备到仪表盘上线的每一个步骤并穿插我在多次实践中积累的配置技巧和避坑指南。2. 硬件选型与核心原理剖析2.1 为什么是W5100S-EVB-Pico在众多物联网开发板中选择W5100S-EVB-Pico并非偶然而是基于其在特定需求下的综合优势。首先它解决了嵌入式设备联网的一个根本矛盾性能与易用性的平衡。很多MCU通过软件库如lwIP实现TCP/IP栈会消耗大量CPU资源和内存在复杂网络交互时可能不稳定。而另一些方案则依赖外部AT指令模组如ESP8266通信效率和控制粒度有所损失。W5100S是一颗独立的硬件网络芯片它自带完整的TCP/IP协议栈MCURP2040通过标准的SPI接口与之通信。这意味着网络数据包的封装、解析、重传等繁重任务都由W5100S独立完成RP2040只需处理应用层数据极大地减轻了主控负担保证了数据采集和业务逻辑的实时性。其次开发环境友好。该板卡兼容Raspberry Pi Pico的生态可以使用Arduino-Pico由Earle F. Philhower维护这个非常成熟的开发框架。这意味着你可以利用Arduino丰富的库资源和熟悉的编程模式快速上手而无需深入钻研Rasp2040的SDK。对于从Arduino平台过渡过来的开发者学习成本几乎为零。更重要的是Philhower的Arduino-Pico核心从1.9.7版本开始已经原生支持W5100S-EVB-Pico的板型定义省去了手动配置引脚映射的麻烦。最后是连接可靠性。以太网相对于Wi-Fi在工业或固定场所的监控场景中具有无可比拟的优势连接稳定、延迟低、带宽足、不受无线信号干扰。对于需要7x24小时连续运行的数据采集点一根网线提供的稳定性远比Wi-Fi让人安心。W5100S支持10/100M自适应的以太网完全能满足传感器数据这种小流量、高实时性的传输需求。注意虽然板载了网络变压器RJ45接口旁边那组黑色方块但W5100S-EVB-Pico本身不具备自动协商交叉线Auto-MDI/X功能。在实际布线中尽量使用标准直通网线连接交换机或路由器。如果必须直接连接电脑可能需要使用交叉网线但更推荐的做法是让电脑和开发板都接入同一个路由器或交换机这是最稳妥的连接方式。2.2 Node-RED低代码可视化的核心引擎Node-RED的魅力在于它用“流”的概念抽象了物联网应用的数据管道。你可以把它想象成一个图形化的数据流水线工厂。每个节点代表一个处理单元如“接收TCP数据”、“解析JSON”、“存入数据库”、“生成图表”节点之间的连线代表了数据的流向。这种模式非常适合物联网场景因为物联网应用本质就是数据从源头设备经过一系列处理过滤、转换、聚合最终到达目的地存储、显示、触发动作的过程。对于本项目Node-RED扮演了两个关键角色TCP服务器和Web仪表盘服务器。首先它开启一个TCP监听端口等待W5100S-EVB-Pico的连接和数据推送。这是一个非常轻量级的通信模式比HTTP的请求-响应模式更适用于设备主动、持续上报数据的场景。其次它的Dashboard节点库提供了Gauge仪表、Chart图表、Text文本等丰富的UI组件并自动将这些组件组织成一个响应式的Web页面。你无需编写任何HTML、CSS或JavaScript只需在节点属性中设置图表的标题、颜色、数值范围等Node-RED就会在后台帮你处理好一切前端渲染和WebSocket实时通信。这种架构的优势是解耦和灵活。设备端代码只需关心如何将数据准确发送到指定的IP和端口完全不用理会数据如何被展示。而在Node-RED侧你可以随时调整仪表盘的布局、增加新的图表、甚至将数据同时转发到另一个数据库或云平台所有这些修改都无需改动设备端的固件实现了前端展示与后端采集的彻底分离。3. 开发环境搭建与关键配置3.1 Arduino开发环境配置详解第一步是搭建针对W5100S-EVB-Pico的Arduino编程环境。这里的关键是安装正确的“板卡支持包”。打开Arduino IDE进入“文件”-“首选项”在“附加开发板管理器网址”中添加Philhower核心的地址https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json。然后打开“工具”-“开发板”-“开发板管理器”搜索“Raspberry Pi Pico”安装“Raspberry Pi Pico/RP2040 by Earle F. Philhower”这个包。安装完成后在开发板选单中就能找到“Raspberry Pi Pico”系列并选择“WIZnet W5100S-EVB-Pico”。接下来是安装网络库。虽然Arduino IDE自带了Ethernet库但WIZnet官方提供了针对其硬件优化过的版本。你需要手动下载WIZnet的Ethernet库。通常可以通过Arduino的库管理器搜索“Ethernet”并选择由“WIZnet”发布的版本进行安装。如果库管理器没有则需要从GitHub如WIZnet的arduinoEthernet仓库下载ZIP文件然后在Arduino IDE中通过“项目”-“加载库”-“添加.ZIP库…”来手动安装。实操心得安装完库后一个极易忽略但至关重要的步骤是手动指定片选引脚。在setup()函数中初始化网络时必须添加一行Ethernet.init(17);。这里的“17”对应的是RP2040连接W5100S芯片片选nCS信号的GPIO引脚号。对于W5100S-EVB-Pico这个引脚是固定的。如果没有这行代码SPI通信无法正确启动你会遇到网络初始化失败的问题。这是从通用Ethernet库转向专用硬件时必须进行的关键配置。3.2 Node-RED的安装与基础模块部署Node-RED的安装极其简单因为它基于Node.js。首先确保你的电脑可以是Windows、macOS或Linux甚至是树莓派这类小型主机已经安装了Node.js环境建议使用LTS版本。安装完成后打开命令行终端全局安装Node-RED即可npm install -g --unsafe-perm node-red安装完成后直接运行node-red命令终端会输出运行日志并提示访问地址通常是http://127.0.0.1:1880。此时打开浏览器访问这个地址就能看到Node-RED的流程编辑界面了。首次进入编辑器左侧的节点面板只有一些基础节点。我们需要安装两个关键模块node-red-dashboard和node-red-node-ui-list。点击右上角的菜单按钮三条横线选择“管理面板”。在打开的窗口中切换到“节点”标签页然后在搜索框中分别搜索“dashboard”和“ui_list”。找到对应的节点模块后点击“安装”按钮。安装完成后需要重启Node-RED服务在运行node-red的命令行终端按CtrlC停止然后重新运行node-red新的节点才会出现在左侧面板中。注意事项Node-RED默认运行在1880端口其Dashboard UI默认运行在1880/ui路径下。如果你需要在局域网内其他设备比如手机或平板上访问这个仪表盘就需要知道运行Node-RED的电脑的IP地址。例如电脑IP是192.168.1.100那么在其他设备的浏览器访问http://192.168.1.100:1880/ui即可。确保电脑的防火墙放行了1880端口的入站连接否则外部设备将无法访问。4. 设备端固件开发与数据发送4.1 核心代码逻辑拆解设备端W5100S-EVB-Pico的Arduino代码核心任务很明确初始化网络、连接服务器、读取传感器数据、定时发送。下面是一个增强版的温控核心代码框架并附上关键点的解释#include SPI.h #include Ethernet.h // 网络配置 - 使用DHCP动态获取IP byte mac[] { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // 自定义MAC地址 IPAddress serverIP(192, 168, 1, 100); // Node-RED服务器的IP地址 int serverPort 9456; // 与Node-RED中TCP输入节点监听的端口一致 EthernetClient client; void setup() { Serial.begin(115200); while (!Serial); // 等待串口连接仅用于调试 // 关键步骤初始化W5100S的片选引脚 Ethernet.init(17); Serial.println(正在通过DHCP获取IP地址...); if (Ethernet.begin(mac) 0) { Serial.println(DHCP失败); // 如果DHCP失败可以回退到静态IP用于调试 // Ethernet.begin(mac, IPAddress(192,168.1.177)); while (true); // halt } Serial.print(本地IP: ); Serial.println(Ethernet.localIP()); delay(1000); // 给网络一点稳定时间 // 尝试连接Node-RED服务器 connectToServer(); } void loop() { // 1. 维持网络连接 if (!client.connected()) { Serial.println(与服务器连接断开尝试重连...); connectToServer(); } // 2. 读取内部温度传感器数据 float temperature readCoreTemperature(); // 3. 构建要发送的数据字符串 // 格式建议为简单的键值对或JSON便于Node-RED解析 String dataString temp String(temperature, 2); // 发送temp27.34格式 // 或者使用JSON格式String dataString {\temp\: String(temperature, 2) }; // 4. 通过TCP连接发送数据 if (client.connected()) { client.println(dataString); // 使用println自动添加换行符作为数据包分隔 Serial.print(已发送: ); Serial.println(dataString); } // 5. 可选读取服务器返回的简单指令如果需要 if (client.available()) { char c client.read(); Serial.write(c); } // 6. 板载LED闪烁指示系统存活 digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); delay(2000); // 每2秒发送一次数据可根据需要调整 } // 读取RP2040内部温度传感器 float readCoreTemperature() { // 注意RP2040的内部温度传感器测量的是芯片温度而非环境温度。 // 它受芯片自身发热影响较大精度一般适用于趋势监控而非精确测量。 float voltage analogReadTemp() * 3.3 / 4096.0; // ADC参考电压为3.3V12位精度 float temperature 27.0 - (voltage - 0.706) / 0.001721; // 根据RP2040数据手册的公式计算 return temperature; } // 连接到TCP服务器的函数 void connectToServer() { Serial.println(尝试连接服务器...); if (client.connect(serverIP, serverPort)) { Serial.println(连接服务器成功); } else { Serial.println(连接失败); } }代码关键点解析MAC地址mac[]数组需要自定义一个唯一的地址。在小型局域网中只要不和现有设备冲突即可。对于量产项目最好使用芯片唯一的ID来生成MAC地址。DHCP与静态IP代码优先使用Ethernet.begin(mac)通过DHCP自动获取IP这在实际部署中最方便。如果网络中没有DHCP服务器如直接连接电脑则需要注释掉这行使用下面那行静态IP配置并确保IP与电脑在同一网段。数据格式代码中使用了client.println(dataString)println会在字符串末尾自动添加换行符\r\n。这个换行符在Node-RED端可以作为消息分隔符这是实现TCP流式数据正确解析的关键。如果发送的是JSON格式Node-RED的JSON节点可以自动解析。温度读取readCoreTemperature()函数使用了RP2040的内部温度传感器。需要注意的是这个传感器位于芯片内部其读数会显著受到CPU负载和自身发热的影响。在长时间运行或CPU繁忙时读数可能比环境温度高出10-20°C。因此它更适合用于监控芯片本身的发热状况而非精确的环境温度测量。如需测量环境温度应连接外部的DS18B20、DHT22等专用传感器。4.2 网络连接稳定性优化在实际部署中网络连接可能因各种原因中断。上述基础代码中的重连逻辑比较简单。为了增强鲁棒性可以实施以下优化策略增加重连延迟与次数限制在connectToServer()失败后不要立即重试应加入一个递增的延迟例如使用指数退避算法避免在服务器暂时不可用时疯狂重连浪费资源。定期维护连接即使连接看似正常长时间空闲也可能被中间路由器或防火墙断开。可以在loop()中每隔一段时间如30秒发送一个很小的“心跳”数据包如ping或者利用client.connected()的状态在空闲时主动调用client.available()来保持TCP连接活性。错误分类处理区分不同的错误类型。例如client.connect失败可能是服务器IP错误或端口未开放client.connected()变为false可能是网络中间断开。针对不同错误可以输出不同的日志信息便于排查。看门狗定时器对于要求高可靠性的应用可以启用RP2040的硬件看门狗。在网络连接持续失败导致系统可能进入不可预测状态时看门狗超时复位整个系统是一个终极的恢复手段。5. Node-RED流设计与仪表盘构建5.1 创建并配置数据接收流回到Node-RED的编辑器界面http://127.0.0.1:1880我们将创建一个完整的流来处理来自开发板的数据并展示。首先从左侧节点面板拖拽一个tcp in节点到工作区。双击它进行配置Server选择“Listen on”表示本节点作为TCP服务器。Port填入9456与Arduino代码中的serverPort一致。Output选择“a single message”这样每收到一个以换行符结尾的字符串就会触发一次消息。这正好对应我们代码中的client.println()。然后我们需要解析接收到的数据。因为发送的是temp27.34这样的字符串拖拽一个function节点将其连接到tcp in节点之后。双击function节点编写解析函数// 假设msg.payload是 temp27.34 var str msg.payload.toString().trim(); // 转换为字符串并去除首尾空白 var parts str.split(); // 按等号分割 if (parts.length 2 parts[0] temp) { // 成功解析出温度值 msg.payload { topic: core_temperature, payload: parseFloat(parts[1]) // 将字符串转换为浮点数 }; return msg; } else { // 数据格式错误可以丢弃或发送到调试窗口 node.warn(Invalid data format: str); return null; // 返回null表示丢弃此消息 }这个函数的作用是将原始的字符串消息转换成一个JavaScript对象。这个对象通常包含topic主题用于区分不同类型的数据和payload有效载荷即温度数值属性便于后续节点处理。提示在function节点中msg是流入的消息对象你必须返回一个或多个msg对象数据才会继续向下游节点流动。如果返回null则消息流在此终止。这对于过滤无效数据非常有用。5.2 设计并部署可视化仪表盘数据解析完成后就可以将其送入Dashboard组件了。从左侧面板的“dashboard”组中拖拽一个gauge节点和一个chart节点到工作区并将它们都连接到function节点的输出。首先配置仪表盘组和标签页。在部署任何UI组件前需要先创建它们的容器。点击Node-RED右上角的“仪表盘”图标或通过菜单访问进入Dashboard的布局编辑器。在这里你可以创建多个标签页Tab在每个标签页内创建多个组Group。组是UI组件的容器决定了组件在页面上的排列位置。例如你可以创建一个名为“Pico监控”的标签页然后在里面创建一个名为“核心温度”的组。回到流程编辑器双击gauge节点进行配置Group选择你刚才创建的“核心温度”组。Size选择仪表的大小例如“1x1”。Label设置为“芯片温度”。Units设置为“°C”。Range设置仪表的最小值、最大值和分段。例如对于芯片温度可以设为Min:0, Max:80并分为3段0-40绿色40-60黄色60-80红色。接着配置chart节点Group同样选择“核心温度”组。可以将其尺寸设置为“2x1”或更大以显示更长时间的趋势。Label设置为“温度变化趋势”。X-axis时间轴通常保持默认。Y-axis设置合理的温度范围如Min:0, Max:80。Interpolate选择“linear”线性插值让曲线更平滑。所有节点配置完成后点击右上角红色的“部署”按钮。这是关键一步只有部署后你对流的修改包括Dashboard布局才会真正生效。部署成功后打开浏览器访问http://你的电脑IP:1880/ui就能看到刚刚创建的仪表盘了。当W5100S-EVB-Pico开始发送数据仪表盘上的指针和图表就会实时更新。6. 项目扩展与高级应用场景6.1 接入多传感器与数据融合单一的温度数据展示只是起点。W5100S-EVB-Pico拥有多个GPIO和通信接口I2C, SPI, UART可以轻松扩展各类传感器。例如通过I2C接口连接一个BME280传感器可以同时获取温度、湿度和气压数据。在Arduino代码中你需要引入对应的传感器库如Adafruit_BME280。在loop()中读取所有传感器数据。构建一个包含多字段的数据包。强烈建议使用JSON格式因为它结构清晰易于扩展和解析。// 在loop()中构建JSON字符串 String jsonData {; jsonData \core_temp\: String(coreTemp, 2) ,; jsonData \env_temp\: String(bme.readTemperature(), 2) ,; jsonData \humidity\: String(bme.readHumidity(), 2) ,; jsonData \pressure\: String(bme.readPressure() / 100.0F, 2); jsonData }; client.println(jsonData);在Node-RED端相应的function节点解析代码也需要升级使用JSON.parse()来解析整个对象然后为每个数据项创建独立的msg对象分别发送给不同的Gauge或Chart节点。你甚至可以使用switch节点根据topic来分流数据或者使用function节点计算露点、热指数等衍生数据。6.2 实现数据持久化与历史查询Node-RED的仪表盘主要展示实时数据。如果需要记录历史数据以供查询和分析就需要引入数据库。Node-RED社区提供了连接多种数据库的节点如MySQL、SQLite、InfluxDB、MongoDB等。以轻量级的SQLite为例你可以安装node-red-node-sqlite节点。在流中在解析数据的function节点后并联一个sqlite节点配置好数据库文件路径并编写INSERT语句将每条数据附带时间戳存入表中。这样所有历史数据就被持久化保存了。更进一步你可以在Dashboard中增加一个Template节点编写简单的HTML/JavaScript代码通过HTTP API从Node-RED自定义接口或直接查询数据库实现一个按时间范围查询历史数据并绘制更复杂图表的功能页面。这便将项目从一个简单的实时监控看板升级为了一个具备基本数据分析能力的小型系统。6.3 添加报警与通知功能监控系统的价值不仅在于展示更在于预警。Node-RED可以轻松实现报警逻辑。例如在解析温度数据的function节点后连接一个switch节点设置规则msg.payload 60假设60°C为报警阈值。当条件满足时触发下游的报警动作。报警动作可以多种多样Dashboard UI报警连接一个ui_toast节点在网页上弹出醒目的警告通知。电子邮件报警安装node-red-node-email节点配置SMTP服务器信息在触发报警时发送邮件到指定邮箱。即时通讯软件报警通过安装第三方节点可以集成Telegram、钉钉、企业微信等平台的机器人实现消息推送。本地声光报警甚至可以反向控制硬件通过一个tcp out节点当报警触发时向W5100S-EVB-Pico发送一个特定的指令如ALARMON设备端收到后控制一个GPIO引脚点亮LED或驱动蜂鸣器。7. 常见问题排查与调试技巧7.1 网络连接类问题问题1W5100S-EVB-Pico无法获取IP地址串口输出“DHCP失败”。排查思路物理连接首先确认网线已牢固插入板卡和路由器/交换机。观察板载的以太网接口LED通常有黄绿两个是否亮起绿色常亮表示链路正常黄色闪烁表示有数据活动。DHCP服务器确认你的路由器DHCP功能已开启并且有可分配的IP地址池。可以尝试将电脑设置为自动获取IP看能否正常上网以验证网络环境。代码配置检查MAC地址是否有可能与网络中其他设备冲突。尝试修改mac[]数组中的最后一位。如果问题依旧可以暂时改用静态IP配置代码中已注释直接指定一个与路由器同网段且未被占用的IP测试硬件和基础连接是否正常。硬件与库确认Ethernet.init(17);这行代码已添加。检查是否安装了正确的WIZnet Ethernet库而非Arduino标准库。问题2设备能获取IP但无法连接Node-RED服务器client.connect失败。排查思路IP与端口双重确认Arduino代码中的serverIP和serverPort是否与运行Node-RED的电脑的IP地址、以及Node-RED中tcp in节点配置的端口完全一致。注意电脑在局域网中的IP可能变动。防火墙这是最常见的原因。在运行Node-RED的电脑上检查防火墙设置确保允许入站连接访问9456端口。在Windows上可以在“高级安全Windows Defender防火墙”中添加入站规则。服务器状态确认Node-RED服务正在运行并且包含tcp in节点的流已经成功部署。可以在Node-RED的调试侧边栏查看tcp in节点是否有“已启动监听”的日志。网络可达性在设备端尝试用client.connect去连接一个已知的公共网络服务如连接TCP端口80访问一个网站以排除设备端网络出口的问题。7.2 数据流与可视化类问题问题3Node-RED能收到连接但debug节点看不到数据或数据格式错误。排查思路调试节点在tcp in节点后立刻连接一个debug节点将其输出设置为“完整的消息对象”。部署后查看调试窗口。如果能看到msg.payload是乱码或非预期内容说明数据传输本身可能就有问题如编码问题。数据分隔符确认设备端发送数据时是否使用了换行符println。tcp in节点的“Output”设置为“a single message”时正是依赖换行符来分割数据流的。如果设备端使用print而不是println数据会堆积在缓冲区直到缓冲区满或连接关闭才一次性送达导致无法解析。解析函数仔细检查function节点中的解析代码。特别是字符串处理trim(),split()和类型转换parseFloat()。可以在解析函数内部使用node.warn()输出中间变量辅助调试。问题4Dashboard网页能打开但仪表盘不更新数据。排查思路数据链路从tcp in到gauge/chart节点的连线是否完整确保每个节点的右下角显示的是实心蓝点表示已部署且无错误而不是空心灰点或警告三角。Dashboard配置检查gauge和chart节点的配置尤其是“Group”是否选择正确。如果Group配置错误组件可能被放到了另一个标签页或根本未显示。数据格式确认流入gauge节点的msg.payload是一个数字而不是字符串或对象。如果msg.payload是{“value”: 25.5}仪表盘是无法直接显示的。你需要确保function节点输出的是类似msg.payload 25.5这样的纯数字或者配置gauge节点从msg.payload.value中读取值。浏览器缓存尝试打开浏览器无痕模式访问Dashboard页面或强制刷新页面CtrlF5。7.3 系统稳定性与性能优化问题5运行一段时间后设备或Node-RED连接断开。排查思路TCP保活在Node-RED的tcp in节点配置中可以尝试设置“Keep-alive”选项。在设备端如前所述实现定期发送心跳包或数据的逻辑。内存泄漏检查设备端代码确保没有在loop()中不断创建新的String对象或大型缓冲区这可能导致内存耗尽而崩溃。对于要重复使用的字符串尽量在全局或静态区声明。看门狗复位如果设备完全死机考虑启用RP2040的看门狗定时器作为最后保障。Node-RED流优化避免在function节点中进行非常耗时的同步操作如复杂的循环计算、同步文件读写。对于复杂操作应使用异步模式或将任务拆分。问题6当传感器数据变化很快时Dashboard图表卡顿或数据点丢失。排查思路发送频率降低设备端的数据发送频率增大delay。对于大多数监控场景1-5秒的间隔已经足够过高的频率会给网络、Node-RED和浏览器带来不必要的压力。图表采样Node-RED的chart节点本身有数据采样机制当数据点过于密集时它会自动进行抽样绘制以保持性能。你可以在图表节点的配置中调整“采样”设置。数据聚合如果确实需要高频数据用于分析但不要求全部实时展示可以在Node-RED流中增加一个function节点对短时间内收到的数据进行聚合如计算平均值、最大值、最小值然后将聚合后的结果再发送给图表节点这样可以大幅减少渲染压力。

相关新闻