文章目录
- 前言
- 一、温度数采集
- 二、Node-red流程
- 1.串口
- 2.数据解析
- 3.设置Dashboard
- 3.流程图
- 三、效果展示
前言
本文使用SHT40温湿度模块、ESP32S3实现温湿度数据采集,通过串口发送给计算机,使用Node-red Dashboard进行展示,可以在局域网任意计算机类设备上显示温湿度。其中ESP32S3可替换位任何MCU;计算机操作系统为WIN11,可替换为树莓派等其他可以运行Node-red的设备。
一、温度数采集
温度数采集的介绍在另外一篇文章中:Arduino开发ESP32 S3(二):使用库读取SHT40温湿度,此处不再赘述。ESP32S3串口输出的数据如下,Node-red只需要处理这些数据就可以了。
二、Node-red流程
注意:流程的编写描述了实现方法的大致过程,没有逐步的详细描写,需阅读这一部分要有Node-red基础。
1.串口
加入serial in 和serial out节点,串口配置如下:
注意:每个计算机识别串口不同,需要替换。
2.数据解析
加入function节点将输出设为2个,一个为温度数据、一个为湿度数据。
解算从串口收到的数据。
代码如下:
let data = msg.payload.toString(); // 将 Buffer 数据转换为字符串
node.warn(data); // 输出数据以便调试
let temperature = null;
let humidity = null;
// 使用正则表达式提取温度和湿度
let tempMatch = data.match(/Temperature:\s*([\d\.]+)/);
let humMatch = data.match(/Humidity:\s*([\d\.]+)/);
if (tempMatch) {
temperature = parseFloat(tempMatch[1]);
// 校准温度数据:加上 10 度
temperature = temperature - 5
; // 调整温度高 10 度
// 保留两位小数
temperature = temperature.toFixed(2);
}
if (humMatch) {
humidity = parseFloat(humMatch[1]);
// 保留两位小数
humidity = humidity.toFixed(2);
}
// 创建两个消息对象
let msg1 = { payload: temperature }; // 包含校准后的温度数据
let msg2 = { payload: humidity }; // 包含湿度数据
// 输出数据以调试
node.warn("Temperature (calibrated): " + temperature);
node.warn("Humidity: " + humidity);
// 返回两个消息对象
return [msg1, msg2];
3.设置Dashboard
在流程中添加两个gauge节点,一个命名为温度,一个命名为湿度,配置如下:
3.流程图
三、效果展示
在手机上查看温湿度(需要连接ESP32 S3的计算机和手机在同一个WIFI网络下)。