Node-red 网络温湿度计


前言

本文使用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网络下)。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值