【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器,获取并显示当前环境温湿度数据(I2C)
今天,我们开始第三个专题:连接SHT30温湿度传感器模块,获取当前环境实时温湿度数据,并显示在1.3寸TFT液晶显示屏上。
第一专题内容,请参考
【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计-CSDN博客
第二专题内容,请参考
【NodeMCU实时天气时钟温湿度项目 2】WIFI模式设置及连接-CSDN博客
一、硬件需求——温湿度传感器模块SHT3X系列
SHT3x DIS是Sensirion‘s新一代温度和湿度传感器。它建立在一个新的CMOSens®传感器芯片上,该芯片是Sensirion‘s新的湿度和温度平台的核心。与前代相比,SHT3x DIS具有更高的智能性、可靠性和更高的精度规格。它的功能包括增强的信号处理、两个独特的用户可选择的 I2C 地址和高达1MHz的通信速率。
DFN封装规格为为 2.5mm x 2.5mm x 0.9mm(Height),这就很方便将SHT3x DIS集成到各种应用中。另外,2.4伏至5.5伏的宽电源电压范围保证了与各种组装情况的兼容性。
总之,SHT3x DIS融合了作为湿度传感器行业的领导者Sensirion‘s15年来丰富的经验沉淀。
SHT30-31-35资料:点击下载, 提取码:369r。
本项目采用的型号为:SHT30
二、硬件连接关系
NodeMCU | 3V3 | GND | D1 | D2 |
SHT30 | vcc | gnd | scl | sda |
三、添加ClosedCube SHT31D库
ClosedCube SHT31D,是支持 Sensirion SHT30-D, SHT31-D and SHT35-D温湿度传感器的Arduino框架库,适用于I2C接口。
方法:直接打开 PlatformIO 界面,选择 Libraries 图标,在搜索栏内输入 ClosedCube SHT31D,添加到本项目中。
四、ClosedCube SHT31D官方示例代码
//以下代码来源于官方示例 periodicmode.info 的代码
//为了能在[vscode + platformIO]平台正常运行,主要修改了三个位置的代码,均已在程序中加注释说明。
//在本项目中,重新定义了 I2C 通信引脚#include <Wire.h>
#include "ClosedCube_SHT31D.h"ClosedCube_SHT31D sht3xd;// 新增: 定义 I2C 引脚
const int SHT_SCL = D1;
const int SHT_SDA = D2;void printResult(String text, SHT31D result) ; //新增:函数预先声明void setup()
{//Wire.begin();----------这行是原代码,已加注释标志//定义I2C通讯的引脚Wire.begin(SHT_SDA, SHT_SCL);//新增:替换上一行代码,主要是定义启用I2C引脚Serial.begin(9600);Serial.println("ClosedCube SHT3X-D Periodic Mode Example");Serial.println("supports SHT30-D, SHT31-D and SHT35-D");sht3xd.begin(0x44); // I2C address: 0x44 or 0x45Serial.print("Serial #");Serial.println(sht3xd.readSerialNumber());if (sht3xd.periodicStart(SHT3XD_REPEATABILITY_HIGH, SHT3XD_FREQUENCY_10HZ) != SHT3XD_NO_ERROR)Serial.println("[ERROR] Cannot start periodic mode");}void loop()
{printResult("Periodic Mode", sht3xd.periodicFetchData());delay(250);
}void printResult(String text, SHT31D result) {if (result.error == SHT3XD_NO_ERROR) {Serial.print(text);Serial.print(": T=");Serial.print(result.t);Serial.print("C, RH=");Serial.print(result.rh);Serial.println("%");} else {Serial.print(text);Serial.print(": [ERROR] Code #");Serial.println(result.error);}
}
将此代码复制到项目 main.cpp 中,编译上传成后,如果在串口监视器输出如下信息,那就说明 SHT30 温湿度传感器已。
五、在项目中使用SHT30采集温湿度实时数据的代码
使用SHT30采集温湿度实时数据的代码,都封装在 sht30.h 文件中,分别定义了3个函数:
(1)void sht30_setup(),开机时调用,设置SHT30的I2C引脚、地址和工作模式。
(2)void saveResult(SHT31D result),用于保存结果到指定的数据结构,如果传感器断开,则尝试重载。
(3)void sht30(),在主程序/循环体loop中调用。
本程序主要内容,来源于网络大神,如有异议,请及时联系作者。
//********sht30 温湿度传感器***************#include <Wire.h>
#include "ClosedCube_SHT31D.h"
ClosedCube_SHT31D sht3xd;// 配置引脚
const int SHT_SCL = D1;
const int SHT_SDA = D2;const int SHT_ADDRESS = 0x44;//定义保存采集数据结果的数据结构,并设置读取频率struct SHT_DATA{int8_t temperature = -99;int8_t humidity = -99;unsigned long sht30_last = 0;const long sht30_interval = 1000; //每秒读取一次} sht_data;//开机函数
void sht30_setup() {//定义I2C通讯的引脚Wire.begin(SHT_SDA, SHT_SCL);//准备读取sht3x传感器sht3xd.begin(SHT_ADDRESS);if (sht3xd.periodicStart(SHT3XD_REPEATABILITY_HIGH, SHT3XD_FREQUENCY_10HZ) != SHT3XD_NO_ERROR){Serial.println("[ERROR] 读取sht30数据失败,可能是传感器没插好");}
}//保存结果到指定的数据结构,如果传感器断开,则尝试重载
void saveResult(SHT31D result) {if (result.error == SHT3XD_NO_ERROR) {sht_data.temperature = result.t;sht_data.humidity = result.rh;} else { sht_data.temperature = -99;sht_data.humidity = -99;sht30_setup();}
}//循环体函数,放在loop中
void sht30() {unsigned long currentMillis = millis();if (currentMillis - sht_data.sht30_last >= sht_data.sht30_interval) {sht_data.sht30_last = currentMillis;saveResult(sht3xd.periodicFetchData());Serial.print("T:");Serial.print(sht_data.temperature);Serial.print(" H:");Serial.println(sht_data.humidity);}
}
六、运行结果展示
(1) 依据硬件连接关系,在面包板上接入SHT30温湿度传感器;
(2)设置每隔500ms调用一次sht30()函数;
(3)修改主程序 main.cpp 内容,实现在TFT液晶屏显示的目标。
(4)编译上传后,就可以在TFT屏幕上看到实时采集到的温湿度数据了。
(以下视频,是使用吹风机模拟来观察采集显示的结果)
sht30_test
七、项目资源下载
百度网盘下载链接:
https://pan.baidu.com/s/1Rk5OBIxZ-BtUMQqG8TjUag?pwd=vo5t,提取码:vo5t
八、编译不通过的解决办法
本项目需要导入ClosedCube SHT31D库以支持SHT30正常工作。在编译时,您可能会遇到如下图所示的错误信息。
解决方法是, 请将箭头所指方框内的内容修改成: return returnError(error);
return returnError(error);
修改后的内容,如下图所示。再次编译,就可以顺利通过了。
参考资料
1. ClosedCube SHT31D 库源代码
相关文章:

【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器,获取并显示当前环境温湿度数据(I2C)
今天,我们开始第三个专题:连接SHT30温湿度传感器模块,获取当前环境实时温湿度数据,并显示在1.3寸TFT液晶显示屏上。 第一专题内容,请参考 【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计…...

Unity3D DOTween
简单介绍一下 DOTween 插件的使用。 导入插件 先到 Asset Store 获取 DOTween 插件,然后在 Package Manager 的 My Assets 中搜索,下载并导入插件。 导入后,会自动弹出一个窗口,提示需要先对插件进行配置。 点击上图中的按钮&am…...

罗宾斯《管理学》第13版/教材讲解/考研真题视频课程/网课
本课程是罗宾斯《管理学》(第13版)精讲班,为了帮助参加研究生招生考试指定考研参考书目为罗宾斯《管理学》(第13版)的考生复习专业课,我们根据教材和名校考研真题的命题规律精心讲解教材章节内容。 序号名…...
docker-compose启动mysql4.7环境搭建
注意: 下面挂载的目录需要自己创建文件夹比如: /home/dockerInfo/composeInfo/volumes/mysqlVolume/var/log/mysql(数据文件) /home/dockerInfo/composeInfo/volumes/mysqlVolume/var/lib/mysql(日志文件)…...

StarryCoding入门教育赛2 题解 C++代码(推荐学习)
比赛地址:https://www.starrycoding.com/contest/6 比赛介绍 系列赛名称:StarryCoding 入门教育赛难度:语法~较低时长: 1.5 1.5 1.5小时比赛时间:约每2-3天一场,一般为晚上18:30~20:00赛后题解࿱…...

【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
博主打算从0-1讲解下java进阶篇教学,今天教学第九篇:MyBatis-Plus用法介绍。 在 MyBatis-Plus 3.5.0 中,LambdaQueryWrapper支持多种条件构造方式,除了等于(eq)、不等于(ne)、大于&a…...

实时音视频通信的主要矛盾及解决方法
实时音视频通信的主要矛盾及解决方法 实时音视频通信的主要矛盾及解决方法实时音视频通信的主要矛盾矛盾的解决方法增加带宽减少数据量适当增加延时提高网络质量快速准确地评估带宽 总结参考 实时音视频通信的主要矛盾及解决方法 实时音视频通信的主要矛盾 实时音视频通信的主…...
【Delphi 爬虫库 4】使用封装好的 XML 解析库对 XML 数据进行解析
由于官方提供的TXMLDocument组件并不是特别好用,有着体积大,速度慢,调用不方便等缺点。 这里直接利用封装好的XML 解析库来对Xml数据进行解析与生成。 文章目录 1、生成XML文件2、解析XML文件3、生成带注释的XML文件4、删除XML文件节点 1、生…...

Flask简介
Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装 概述 Flask算是小型框架,小到可以称为“微框架”。Flask 非常小,因此你一旦能够熟练使用它,很可能就能读懂它所有的…...

神经网络中的归一化
我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内,以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内,比如[0,1]或者[-1,1],来消除不同特征之间的量纲和取值范围…...

《从Paxos到Zookeeper》——第四、七章:基本概念及原理
目录 第四章 Zookeeper与Paxos 4.1 Zk是什么 4.1.1 Zk特性 4.1.2 Zk基本概念 4.1.2.1 集群角色(Follower, Leader, Observer) 4.1.2.2 数据模型 4.1.2.3 ZNode(数据节点) 4.1.2.4 Session(会话) 4.1.2.5 ACL(Access Control Lists) 4.1.2.6 Watcher(事件…...

网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN
前言 文章主要介绍常见名词以及其在各自领域实现的功能价值。 01 裸纤 裸光纤(裸光纤)由运营商提供,是无中继的光纤线路,仅通过配线架连接。相比传统光纤,裸光纤提供纯粹的物理传输路径,无需额外网…...
MMC设备
MMC(MultiMediaCard)是一种闪存卡标准,用于作为便携式设备上的存储媒介,例如数码相机、智能手机、平板电脑、个人数字助理(PDA)以及其他便携式设备。MMC卡最初是由SanDisk和Siemens AG开发的,并…...

图片浏览器-PicView
一、前言 PicView 是一款适用于 Windows 10 或 11 的快速高效的图像查看器,配备了干净简洁的用户界面,可以在不需要时方便地隐藏。 二、支持类型 它支持广泛的图像文件类型,包括:WEBP、GIF、SVG、PNG、JXL、HEIC、PSD 三、软件特…...
一些零碎小知识
函数递归复习 #define 的头文件包含 #define定义标识符常量 等define其他用法 斐波那契数列 函数栈帧 青蛙跳台问题 汉诺塔问题 字符“0”与0的计算 “0”-“0”0; 最后一次作业题一道 素数 随机数 strand timer rand 水仙花数 变种随鲜花 斐波那契数…...

2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法
文本渲染指令 文本渲染指令-v-html与v-text Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue的模板都是 合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。 在前面,我们一直使用的是字符串插…...

(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型
文章目录 相关资料摘要引言相关工作对比语言图像预训练遥感域专用 CLIP 模型遥感中的多模态 CLIP 启发模型 方法模型算法输入阶段:输出阶段:步骤说明: 第一阶段:通过权重插值修补CLIP将遥感图像模态与自然图像和文本对齐 实验 相关…...
区块链 | 一文了解 NFT 的生态系统(上)
🐶原文: Understanding Security Issues in the NFT Ecosystem 🐶写在前面: 本博客只摘取了原论文的第二、三节。 技术背景知识 在本节中,我们将介绍以太坊生态系统的构建模块,重点关注「NFT,…...
为什么centos官方版不支持arm架构?
为什么centos官方版不支持arm架构? 1、资源限制:CentOS是由社区维护的开源操作系统,其开发和维护需要大量的人力和物力资源。由于ARM架构的设备相对较少,社区资源有限,因此官方版CentOS选择集中精力在x86架构上进行开发…...
awk小尝试2(随手记)
文章目录 需求1解法 需求2解法(3种-grep/sed/awk) 需求1 使用hostname -I创建文件名 echo hostname -I.txt 10.0.0.124 .txt # 需要注意,这里的.txt前有一个空格,需要去掉,不然就是两个文件名解法 echo hostname -I…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...