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

前言

  以下是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/1HZc4LGumiQDJP58qNCfaMQ  提取码:78pa

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值