零知开源——STM32F407VET6驱动SHT41温湿度传感器完整教程

 ✔零知开源是一个真正属于国人自己的开源软硬件平台,在开发效率上超越了Arduino平台并且更加容易上手,大大降低了开发难度。零知开源在软件方面提供了完整的学习教程和丰富示例代码,让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品,测试产品。快来动手试试吧!

✔访问零知开源平台,获取更多实战项目和教程资源吧!

www.lingzhilab.com

目录

一、硬件连接

1.1 硬件清单

 1.2 接线硬件表

1.3 接线实物图

二、软件环境配置

2.1 安装开发工具 

2.2 依赖库

三、核心代码实现

3.1 零知IDE代码驱动 

3.2 核心库函数解析 

3.2.1 Adafruit_SHT4x库 

3.2.2 Adafruit_Sensor库

3.2.3 Adafruit_I2CDevice库

四、常见问题解答

Q1:编译时报错"Adafruit_SHT4x.h: No such file or directory" 

Q2:传感器检测失败("Couldn't find SHT4x") 

Q3:数据读取不稳定或CRC校验失败

Q4:如何提高测量精度?

五、结果显示


项目概述 

        本项目基于STM32F407VET6零知增强板,实现SHT41高精度温湿度传感器的驱动和数据采集。SHT41是Sensirion推出的新一代数字温湿度传感器,具有±0.2°C的温度精度和±1.8%RH的湿度精度,采用I2C接口通信。本教程将展示如何通过STM32F407的硬件I2C接口驱动SHT41,并实现实时温湿度数据的采集与显示。 

一、硬件连接

1.1 硬件清单

         >主控芯片:STM32F407VET6零知增强板

         >传感器:SHT41温湿度传感器 (I2C地址:0x44)

         >杜邦线若干

 1.2 接线硬件表

SHT41引脚零知增强板引脚功能说明
VCC3.3V电源正极
GNDGND电源地
SCL21/SCLI2C时钟线
SDA20/SDAI2C数据线

 注意:I2C总线需要4.7kΩ上拉电阻(开发板通常已内置)

1.3 接线实物图

二、软件环境配置

2.1 安装开发工具 

         零知IDE 3.8.0

         选择开发板零知增强板

2.2 依赖库

  • Adafruit SHT4x Library
  • Adafruit_I2CDevice
  • Adafruit BusIO

三、核心代码实现

3.1 零知IDE代码驱动 

#include "Adafruit_SHT4x.h"
Adafruit_SHT4x sht4 = Adafruit_SHT4x();void setup() {Serial.begin(115200);while (!Serial) delay(10);  // 等待串口初始化// 初始化传感器if (!sht4.begin()) {Serial.println("Sensor not found!");while (1) delay(1);}// 设置高精度模式sht4.setPrecision(SHT4X_HIGH_PRECISION);// 关闭加热器(节能模式)sht4.setHeater(SHT4X_NO_HEATER);
}void loop() {sensors_event_t humidity, temp;sht4.getEvent(&humidity, &temp);  // 读取数据Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" ℃");Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");delay(1000);  // 每秒读取一次
}

3.2 核心库函数解析 

3.2.1 Adafruit_SHT4x库 
bool Adafruit_SHT4x::begin(TwoWire *theWire) {i2c_dev = new Adafruit_I2CDevice(SHT4x_DEFAULT_ADDR, theWire);if (!i2c_dev->begin()) return false;return reset(); // 发送复位命令
}
  1. 功能:初始化I2C通信并复位传感器
  2. 参数:I2C接口指针(默认使用Wire)
  3. 返回值:初始化成功返回true,失败返回false

