【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)

news2024/10/2 3:58:46

一、温湿度传感器:

温湿度传感器是一种能够检测环境中的温度和湿度,并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。

原理:

温湿度传感器通常基于不同的物理原理,以下是一些常见的原理:

  1. 热电偶原理:热电偶传感器通过两种不同金属导线连接点的电压变化来感应温度。

  2. 热敏电阻原理:热敏电阻的电阻值随温度变化而变化,通过测量电阻值可以计算出温度。

  3. 湿敏电容原理:湿敏电容的电容值会随着湿度的变化而变化,通过测量电容值可以确定湿度。

  4. 露点温度原理:通过测量空气冷却至露点时的温度来确定湿度。

作用:

  • 环境监测:监测室内外环境的温湿度,用于舒适度控制。
  • 工业控制:在工业生产过程中,控制环境的温湿度以保证产品质量。
  • 农业:监测温室或农田的温湿度,优化作物生长条件。
  • 医疗:医院等场所需要精确控制温湿度以保证病人舒适及设备正常运作。

AHT10温湿度传感器:

  AHT10,新一代温湿度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚SMD 封装,底面 4 x 5mm ,高度1.6mm。传感器输出经过标定的数字信号,标准 I2C 格式。AHT10 配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器,经过改进使其在恶劣环境下的性能更稳定。每一个传感器都经过校准和测试,在产品表面印有产品批号。由于对传感器做了改良和微型化改进,因此它的性价比更高,并且最终所有设备都将得益于尖端的节能运行模式。

  应用范围主要在暖通空调 、除湿器、测试及检测设备、消费品、汽车 、自动控制、数据记录器、气象站、家电、湿度调节、医疗及其他相关温湿度检测控制。

电气特点:

  • 数字输出:AHT10采用数字I2C接口,与微控制器通信方便。
  • 精度高:温度测量精度为±0.5°C,湿度测量精度为±2%RH。
  • 响应速度快:快速响应环境中的温湿度变化。
  • 低功耗:适合电池供电的便携式设备。
  • 集成度高:AHT10将传感器、模拟信号处理、数字接口等功能集成在一个小型封装内。

AHT10的工作流程大致如下:

  1. 上电初始化:AHT10在上电后需要初始化,这通常通过发送特定的命令序列来完成。
  2. 测量:初始化后,可以命令AHT10进行一次或周期性的温湿度测量。
  3. 数据读取:测量完成后,通过I2C接口读取测量数据。
  4. 数据处理:将读取的原始数据转换为实际的温湿度值。

二、cubeMX配置

1、开启I2C

2、开启串口

具体串口配置如下:

【STM32-HAL库】串口配置、printf函数重定向icon-default.png?t=O83Ahttps://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 1100




void 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; // DATA0
    senddata[2] = 0x00; // DATA1
    HAL_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温湿度传感器

PB6SCL
PB7SDA
3.3VVCC
GND       GND

串口接引脚我们也可以从下面引脚示意中看到

STM32串口模块
PA9RX
PA10TX
3.3VVCC
GNDGND

五、运行效果

我们打开串口助手即可查看到当前的效果

我哈了一口气,所以看到温度在上升、湿度也在上升。

工程下载

通过百度网盘分享的文件:AHT10.zip 链接:https://pan.baidu.com/s/1hoSKvpqDYm9s_rrKE9KCEQ 提取码:6666icon-default.png?t=O83Ahttps://pan.baidu.com/s/1hoSKvpqDYm9s_rrKE9KCEQ

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

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

相关文章

补:vs调试技巧!

目录 1>>闲话 2>>bug 3>>debug调式 4>>debug和release 5>>监视和内存观察 6>>总结 1>>闲话 数据结构章节在国庆后再给大家更喔&#xff0c;现在先把c基础打好&#xff0c;所以我又重返回去学习c语言&#xff0c;并且&#xff0…

17 vue3之tsx手写vite tsx插件

我们之前呢是使用Template去写我们模板。现在可以扩展另一种风格TSX风格 vue2 的时候就已经支持jsx写法&#xff0c;只不过不是很友好&#xff0c;随着vue3对typescript的支持度&#xff0c;tsx写法越来越被接受&#xff0c;减少我们学习react的成本 Ant Design组件库就是使用…

利用LLMs自动寻找量化投资策略

利用LLMs自动寻找量化投资策略 J.P.Morgan的python教程 Content 本文提出了一个利用大型语言模型&#xff08;LLMs&#xff09;和多代理架构的新框架&#xff0c;用于量化股票投资和投资组合管理。该框架通过整合LLMs生成多样化的alpha因子&#xff0c;并动态评估市场条件&am…

基于 QAnything 的知识库问答系统:技术解析与应用实践

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

Mysql 学习——项目实战

MySQL 学习——项目实战 项目出处 博主&#xff1a;Asmywishi Linux-Ubuntu启动Mysql sudo mysqlData preparation Create Database and Table Create database : create database mysql_example1;Start database : use mysql_example1;Create Student table : # 学生表…

vue页面保持在div的底部(适用于聊天界面等需要显示最新信息的场景)

代码示例&#xff1a; <script setup lang"ts"> import {nextTick, onMounted, ref} from vueconst count [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, …

