【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)
一、温湿度传感器:
温湿度传感器是一种能够检测环境中的温度和湿度,并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。
原理:
温湿度传感器通常基于不同的物理原理,以下是一些常见的原理:
-
热电偶原理:热电偶传感器通过两种不同金属导线连接点的电压变化来感应温度。
-
热敏电阻原理:热敏电阻的电阻值随温度变化而变化,通过测量电阻值可以计算出温度。
-
湿敏电容原理:湿敏电容的电容值会随着湿度的变化而变化,通过测量电容值可以确定湿度。
-
露点温度原理:通过测量空气冷却至露点时的温度来确定湿度。
作用:
- 环境监测:监测室内外环境的温湿度,用于舒适度控制。
- 工业控制:在工业生产过程中,控制环境的温湿度以保证产品质量。
- 农业:监测温室或农田的温湿度,优化作物生长条件。
- 医疗:医院等场所需要精确控制温湿度以保证病人舒适及设备正常运作。
AHT10温湿度传感器:
AHT10,新一代温湿度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚SMD 封装,底面 4 x 5mm ,高度1.6mm。传感器输出经过标定的数字信号,标准 I2C 格式。AHT10 配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器,经过改进使其在恶劣环境下的性能更稳定。每一个传感器都经过校准和测试,在产品表面印有产品批号。由于对传感器做了改良和微型化改进,因此它的性价比更高,并且最终所有设备都将得益于尖端的节能运行模式。
应用范围主要在暖通空调 、除湿器、测试及检测设备、消费品、汽车 、自动控制、数据记录器、气象站、家电、湿度调节、医疗及其他相关温湿度检测控制。
电气特点:
- 数字输出:AHT10采用数字I2C接口,与微控制器通信方便。
- 精度高:温度测量精度为±0.5°C,湿度测量精度为±2%RH。
- 响应速度快:快速响应环境中的温湿度变化。
- 低功耗:适合电池供电的便携式设备。
- 集成度高:AHT10将传感器、模拟信号处理、数字接口等功能集成在一个小型封装内。
AHT10的工作流程大致如下:
- 上电初始化:AHT10在上电后需要初始化,这通常通过发送特定的命令序列来完成。
- 测量:初始化后,可以命令AHT10进行一次或周期性的温湿度测量。
- 数据读取:测量完成后,通过I2C接口读取测量数据。
- 数据处理:将读取的原始数据转换为实际的温湿度值。
二、cubeMX配置
1、开启I2C

2、开启串口

