ESP32-WROOM-32E + Node-RED实战:5分钟搞定物联网数据面板(附完整代码)
ESP32-WROOM-32E Node-RED实战5分钟搞定物联网数据面板附完整代码每次看到那些炫酷的物联网数据大屏你是不是总觉得背后藏着复杂的代码和漫长的开发周期其实用ESP32-WROOM-32E这块国民级开发板配合Node-RED这个可视化工具搭建一个实时数据面板的速度可能比你泡一杯咖啡还快。今天我们就来抛开那些繁琐的理论直接上手用最少的代码和最简单的步骤从零开始构建一个能实时显示传感器数据、并能远程控制设备的物联网仪表盘。无论你是刚接触硬件的爱好者还是想快速验证产品原型的开发者这套组合拳都能让你在极短时间内看到成果。1. 硬件准备与ESP32基础环境搭建在开始连线之前我们先明确一下核心组件。ESP32-WROOM-32E是一款功能强大且性价比极高的Wi-Fi 蓝牙双模模组它内置了丰富的外设接口足以应对大多数物联网传感和控制需求。你手头需要准备的物料非常简单ESP32-WROOM-32E开发板或其兼容板如NodeMCU-32SUSB数据线用于供电和编程一台电脑Windows, macOS 或 Linux 均可网络环境ESP32和运行Node-RED的电脑需要在同一局域网或能通过互联网互通1.1 安装Arduino IDE与ESP32开发板支持我们将使用最经典的Arduino IDE来为ESP32编写固件。首先前往Arduino官网下载并安装最新版的IDE。安装完成后打开IDE进入“文件” - “首选项”。在“附加开发板管理器网址”中填入以下网址https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json然后打开“工具” - “开发板” - “开发板管理器”搜索“esp32”。找到由Espressif Systems提供的“esp32”平台点击安装。这个过程可能会花费一些时间取决于你的网络速度。安装完成后在“工具” - “开发板”列表中就能选择“ESP32 Wrover Module”或类似的型号。端口选择你连接ESP32后出现的串口。1.2 连接硬件与基础测试为了演示我们假设一个最简单的场景读取开发板内置的霍尔传感器用于检测磁场变化数值并控制板载的LED灯通常连接在GPIO2上。这样我们无需任何外部传感器就能完成数据采集和控制的闭环。首先让我们写一个简单的测试程序确保ESP32能正常工作并连接Wi-Fi。将以下代码上传到你的ESP32开发板。请务必将your_SSID和your_PASSWORD替换成你实际的Wi-Fi名称和密码。// ESP32基础连接测试 #include WiFi.h const char* ssid your_SSID; const char* password your_PASSWORD; void setup() { Serial.begin(115200); pinMode(2, OUTPUT); // 初始化板载LED引脚GPIO2为输出模式 // 连接Wi-Fi WiFi.begin(ssid, password); Serial.print(Connecting to WiFi); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); digitalWrite(2, !digitalRead(2)); // 连接过程中LED闪烁 } Serial.println(\nConnected!); Serial.print(IP Address: ); Serial.println(WiFi.localIP()); digitalWrite(2, HIGH); // 连接成功后LED常亮 } void loop() { // 主循环暂时空置仅用于连接测试 delay(1000); }上传成功后打开串口监视器波特率设置为115200你应该能看到ESP32成功连接到网络并打印出它的本地IP地址。记下这个IP地址后续在Node-RED中可能会用到。2. 五分钟部署Node-RED与DashboardNode-RED的安装比想象中简单得多。它是一个基于Node.js的流编程工具我们将主要使用其强大的Dashboard节点库来构建UI。2.1 一键安装Node-RED如果你的电脑上还没有Node.js需要先安装它。访问Node.js官网下载LTS版本的安装包运行安装程序即可。安装完成后打开终端或命令提示符输入以下命令来全局安装Node-REDnpm install -g --unsafe-perm node-red注意在某些系统如Windows上可能需要以管理员权限运行终端。如果安装过程因网络问题缓慢或失败可以尝试配置npm的国内镜像源例如npm config set registry https://registry.npmmirror.com。安装完成后直接在终端中输入node-red并回车即可启动Node-RED服务。你会看到类似下面的日志输出其中包含了访问地址通常是http://127.0.0.1:1880。Welcome to Node-RED ... Server now running at http://127.0.0.1:1880/打开浏览器访问这个地址你就进入了Node-RED的流程编辑器界面。2.2 安装Dashboard节点库Node-RED默认的节点并不包含我们需要的UI组件。我们需要安装node-red-dashboard这个第三方节点库。在Node-RED编辑器的右上角点击菜单图标三条横线选择“节点管理”。在打开的窗口中切换到“安装”标签页在搜索框中输入“dashboard”找到node-red-dashboard并点击“安装”。安装完成后点击右上角的“部署”按钮。安装成功后左侧节点面板会出现一个名为“dashboard”的新分组里面包含了图表、按钮、滑块、文本显示等各种UI组件。2.3 创建你的第一个数据面板现在让我们用3分钟创建一个最简单的面板。从左侧节点栏拖拽以下节点到工作区一个inject节点位于“输入”分组用于定时触发数据流。一个function节点位于“功能”分组用于生成模拟的传感器数据。一个chart节点位于“dashboard”分组用于绘制折线图。一个gauge节点位于“dashboard”分组用于显示仪表盘。双击inject节点将其设置为每2秒重复注入一个时间戳。双击function节点输入以下代码来生成一个模拟的随机温度值范围20-30度// 生成模拟温度数据 msg.payload (Math.random() * 10 20).toFixed(2); // 生成20.00到30.00之间的随机数 return msg;分别双击chart和gauge节点在配置面板的“Group”一栏点击右侧的铅笔图标新建一个Dashboard组例如命名为“环境监控”并新建一个Tab页例如命名为“主页”。这样这两个UI组件就会被归类到同一个面板组里。最后用连线将这些节点依次连接起来inject-function-chart和gauge。点击右上角的红色“部署”按钮。部署完成后在浏览器中访问http://127.0.0.1:1880/ui一个实时更新的温度监控面板就诞生了整个过程甚至不需要写一行前端代码。3. 打通ESP32与Node-REDMQTT通信实战要让ESP32的数据在Node-RED的面板上显示我们需要一个通信桥梁。MQTT协议是物联网领域轻量级的“普通话”非常适合这种场景。我们不需要搭建复杂的MQTT服务器可以使用一个公共的测试Broker或者在本机用Docker快速启动一个。3.1 在Node-RED中配置MQTT输入假设我们使用公共Brokertest.mosquitto.org仅用于测试生产环境请使用私有服务。在Node-RED编辑器中从左侧拖入一个mqtt in节点。双击它进行配置Server: 点击铅笔图标添加一个新服务器。Server:test.mosquitto.orgPort:1883(非加密端口)Topic: 填写一个你想要订阅的主题例如esp32/sensor/data。点击“更新”然后“完成”。这个节点就准备好接收来自该主题的消息了。3.2 编写ESP32的MQTT发布代码接下来我们需要让ESP32将数据发布到同一个MQTT主题。在Arduino IDE中你需要安装PubSubClient库。可以通过“工具” - “管理库...”搜索并安装。然后使用以下完整的示例代码替换之前的测试程序。这段代码实现了连接Wi-Fi和MQTT服务器每5秒读取一次内部霍尔传感器数值和芯片温度并将这些数据以JSON格式发布到指定主题。#include WiFi.h #include PubSubClient.h #include ArduinoJson.h // WiFi 凭证 const char* ssid your_SSID; const char* password your_PASSWORD; // MQTT Broker 配置 const char* mqtt_broker test.mosquitto.org; const int mqtt_port 1883; const char* topic_pub esp32/sensor/data; WiFiClient espClient; PubSubClient client(espClient); unsigned long lastMsgTime 0; const long interval 5000; // 发布间隔5秒 void setup_wifi() { delay(10); Serial.println(); Serial.print(Connecting to ); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(\nWiFi connected); Serial.print(IP address: ); Serial.println(WiFi.localIP()); } void reconnect() { while (!client.connected()) { Serial.print(Attempting MQTT connection...); String client_id esp32-client- String(WiFi.macAddress()); if (client.connect(client_id.c_str())) { Serial.println(connected); } else { Serial.print(failed, rc); Serial.print(client.state()); Serial.println( try again in 5 seconds); delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_broker, mqtt_port); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); unsigned long now millis(); if (now - lastMsgTime interval) { lastMsgTime now; // 模拟读取传感器数据实际项目中替换为真实传感器代码 float hall_value hallRead(); // 读取内部霍尔传感器值 float temp_value temperatureRead(); // 读取内部温度传感器值注意此函数可能因芯片型号和Arduino核心版本而异 // 创建JSON文档 StaticJsonDocument200 doc; doc[device_id] WiFi.macAddress(); doc[hall] hall_value; doc[temperature] temp_value; doc[rssi] WiFi.RSSI(); // 序列化JSON到字符串 char json_buffer[200]; serializeJson(doc, json_buffer); // 发布消息 client.publish(topic_pub, json_buffer); Serial.print(Message published: ); Serial.println(json_buffer); } }提示temperatureRead()函数在某些ESP32核心库中可能需要额外配置或不可用。如果编译出错可以将其替换为一个模拟的随机温度值例如float temp_value 25.0 (random(0, 100) / 100.0);这并不影响我们演示通信流程。将代码中的Wi-Fi信息修改正确后上传到ESP32。打开串口监视器你应该能看到它成功连接MQTT Broker并定期发布JSON数据。3.3 在Node-RED中解析并显示数据回到Node-RED我们将刚才创建的mqtt in节点与UI组件连接起来。但MQTT节点输出的msg.payload是JSON字符串我们需要先解析它。在mqtt in节点后拖入一个json节点位于“功能”分组它负责将字符串自动解析为JavaScript对象。在json节点后拖入一个function节点。双击它输入以下代码来提取我们需要的字段并分配给不同的输出。这里我们创建了两个输出分别对应霍尔值和温度值。// 解析传感器数据并分配输出 var hall msg.payload.hall; var temp msg.payload.temperature; // 输出1霍尔传感器数据 var msg1 { payload: hall, topic: hall }; // 输出2温度数据 var msg2 { payload: temp, topic: temp }; return [msg1, msg2];将这个function节点的两个输出分别连接到之前创建好的chart节点和gauge节点你可能需要调整或新建UI节点来匹配数据。记得在UI节点的配置中将“Value Format”设置为{{value}}并可以添加单位如{{value}} °C。点击“部署”。现在刷新你的Dashboard页面 (http://127.0.0.1:1880/ui)。你应该能看到来自真实ESP32开发板的传感器数据正在实时更新到图表和仪表盘上。至此一个完整的、从硬件采集到云端可视化的物联网数据流已经跑通。4. 进阶双向交互与面板功能强化数据显示只是基础一个完整的控制面板还需要能反向控制设备。我们来实现通过Node-RED Dashboard上的按钮控制ESP32的板载LED。4.1 在Node-RED中创建控制界面从Dashboard节点栏拖拽一个button节点到工作区。双击配置将其分配到之前创建的“环境监控”组。将“Label”设置为“LED开关” “Payload”类型选择“JSON”并设置{led:1}表示开{led:0}表示关。你可以创建两个按钮也可以使用一个带切换功能的按钮。拖入一个mqtt out节点。双击配置连接到同一个test.mosquitto.org服务器但主题设置为另一个例如esp32/led/control。将button节点连接到mqtt out节点。4.2 修改ESP32代码以订阅控制指令我们需要修改ESP32的代码使其同时订阅控制主题并根据收到的JSON指令来操作GPIO2的LED。在ESP32的setup()函数中在MQTT连接成功后添加订阅代码client.subscribe(esp32/led/control);然后添加一个回调函数来处理接收到的消息。在setup()函数前或后定义此函数并在setup()中用client.setCallback(callback);进行设置。void callback(char* topic, byte* payload, unsigned int length) { Serial.print(Message arrived on topic: ); Serial.println(topic); Serial.print(Message: ); for (int i 0; i length; i) { Serial.print((char)payload[i]); } Serial.println(); // 尝试解析JSON StaticJsonDocument100 doc; DeserializationError error deserializeJson(doc, payload, length); if (error) { Serial.print(deserializeJson() failed: ); Serial.println(error.c_str()); return; } // 检查并控制LED if (doc.containsKey(led)) { int led_state doc[led]; digitalWrite(2, led_state); // 控制GPIO2 Serial.print(LED set to: ); Serial.println(led_state); } }将修改后的代码上传到ESP32。现在当你点击Node-RED Dashboard上的按钮时ESP32的板载LED就会随之点亮或熄灭。4.3 面板布局优化与多数据源整合一个专业的仪表盘离不开清晰的布局。Node-RED Dashboard的“Group”配置非常灵活你可以通过设置“Width”和“Height”来调整UI组件的大小和排列方式。例如可以将图表设置为“6 wide”将仪表盘设置为“3 wide”让它们并排显示。组件类型推荐宽度用途说明图表 (Chart)6 或 8显示历史趋势数据适合放在面板上方。仪表盘 (Gauge)3 或 4突出显示当前关键数值如实时温度、压力。文本显示 (Text)2 或 3显示状态信息如IP地址、连接状态。按钮/开关 (Button/Switch)2用于发送控制指令可集中放在一个控制区域。此外你可以在一个流程中接入多个数据源。例如除了ESP32你还可以用同样的mqtt in节点订阅其他设备或模拟数据源的主题经过function节点处理后统一呈现在同一个Dashboard的不同Tab页或不同小组件中轻松构建一个集中监控中心。最后当你完成整个流程的开发后可以通过Node-RED编辑器右上角的“导出”功能将你的流程包括所有节点配置保存为一个JSON文件。这份文件就是你的“完整代码”可以分享给他人或在不同环境中一键导入恢复真正实现了项目的快速迁移和复用。

