【模块系列】AHT10温湿度模块

news2024/9/20 3:50:31

前言

  以下是AHT10模块官网介绍原话。还有就是官网已经显示停产了,不过淘宝还是有小模块玩玩的。

  AHT10是一款高精度,完全校准,贴片封装的温湿度传感器,MEMS的制作工艺,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个高性能CMOS微处理器相连接。该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
  AHT10 通信方式采用标准I²C通信方式,超小的体积、极低的功耗,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。AHT10支持较宽的工作电源电压范围,该器件可为各类常见应用场景提供低成本和低功耗优势,温湿度传感器均在高精度的恒温恒湿腔室中进行出厂校准,直接输出经温度补偿后的湿度、温度等信息,用户无需要对湿度进行温度补偿,便可得到准确的温湿度信息。

参数

  • 输入电压范围:1.8V至3.6V;
  • 出厂经过标定校准,产品具有温度补偿功能;
  • 具有I²C接口;
  • 超低功耗;
  • SMD封装;
  • 湿度精度±2% RH(典型值);
  • 温度精度±0.3℃(典型值)。

环境

  • STM32F103C6T6系统板

  • Keil5+STM32的标准库

  • 硬件连接:

    • OLED模块: PB7 — SDA(OLED),PB6 — SCK(OLED),供电3.3V
    • AHT10模块:PB11 — SDA(AHT10),PB10 — SCL(AHT10),供电3.3V
  • 末尾会给出工程链接

代码

  商家给的资料中好像也有,示例。不过我觉得太乱就没看,自己写了个,下面就展示,AHT10的相关库代码。要拿拿来使用的话,建议还是看我写的例程,因为还有MyI2C库就没粘贴出来了。

  • AHT10.C

    #include "stm32f10x.h" 
    #include "MyI2C.h"
    #include "AHT10.h"
    
    
    uint8_t AHT10_Data[6];	//数据缓冲区
    uint32_t AHT10_Temp=0x00000000;	// 温度
    uint32_t AHT10_Humi=0x00000000;	// 湿度
    
    //写寄存器
    void AHT10_WriteReg(uint8_t RegAddress,uint8_t Data1,uint8_t Data2)
    {
    	MyI2C_Start();
    	MyI2C_SendByte(AHT10_ADDRESS);
    	MyI2C_ReceiveAck();
    	MyI2C_SendByte(RegAddress);
    	MyI2C_ReceiveAck();
    	MyI2C_SendByte(Data1);
    	MyI2C_ReceiveAck();
    	MyI2C_SendByte(Data2);
    	MyI2C_ReceiveAck();
    	MyI2C_Stop();
    }
    
    
    //读寄存器
    void AHT10_ReadReg(void)
    {
    	MyI2C_Start();
    	MyI2C_SendByte(AHT10_ADDRESS | 0x01);
    	MyI2C_ReceiveAck();
    	
    	AHT10_Data[0]=MyI2C_ReceiveByte();
    	MyI2C_SendAck(0);
    	AHT10_Data[1]=MyI2C_ReceiveByte();
    	MyI2C_SendAck(0);
    	AHT10_Data[2]=MyI2C_ReceiveByte();
    	MyI2C_SendAck(0);
    	AHT10_Data[3]=MyI2C_ReceiveByte();
    	MyI2C_SendAck(0);
    	AHT10_Data[4]=MyI2C_ReceiveByte();
    	MyI2C_SendAck(0);
    	AHT10_Data[5]=MyI2C_ReceiveByte();
    	MyI2C_SendAck(1);
    	MyI2C_Stop();
    }
    
    //AHT10复位
    void AHT10_Reset()
    {
    	MyI2C_Start();
    	MyI2C_SendByte(AHT10_ADDRESS);
    	MyI2C_ReceiveAck();
    	MyI2C_SendByte(0xBA);
    	MyI2C_ReceiveAck();
    	MyI2C_Stop();
    }
    
    //触发测量
    void AHT10_TrigMeasu(void)
    {
    	AHT10_WriteReg(0xac,0x33,0x00);
    }
    
    //读取命令
    void AHT10_ReadCmd(void)
    {
    	AHT10_ReadReg();
    }
    
    
    //状态返回
    uint8_t AHT10_GetState(void)
    {
    	return AHT10_Data[0];
    }
    
    //数据返回
    //参数:Mode	  0:返回湿度	  1:返回温度
    uint8_t AHT10_GetValue(uint8_t Mode)
    {
    	uint32_t humi;
    	uint32_t temp;
    	uint32_t AHT10_Humi=0x00000000;	// 湿度
    	uint32_t AHT10_Temp=0x00000000;	// 温度
    	
    	//下面的选择结构把break屏蔽掉,是因为老是报警告。恢复也行。
    	switch(Mode)
        {
    		case 0:
    			// 湿度数据处理
    			AHT10_Humi |= AHT10_Data[1];
    			AHT10_Humi <<= 8;
    			AHT10_Humi |= AHT10_Data[2];
    			AHT10_Humi <<= 4;
    			AHT10_Humi |= (AHT10_Data[3]>>4);
    			// 把小数后的精度丢了,只保留整数部分,方便函数返回
    			humi = (float)AHT10_Humi / (0x0fffff) * 100;
    		return humi;
    		//break;
    		case 1:
    			// 温度数据处理
    			AHT10_Temp = AHT10_Data[3] & 0x0F;
    			AHT10_Temp <<= 8;
    			AHT10_Temp |= AHT10_Data[4];
    			AHT10_Temp <<= 8;
    			AHT10_Temp |= AHT10_Data[5];
    			// 把小数后的精度丢了,只保留整数部分,方便函数返回
    			temp = (float)AHT10_Temp / (0x0fffff) * 200 - 50;
    		return temp;
    		//break;
    		default:
    		return 0;
    		//break;
        }	
    }
    
    
  • AHT10.H

    #ifndef __AHT10_H__
    #define __AHT10_H__
    
    #define AHT10_ADDRESS 0x70
    
    void AHT10_TrigMeasu(void);				//触发测量
    void AHT10_ReadCmd(void);				//读取命令
    uint8_t AHT10_GetState(void);			//状态返回
    uint8_t AHT10_GetValue(uint8_t Mode);	//数据返回
    void AHT10_Reset();						//AHT10复位
    
    #endif
    
    
  • main.c

    在这里插入图片描述