具体串口配置如下:
【STM32-HAL库】串口配置、printf函数重定向
https://blog.csdn.net/qq_39150957/article/details/136638229?fromshare=blogdetail&sharetype=blogdetail&sharerId=136638229&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link
三、编写代码
AHT10.h
#ifndef _AHT10_H_
#define _AHT10_H_#include "i2c.h"// 定义AHT10地址
#define AHT10_ADDRESS 0x70
#define AHT10_Write_ADDRESS 0x70
#define AHT10_Read_ADDRESS 0x71// 定义AHT10命令
#define AHT10_Init_com 0xE1 // 1110 0001
#define AHT10_SoftReset_com 0xBA // 1011 1010
#define AHT10_TrigeMea_com 0xAC // 1010 1100void AHT10_SoftReset(void);
void AHT10_TrigeMea(void);
void AHT10_Init(void);
uint8_t AHT10_Read_predata(float *humidity, float *temperature);#endif
AHT10.c
#include "AHT10.h"/*** @brief AHT10 初始化* @param void* @retval void*/
void AHT10_Init(void)
{uint8_t senddata;senddata = AHT10_Init_com;HAL_I2C_Master_Transmit(&hi2c1, AHT10_Write_ADDRESS, &senddata, 1, 0xFFFF);
}/*** @brief AHT10 软复位* @param void* @retval void*/
void AHT10_SoftReset(void)
{uint8_t senddata;senddata = AHT10_SoftReset_com;HAL_I2C_Master_Transmit(&hi2c1, AHT10_Write_ADDRESS, &senddata, 1, 0xFFFF);HAL_Delay(20);
}/*** @brief AHT10触发测量* @param void* @retval void*/
void AHT10_TrigeMea(void)
{uint8_t senddata[3];senddata[0] = AHT10_TrigeMea_com;senddata[1] = 0x33; // DATA0senddata[2] = 0x00; // DATA1HAL_I2C_Master_Transmit(&hi2c1, AHT10_Write_ADDRESS, senddata, 3, 0xFFFF);HAL_Delay(80);
}/*** @brief AHT10 设备读取 相对湿度和温度* @param float *humidity:湿度信息;* float *temperature:温度信息。* @retval uint8_t:0-读取数据正常; 1-读取设备失败,设备一直处于忙状态,不能获取数据*/
uint8_t AHT10_Read_predata(float *humidity, float *temperature)
{AHT10_TrigeMea();HAL_Delay(75);static uint32_t humi, temp;uint8_t readdata[6];uint8_t BusyIndication, CalEnable;HAL_I2C_Master_Receive(&hi2c1, AHT10_Read_ADDRESS, readdata, 6, 0xFFFF);BusyIndication = (readdata[0] >> 7) & 0x01; // 状态标志位CalEnable = (readdata[0] >> 3) & 0x01; // 校准标志位if (CalEnable == 0){AHT10_SoftReset();}if (BusyIndication == 0){humi = (readdata[1] << 12) | (readdata[2] << 4) | (readdata[3] >> 4);temp = ((readdata[3] & 0x0F) << 16) | (readdata[4] << 8) | (readdata[5]);*humidity = ((humi * 100.0) / 1048576);*temperature = ((float)temp / 1048576) * 200 - 50;return 0;}return 1;
}
main.c
引入头文件
/* USER CODE BEGIN Includes */#include "AHT10.h"/* USER CODE END Includes */
初始化函数
/* USER CODE BEGIN 2 */
HAL_Delay(20);
AHT10_Init();float humidity,temperature;/* USER CODE END 2 */
主循环内代码
/* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */AHT10_Read_predata(&humidity,&temperature);printf("湿度:%.2f%%;温度:%.2f\r\n",humidity,temperature);HAL_Delay(1000);}/* USER CODE END 3 */
四、接线示意
I2C接模块,我们可以从cubeMX中配置看到引脚及引脚定义
| STM32 | AHT10温湿度传感器 |
| PB6 | SCL |
| PB7 | SDA |
| 3.3V | VCC |
| GND | GND |

串口接引脚我们也可以从下面引脚示意中看到
| STM32 | 串口模块 |
| PA9 | RX |
| PA10 | TX |
| 3.3V | VCC |
| GND | GND |

五、运行效果
我们打开串口助手即可查看到当前的效果
我哈了一口气,所以看到温度在上升、湿度也在上升。