如何将题目文档做成一个题库刷题小程序?

✨告别题海战术&#xff0c;迎接智慧刷题新时代&#xff01;&#x1f680; &#x1f4da;面对堆积如山的题库文档&#xff0c;是否感到无从下手&#xff1f;别担心&#xff0c;这款本土定制刷题小程序来救场啦&#xff01;&#x1f389; &#x1f31f;自动生成题库&#xff0c…

数据结构-3.9.栈在递归中的应用

一.函数被调用背后的过程&#xff1a;最后被调用的函数最先结束也符合栈的后进先出 1.main函数为主函数即程序入口&#xff0c;运行时主函数先入栈&#xff0c;然后存入主函数里的数据&#xff1b; 2.func1函数加载在栈中时他后面的代码的地址#1(调用返回地址&#xff0c;不是…

Xshell7下载及服务器连接

一、Xshell-7.0.0164p、Xftp 7下载 1.1、文件下载 通过网盘分享的文件&#xff1a;xshell 链接: https://pan.baidu.com/s/1qc0CPv4Hkl19hI9tyvYZkQ 提取码: 5snq –来自百度网盘超级会员v2的分享 1.2、ip连接 下shell和xftp操作一样&#xff1a;找到文件—》新建—》名称随…

链表OJ经典题目及思路总结(一)

目录 前言1.移除元素1.1 链表1.2 数组 2.双指针2.1 找链表的中间结点2.2 找倒数第k个结点 总结 前言 解代码题 先整体&#xff1a;首先数据结构链表的题一定要多画图&#xff0c;捋清问题的解决思路&#xff1b; 后局部&#xff1a;接着考虑每一步具体如何实现&#xff0c;框架…

JavaScript 数学基础:数字与运算符解析——WEB开发系列43

哈哈哈哈可能不是每个人都喜欢数学。有些人从小就享受解决复杂的数学问题&#xff0c;而另一些人则在学校被迫学习乘法表和长除法时对数学产生了厌恶。尽管如此&#xff0c;数学仍是生活中不可或缺的组成部分。无论我们处在哪里&#xff0c;数学的应用在我们生活中随处可见。在…

使用 ModelScope Studio 实现可滚动 ChatBot

前面的文章提到过 Gradio 的 Chatbot 不能自动滚动的问题&#xff0c;最近看到了 ModelScope Studio 扩展的一些组件&#xff0c;其中 Chatbot 就完美解决了自动滚动的问题&#xff0c;同时还增加了很多更细化的功能&#xff0c;例如可以设置用户和 AI 的头像。官方文档&#x…

C++进阶(3): 二叉搜索树

二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有的节点的值都小于等于 根节点的值若它的右子树不为空&#xff0c;则右子树上所有的节点的值都大于等…

时序必读论文15|TimeXer:通过外部变量增强Transformer在时间序列预测中的能力

论文标题&#xff1a;TimeXer: Empowering Transformers for Time Series Forecasting with Exogenous Variables 论文链接&#xff1a;https://arxiv.org/abs/2402.19072 前言 仅仅关注内生变量&#xff0c;通常不足以保证准确的预测&#xff0c;外部序列可以为内生变量提供…

MongoDB 副本集搭建 【docker compose + 本机部署】【建议收藏起来】

什么是副本集 MongoDB副本集&#xff08;Replica Set&#xff09;是一种数据冗余和故障恢复机制&#xff0c;它允许你维护相同数据的一个或多个副本&#xff0c;并提供自动故障转移和数据恢复能力。副本集是一个包含多个MongoDB实例&#xff08;通常称为成员&#xff09;的集合…

Linux学习笔记(一):Linux学习环境的安装及远程连接工具的使用

Linux学习笔记&#xff08;一&#xff09;&#xff1a;Linux学习环境的安装及远程连接工具的使用 本地安装虚拟机 1.安装VMWare(点击图片跳转下载&#xff09; 2.安装CentOS7光盘源(点击图片下载&#xff09; 3.安装 一路点下一步 点击确认 等待不要动,可能有点久,直到这个…

【内网渗透】最保姆级的春秋云镜Flarum打靶笔记

目录 flag1 flag3 flag4​ flag2 flag1 扫外网 打的是flarum论坛&#xff0c;p牛之前有写过phar反序列化的利用&#xff1a; 从偶遇Flarum开始的RCE之旅 rockyou.txt爆出administrator/1chris&#xff0c;登录 用这个工具生成phar包 https://github.com/ambionics/p…

【Python报错已解决】IndexError: index 0 is out of bounds for axis 1 with size 0

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

springboot整合seata

一、准备 docker部署seata-server 1.5.2参考&#xff1a;docker安装各个组件的命令 二、springboot集成seata 2.1 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>&…

helm部署ingress-nginx

helm部署ingress-nginx 19/100 保存草稿 发布文章 sj1163739403 未选择任何文件 ingress-nginx是管理南北向流量很好的一个工具&#xff0c;可以避免在云端频繁对LB进行配置&#xff0c;通过Label也可以实现让ingress-nginx都部署在指定的NodeGroup 一、helm安装ingress-nginx…