演示

第一行显示的是湿度,72%
第二行显示的是温度,32℃ (不过我家真的有32度?怪怪的)
第三行显示的是一字节的状态码,具体可以看手册

在这里插入图片描述

链接

文中Keil5程序+AHT10官方的手册资料

链接:https://pan.baidu.com/s/1IIucNeW2tkfIMQ4jqwJ10A  提取码:0mw7

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

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

相关文章

【网络基础】数据链路层

【网络基础】数据链路层 文章目录 【网络基础】数据链路层1、对比网络层2、以太网2.1 基本概念2.2 类似技术2.3 以太网帧 3、MAC地址对比IP地址 4、MTU4.1 对IP协议影响4.2 对UDP协议影响4.3 对TCP协议影响4.4 地址、MTU查看 5、ARP协议5.1 协议作用5.2 协议工作流程5.3 数据报…

第一章:SpringBoot基础入门

第一章&#xff1a;SpringBoot基础入门 1.1&#xff1a;Spring与SpinrBoot Spring能做什么 Spring的能力 Spring的生态 网址&#xff1a;https://spring.io/projects/spring-boot 覆盖了&#xff1a;Web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等。 …

面试题 : Top-k问题

目录 题目 示例 提示 开始解题 1.思路 2.解题代码 3.时间复杂度 4.运行结果 ​编辑 目前问题 真正的解法 1.以找前K个最大的元素为例 2.代码执行过程&&时间复杂度的计算 3.画图演示代码执行过程 4.解题代码 两种解法的比较 完结撒花✿✿ヽ(▽)ノ✿✿ …

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息

文章目录 演示CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息lookupSignalDBLookup代码问题:DBLookup(信号名).AttributeName报错问题: motorola格式的信号使用DBLookup获取信号的bitstart跟ig模块里的信息不一样演示 CAPL通过lookupSignal和DBLookup获取DBC信号的属性…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码

python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及原生安卓接入案例代码案例 源码地址:keyxh/newsapi: python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及安卓接入案例代码 (github.com) 目录 1.环境配…

全球地震分析寻找难以捉摸的前震信号

发现前震的本质可以帮助地震学家预测大地震。 2019 年里奇克莱斯特地震序列使南加州沙漠​​的道路发生偏移。图片来源&#xff1a;Ken Hudnut/USGS 小地震是否预示着大地震是地震学中长期存在的问题。 简而言之&#xff0c;答案是&#xff0c;有时他们会这样做。这是根据对全…