相关新闻

AI辅助开发:让快马AI成为你的助手,智能调试与优化openclaw本地部署

AI辅助开发:让快马AI成为你的助手,智能调试与优化openclaw本地部署

最近在折腾一个叫openclaw的模型,想把它部署到本地机器上跑起来。这个过程,怎么说呢,既充满探索的乐趣,又时不时被各种“坑”绊一下脚。从环境配置、模型加载到推理优化,每一步都可能遇到意想不到的问题。传统的调试方…

2026/7/4 11:33:17 阅读更多 →
避开坑!欧姆龙PLC的Fins UDP与CIP协议对比:以NJ1P2读写操作为例

避开坑!欧姆龙PLC的Fins UDP与CIP协议对比:以NJ1P2读写操作为例

避开坑!欧姆龙PLC的Fins UDP与CIP协议对比:以NJ1P2读写操作为例 最近在做一个产线数据采集项目,客户现场有几台欧姆龙的NJ1P2控制器,需要把里面的生产参数和状态实时上传到MES系统。一开始想着用最常见的FINS/TCP,结果…

2026/7/2 22:02:17 阅读更多 →
VideoAgentTrek-ScreenFilter创新实践:直播切片中主播操作屏幕区域定位

VideoAgentTrek-ScreenFilter创新实践:直播切片中主播操作屏幕区域定位