bool Adafruit_SHT4x::getEvent(sensors_event_t *humidity, sensors_event_t *temp) {// 根据精度和加热器设置选择命令uint8_t cmd = SHT4x_NOHEAT_HIGHPRECISION; uint16_t duration = 10;// 发送测量命令if (!i2c_dev->write(&cmd, 1)) return false;delay(duration); // 等待测量完成// 读取6字节数据(温度+CRC, 湿度+CRC)uint8_t readbuffer[6];if (!i2c_dev->read(readbuffer, 6)) return false;// CRC校验if (readbuffer[2] != crc8(readbuffer, 2) ||readbuffer[5] != crc8(readbuffer + 3, 2)) return false;// 原始数据转换uint16_t temp_raw = (readbuffer[0] << 8) | readbuffer[1];uint16_t hum_raw = (readbuffer[3] << 8) | readbuffer[4];// 转换为实际值_temperature = -45 + 175 * temp_raw / 65535.0;_humidity = -6 + 125 * hum_raw / 65535.0;// 填充传感器事件if (temp) fillTempEvent(temp, millis());if (humidity) fillHumidityEvent(humidity, millis());return true;
}
  1. 功能:获取温湿度数据并填充到事件结构体
  2. 参数:指向温湿度事件结构体的指针
  3. 返回值:成功返回true,失败返回false

static uint8_t crc8(const uint8_t *data, int len) {const uint8_t POLYNOMIAL(0x31);uint8_t crc(0xFF);for (int j = len; j; --j) {crc ^= *data++;for (int i = 8; i; --i) {crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);}}return crc;
}
  1. 功能:计算CRC8校验码
  2. 参数:数据指针和长度
  3. 返回值:CRC8校验值

3.2.2 Adafruit_Sensor库
void Adafruit_SHT4x::fillTempEvent(sensors_event_t *temp, uint32_t timestamp) {memset(temp, 0, sizeof(sensors_event_t));temp->version = sizeof(sensors_event_t);temp->sensor_id = _sensorid_temp;temp->type = SENSOR_TYPE_AMBIENT_TEMPERATURE;temp->timestamp = timestamp;temp->temperature = _temperature;
}
  1. 功能:填充温度事件结构体
  2. 参数:

        temp:目标结构体指针
        timestamp:时间戳

void Adafruit_SHT4x::fillHumidityEvent(sensors_event_t *humidity, uint32_t timestamp) {memset(humidity, 0, sizeof(sensors_event_t));humidity->version = sizeof(sensors_event_t);humidity->sensor_id = _sensorid_humidity;humidity->type = SENSOR_TYPE_RELATIVE_HUMIDITY;humidity->timestamp = timestamp;humidity->relative_humidity = _humidity;
}
  1. 功能:填充湿度事件结构体
  2. 参数:

        humidity:目标结构体指针
        timestamp:时间戳

3.2.3 Adafruit_I2CDevice库
bool Adafruit_I2CDevice::write_then_read(const uint8_t *write_buffer,size_t write_len, uint8_t *read_buffer,size_t read_len, bool stop) {if (!write(write_buffer, write_len, stop)) {return false;}return read(read_buffer, read_len);
}

功能:先写后读的I2C操作(常用模式)
参数:

  • write_buffer:写入数据缓冲区
  • write_len:写入数据长度
  • read_buffer:读取数据缓冲区
  • read_len:读取数据长度
  • stop:是否在写操作后发送停止条件

bool Adafruit_I2CDevice::read(uint8_t *buffer, size_t len, bool stop) {size_t pos = 0;while (pos < len) {size_t read_len = min(len - pos, _maxBufferSize);bool read_stop = (pos + read_len >= len) ? stop : false;if (!_read(buffer + pos, read_len, read_stop))return false;pos += read_len;}return true;
}

功能:从I2C设备读取数据
参数:

  • buffer:数据缓冲区
  • len:读取长度
  • stop:是否发送停止条件

四、常见问题解答

Q1:编译时报错"Adafruit_SHT4x.h: No such file or directory" 

A:解决方法

检查是否安装了依赖库(Adafruit BusIO) 

Q2:传感器检测失败("Couldn't find SHT4x") 

A:排查步骤

  1. 检查硬件连接(VCC、GND、SCL、SDA)
  2. 确认I2C地址正确(SHT41默认为0x44)
  3. 使用I2C扫描工具确认设备地址
  4. 检查上拉电阻(4.7kΩ) 

Q3:数据读取不稳定或CRC校验失败

A:解决方案

  1. 降低I2C时钟速度
  2. 缩短I2C总线长度
  3. 尝试不同的精度模式

Q4:如何提高测量精度?

A:优化方法

  1. 使用高精度模式:sht4.setPrecision(SHT4X_HIGH_PRECISION)
  2. 启用加热器:sht4.setHeater(SHT4X_MED_HEATER_100MS)
  3. 避免传感器暴露在气流中 