工程下载
通过百度网盘分享的文件:AHT10.zip 链接:https://pan.baidu.com/s/1hoSKvpqDYm9s_rrKE9KCEQ 提取码:6666
https://pan.baidu.com/s/1hoSKvpqDYm9s_rrKE9KCEQ
相关文章:
【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)
一、温湿度传感器: 温湿度传感器是一种能够检测环境中的温度和湿度,并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。 原理: 温湿度传感器通常基于不同的物理原理,以下是一些常见…...
深入理解网络通信: 长连接、短连接与WebSocket
在现代网络应用开发中,选择合适的通信方式对于应用的性能、效率和用户体验至关重要。本文将深入探讨三种常见的网络通信方式:长连接、短连接和WebSocket,分析它们的特点、区别以及适用场景。 1. 短连接 © ivwdcwso (ID: u012172506) 1.1 定义 短连接是指客户端和服务器…...
Linux·环境变量与进程地址空间
1. 命令行参数 各位可能见过main函数也是有参数的,只是我们平时写的代码都比较简单,用不到main函数的参数,下面我们看一下main函数的参数是什么又是怎么用的 我们看这样一段代码 其编译运行后的效果是这样的 我们将main函数后面的那两个参数叫…...
MYSQL 乐观锁
乐观锁是一种用于处理并发控制的策略,特别适用于读多写少的场景。在 MySQL 数据库中,乐观锁通常通过版本号或时间戳来实现。下面将详细介绍乐观锁的概念、实现方式以及在 MySQL 中的应用。 1. 乐观锁的概念 乐观锁的基本思想是:在对数据进行…...
SpringCloud入门(十二)全局过滤器和跨域
一、全局过滤器 全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义,处理逻辑是固定的,如果我们希望拦截请求,做自己的业务逻辑则没办法实现。而GlobalFilt…...
51单片机系列-按键检测原理
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 独立按键是检测低电平的。 下面我们来看一张对应的电路原理图: 在这张图当中,P1,P2,P3内部都上拉了电阻,但是P0没有&am…...
基于元神操作系统实现NTFS文件操作(五)
1. 背景 本文主要介绍$Root元文件的解析。先介绍元文件的构成及各个部分的结构,然后结合上一篇博文中读取到的元文件内容,对测试磁盘中目标分区的根目录进行展示。 2. $Root元文件解析 (1)$Root元文件的结构 $Root元文件由两部…...
AutoCAD学习
AutoCAD学习 最基本操作 命令用途说明空格键确认键也可以是重复刚才的命令回车键也是确认键鼠标右键也可以选择确认LINE、L直线命令绘制直线DLI线性尺寸标注DIMLINEAR鼠标滚轮滚动放大缩小视图界面鼠标中键按住移动视图DAL对齐线性标注DIMALIGNED F8 正交模式ORTHOMODE Tab 切换…...
go的一些知识点
一.package 1.新建项目 新建一个itying文件夹,在里面使用命令 就能生成一个go项目。生成一个go.mod 2.调用别的包的代码 按照下面的目录层级生成代码 //clac.go package calcfunc Add(x, y int) int {return x y } func Sub(x, y int) int {return x - y }…...
前端 vue3 对接科大讯飞的语音在线合成API
主要的功能就是将文本转为语音,可以播放。 看了看官方提供的demo,嗯....没看懂。最后还是去网上找的。 网上提供的案例,很多都是有局限性的,我找的那个他只能读取第一段数据,剩下的不读取。 科大讯飞的接口…...
缺省参数
一、概念 在声明或定义函数时为函数的参数指定一个默认值,调用时,如果对应参数没有传参,则使用其默认值,否则使用指定的实参 void TestFunc(int a 0) {cout<<a<<endl; }int main() {TestFunc(); // 没有传参&am…...
Stable Diffusion绘画 | 来训练属于自己的模型:炼丹启动
经过前面几轮辛苦的准备工作之后,现在开始进入终篇的炼丹环节。 在「上传素材」页面,点击「开始训练」: 可以在「查看进度-进度」中,查看模型训练的整体进度: 求助!!!操作「开始训练…...
08_OpenCV文字图片绘制
import cv2 import numpy as npimg cv2.imread(image0.jpg,1) font cv2.FONT_HERSHEY_SIMPLEXcv2.rectangle(img,(500,400),(200,100),(0,255,0),20) # 1 dst 2 文字内容 3 坐标 4 5 字体大小 6 color 7 粗细 8 line type cv2.putText(img,flower,(200,50),font,1,(0,0,250)…...
【笔记】选择题笔记+数据结构笔记
文章目录 2014 41方法一先序遍历方法二 连通分量是极大连通子图 一个连通图的生成树是一个极小连通子图 无向图的邻接表中,第i个顶点的度为第i个链表中的结点数 邻接表和邻接矩阵对不同的操作各有优势。 最短路径算法: 单源最短路径 已知图G(V,E),我们…...
浅谈汽车智能座舱如何实现多通道音频
一、引言 随着汽车智能座舱的功能迭代发展,传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求,未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放,以及如何实现多路音频功放方案。…...
系统架构设计师教程 第13章 13.1层次式体系结构概述 笔记
13.1 层次式体系结构概述 分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统机构清晰,便于提高复用能力和产品维护能力。 层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并…...
cnn突破一(先搞定三层反馈神经网络bpnet,c#实现)
惦记cnn很久了,一直搞机器视觉,走不出来,现在megauging已经实现,说明书也写了不少,该突破的突破了,该改进的也改进了,一个心病治好了,有空把人工智能在机器视觉上的延伸,…...
如何创建一个docker,给它命名,且下次重新打开它
1.创建一个新的docker并同时命名 docker run -it --name one ubuntu:18.04 /bin/bash 这时候我们已经创建了一个docker,并且命名为"one" 2.关闭当前docker exit 3.这时docker已经终止了,我们需要使用它要重新启动 docker start one 4.现在可以重新打…...
【D3.js in Action 3 精译_025】3.4 让 D3 数据适应屏幕(中)—— 线性比例尺的用法
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...
Python的多线程与多进程:并发编程基础与实战
随着计算机硬件的不断发展,现代计算机通常配备多核处理器,使得在程序中同时处理多个任务成为可能。并发编程是提升程序性能、充分利用多核处理器能力的重要技术之一。在Python中,并发编程的实现主要包括多线程、多进程以及异步编程(如asyncio)。然而,由于Python的全局解释…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