VideoAgentTrek-ScreenFilter创新实践:直播切片中主播操作屏幕区域定位 1. 引言:从直播切片到精准定位的挑战 如果你经常刷短视频,一定见过这样的内容:一个游戏主播正在激烈操作,屏幕上突然弹出“精彩操作”的提示&a…

2026/7/4 21:08:07 阅读更多 →

最新新闻

Axure RP终极汉化指南:3分钟让你的英文界面变中文

Axure RP终极汉化指南:3分钟让你的英文界面变中文

Axure RP终极汉化指南:3分钟让你的英文界面变中文 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英…

2026/7/6 7:15:06 阅读更多 →
工业级条码扫描系统架构与核心技术解析

工业级条码扫描系统架构与核心技术解析

1. 工业级条码扫描系统架构解析LV30条码扫描器与MKV42F64VLH16微控制器的组合,构成了一个完整的工业级条码识别解决方案。这套系统在硬件设计上采用了模块化架构,主要包含三个核心部分:光学采集模块:LV30扫描器采用1/3英寸全局快门…

2026/7/6 7:13:06 阅读更多 →
STM32F439ZG驱动RGB灯带实现智能灯光控制系统

STM32F439ZG驱动RGB灯带实现智能灯光控制系统

1. 项目概述:用智能灯光打造沉浸式空间体验这个项目的核心目标是通过IN-PC55TBTRGB全彩LED灯带和STM32F439ZG高性能微控制器的组合,将普通空间转化为动态光影艺术装置。作为一名嵌入式开发工程师,我最近完成了这个智能灯光控制系统的完整实现…