五、结果显示

成功运行后,串口监视器将输出以下格式的数据: 

资源链接 

        SHT41数据手册 

        STM32F407VET6参考手册

        Adafruit SHT4x库GitHub

 通过本教程,开发者可以快速构建稳定可靠的环境监测系统,点击了解更多零知开发教程:

零知实验室--零知开源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88922.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux流量分析:tcpdump wireshark

前言 最近因为工作需要&#xff0c;研究了下如何使用tcpdump和wireshark分析业务流量。如果要使用tcpdump分析具体的HTTP请求耗时&#xff0c;需捕获网络数据包并分析时间戳信息&#xff0c;重点关注TCP连接的建立、HTTP请求发送到响应接收的全过程。 以下是具体步骤和技巧&…

深度学习图像分类数据集—角膜溃疡识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;角膜溃疡识别分类&#xff1a;[dot, mix, slice] 训练数据集总共有270张…

功能强、超好用【PDF转换工具】的介绍下载与安装教程

Windows 电脑上一款简单好用的PDF转换工具&#xff0c;可以轻松地将其他文档转换为 PDF 格式&#xff0c;也可以将 PDF 文件转换为其他格式&#xff0c;如常见的 Word、Excel、PPT 等。 此外软件还支持 Office 文档合并分割、旋转页面、拼接页面、删除文字、删除页面、添加水印…

c# 钉钉应用实现监听审批事件以及获取审批结果的流程

oa的操作已经测试了一遍 image.png如果是自建oa则代表发起的审批是跳转网页&#xff0c;否则钉钉打开后是一个表单界面&#xff0c;不需要调整自己搞得oa。 所以我感觉目前公司的需求更适合官方oa 表单来填写,更灵活&#xff0c;还支持用户配置。 但是用户点了审批&#xff0c;…

Typecho架构深度剖析:轻量级博客系统的设计哲学与实现原理

文章目录 深度解析Typecho:轻量级博客系统的架构设计与实现1. Typecho概述与技术背景1.1 发展历程1.2 核心特性2. 系统架构设计分析2.1 核心架构图2.2 核心组件3. 核心模块实现分析3.1 路由系统实现3.2 数据库抽象层4. 插件系统深度解析4.1 Hook机制实现4.2 插件开发示例5. 性…

LangChain 内存(Memory)

1. 为什么需要内存&#xff1f; 大型语言模型&#xff08;LLM&#xff09;本身是无状态的。这意味着每次你向 LLM 发送一个请求&#xff08;Prompt&#xff09;&#xff0c;它都会独立处理这个请求&#xff0c;完全不记得之前任何的交互。这在构建一次性问答应用时没问题&#…

基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究

摘要&#xff1a;本文聚焦社群游戏定制领域&#xff0c;深入探讨以社群文化和用户偏好为导向的定制策略。通过分析互动游戏活动、社群文化塑造等关键要素&#xff0c;结合定制开发开源AI智能名片S2B2C商城小程序的技术特性&#xff0c;提出针对性游戏定制方案。研究旨在提升社群…

自动驾驶决策与规划

目录 自动驾驶决策与规划概述 决策与规划体系结构 分层递阶式决策规划 反应式体系结构 混合式体系结构 决策与规划系统的关键环节 路径规划 轨迹规划 行为决策 异常处理 自动驾驶的路径规划技术 维诺图法 栅格法 Dijkstra算法 A*算法 自动驾驶的行为决策方法 …

C++编译期计算:常量表达式(constexpr)全解析

在C性能优化领域&#xff0c;"将计算尽可能转移到编译期"是一条黄金法则。编译期计算&#xff08;Compile-Time Computation&#xff09;能显著减少程序运行时的开销&#xff0c;提升执行效率&#xff0c;同时还能在编译阶段暴露潜在错误。C11引入的constexpr关键字及…

【micro:bit】从入门到放弃(一):在线、离线版本的使用

1、离线版 micro:bit 1)下载地址 https://makecode.microbit.org/offline-app 2)双击安装包,makecode-microbit-setup-win64.exe,自动安装,安装成功后图标如下图所示 3)运行程序,查看版本信息 4)主界面如下 5)编程界面 点击“新建项目”或者“导入”进入编程界…