老胡的周刊(第104期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 whistle[2] Whistle 是基于 Node 实现的跨平…

点亮一颗LED灯

TOC LED0 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能APB2的外设时钟GPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode GPIO_Mode_Out_PP;//通用推挽输出GPIO_Initstructure.GPIO_Pin GPIO_Pin_5;GPIO_Initstructure.GPIO_Speed GPIO_S…

从LeakCanary看如何判断对象被回收了

前面已经了解了Service&#xff0c;Fragment&#xff0c;ViewModel对象的销毁时机&#xff0c;那么在触发销毁时机后&#xff0c;我们怎么判断这些对象有没有回收呢&#xff1f; 大家都知道在Java中有强引用&#xff0c;弱引用&#xff0c;软引用&#xff0c;虚引用四种引用方…

难缠客户背后的秘密:项目经理的危机处理手册

难缠的客户&#xff0c;每个项目经理都会或多或少遇到。他们可能会频繁更改需求&#xff0c;对细节吹毛求疵&#xff0c;或者在关键时刻提出与之前完全不同的意见。但是&#xff0c;难缠的客户其实并不都是坏事&#xff0c;他们也为项目经理提供了宝贵的学习机会。本文将深入探…

git拉取失败/git fatal终极解决方法

前言 被折磨不下20次总结出来的终极方案 步骤 0 首先关闭代理试试&#xff0c;不行就下一步 1 重置代理或者取消代理的方式 git config --global --unset http.proxy git config --global --unset https.proxy添加全局代理 git config --global http.proxy git config …

虚拟化 VMware sphere

一 VMware sphere用途&#xff1a; VMware vSphere 是 VMware 的虚拟化平台&#xff0c;可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理. 1. **虚拟化&#xff1a;** vSphere 的主要用途是将物理服务…

打印X型的图案

int main() {int n0;int i0;int j0;scanf("%d",&n);for(i0;i<n;i){for(j0;j<n;j){if(ij){printf("*");}else if((ij)n-1){printf("*");}elseprintf(" ");}printf("\n");}return 0; }

mapper.xml中循环执行多条语句时报错,但是单独拿SQL到数据库却可以执行

我是批量修改数据&#xff0c;用foreach标签包住update语句&#xff0c;报错信息如下&#xff1a; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the …

HCIP的VLAN实验

实验步骤&#xff1a; 1.首先&#xff0c;对交换机SW1进行操作&#xff0c;创建需要的VLAN并对接口进行划分 [SW1]vlan batch 2 to 6 [SW1]port-group group-member Ethernet 0/0/2 Ethernet 0/0/4 [SW1-port-group]port link-type access [SW1-port-group]port default vlan …

聚焦电力行业CentOS迁移,麒麟信安受邀参加第六届电力信息通信新技术大会暨数字化发展论坛并发表主题演讲

为加快推进“双碳”目标下的新型能源体系和新型电力系统建设&#xff0c;深化新一代数字技术与电力业务的融合发展&#xff0c;促进电力行业关键技术自主创新、安全可控&#xff0c;助力电力企业数字化转型升级和高质量发展&#xff0c;2023年8月9-11日&#xff0c;第六届电力信…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

一.根据自己版本选择镜像 uname -a cat /etc/centos-releaseuname -a 命令用于查看当前系统的硬件和操作系统信息&#xff0c;包括内核版本、处理器架构、系统类型等。 其中&#xff0c;"Linux" 表示操作系统类型为 Linux&#xff0c;"3.10.0-1160.el7.x86_64…

C++ 网络编程项目fastDFS分布式文件系统(四)-fastCGI项目相关技术以及linux搜狗输入法相关问题。

目录 1. Nginx作为web服务器处理请求 2. http协议复习 Get方式提交数据 Post方式提交数据 3. fastCGI 3.1 CGI 3.2 fastCGI 3.3 fastCGI和spawn-fcgi安装 1. 安装fastCGI 2. 安装spawn-fcgi 3.4 nginx && fastcgi 4其他知识点 1. fastCGI环境变量 - fas…

week5刷题

题解: 斐波那契数的边界条件是 F(0)0和 F(1)1。当 n>1 时&#xff0c;每一项的和都等于前两项的和&#xff0c;因此有如下递推关系&#xff1a; F(n)F(n−1)F(n−2) 由于斐波那契数存在递推关系&#xff0c;因此可以使用动态规划求解。动态规划的状态转移方程即为上述递推…