2026/7/6 7:11:06 阅读更多 →
基于CEC1302与IN-PC55TBTRGB的环境光效系统设计

基于CEC1302与IN-PC55TBTRGB的环境光效系统设计

1. IN-PC55TBTRGB与CEC1302的硬件组合解析这个项目核心在于利用IN-PC55TBTRGB可编程RGB LED和CEC1302控制器,打造沉浸式环境照明系统。IN-PC55TBTRGB是Inolux推出的5x5mm可寻址RGB LED模块,采用串行移位寄存器设计,支持逐颗编程控制。实测单个…

2026/7/6 7:11:06 阅读更多 →
基于MC6470 IMU与dsPIC30F4011的运动控制系统设计

基于MC6470 IMU与dsPIC30F4011的运动控制系统设计

1. 项目背景与核心器件选型在工业自动化和机器人控制领域,精确的运动控制和位置感知一直是核心技术挑战。MC6470作为一款6自由度(6DOF)惯性测量单元(IMU),集成了三轴加速度计和三轴陀螺仪,能够提供高精度的运动追踪数据。而dsPIC30F4011是Mic…

2026/7/6 7:09:05 阅读更多 →
N_m3u8DL-RE流媒体下载:3个实用技巧轻松搞定在线视频保存

N_m3u8DL-RE流媒体下载:3个实用技巧轻松搞定在线视频保存

N_m3u8DL-RE流媒体下载:3个实用技巧轻松搞定在线视频保存 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE…

2026/7/6 7:07:05 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