Flink Forward Asia 2025 主旨演讲精彩回顾

作为 Apache Flink 社区备受瞩目的年度盛会之一&#xff0c;由阿里云承办的 Flink Forward Asia 2025 于 7 月 3 日在新加坡正式拉开帷幕。From Real-Time Data Analytics to Real-Time AI&#xff0c;Flink 生态全面拥抱 AI本次大会上&#xff0c;Apache Flink 中文社区发起人…

车道偏离预警(LDW)功能介绍

车道偏离预警&#xff08;LDW&#xff09;功能介绍 LDW功能 通过摄像头监测前方车道线&#xff0c;当车辆偏离车道线时&#xff0c;系统发出报警提醒。 系统框图报警条件 最早报警线最迟报警线报警临界线 设置在 最早/最迟报警线 之间接口定义 输入/输出系统算法 横向偏离速度模…

软考(软件设计师)计算机网络-网络层

obsidian做markdown笔记太爽了&#xff0c;康奈尔模板笔记看起来舒服&#xff0c;CSDN试了几种方式&#xff0c;不支持&#xff0c;只能贴图了&#xff0c;将就看吧&#x1f60f;&#xff08;狗头保命&#xff09;工作原理图解 #mermaid-svg-e5Tgpt26jUftujKn {font-family:&qu…

nginx反向代理实现跨域请求

记录一个项目中遇到的跨域请求问题&#xff0c;解决跨域问题无非几种办法&#xff1a;1、后端解决&#xff0c;推荐的做法&#xff0c;可以看我之前写的文章&#xff0c;fastadmin的后台配置跨域&#xff1b;2、前端配置proxy代理&#xff08;开发环境用&#xff09;&#xff1…

利用Wisdom SSH高效搭建CI/CD工作流

在软件开发流程中&#xff0c;CI/CD工作流对于提升效率与确保质量起着关键作用。Wisdom SSH作为一款强大工具&#xff0c;其官网为ssh.wisdomheart.cn&#xff0c;借助AI助手能大幅简化CI/CD工作流的搭建过程。假设服务器已完成基础配置&#xff0c;下面为您介绍如何利用Wisdom…

深度学习-循环神经网络RNN

文章目录序列模型循环神经网络案例词的表示输出的表示矩阵运算表示交叉熵损失时间反向传播算法BPTT梯度消失与梯度爆炸GRULSTM总结序列模型 循环神经网络 st是上一个隐层的输出&#xff0c;体现序列数据之间有很强的关联性。 案例 > S0是初始输入&#xff0c;一般是0&#…

【Linux网络编程】Socket - TCP

目录 V1版本 - Echo Server 初始化服务器 启动服务器 客户端 一些BUG与问题 解决服务器无法一次处理多个请求的问题 多进程版本 多线程版本 线程池版本 V2版本 - 多线程远程执行命令 V1版本 - Echo Server 初始化服务器 TCP大部分内容与UDP是相同的&#xff0c;我们…

知识图谱构建简单分享

最近系统性地学习了知识图谱构建的关键技术&#xff0c;并结合医疗领域知识&#xff0c;完成了一个医疗知识图谱项目的实践。以下是整理的项目架构&#xff0c;欢迎交流指正。说明&#xff1a;当前项目实际实现主要应用了数据预处理、模型设计与预训练、模型优化与测试等核心技…

MCU中的系统控制器(System Controller)是什么?

MCU中的系统控制器&#xff08;System Controller&#xff09;是什么&#xff1f; 在微控制器&#xff08;MCU&#xff09;中&#xff0c;系统控制器&#xff08;System Controller&#xff09;是一个关键模块&#xff0c;负责管理和协调MCU内部的核心功能&#xff0c;确保系统…

【Datawhale夏令营】用AI做带货视频评论分析

文本分类、文本聚类 基础库&#xff1a; pandas, sklearn功能&#xff1a; 商品识别、情感分析、评论聚类商品识别&#xff1a; 视频文本信息&#xff0c;预测推广商品名称 & 情感分析&#xff1a;四个维度&#xff08;情感倾向、用户场景、用户疑问、用户建议&#xff09…