资讯详情

AHT20温湿度传感器

基于I2C的AHT20温湿度传感器数据采集

  • 一、I2C简介
  • 二、硬件I2C与软件I2C的区别
  • 三、实现I2CAHT20温湿度传感器数据采集
    • 1、AHT20简介
    • 2.配置函数库,编写函数
    • 3.显示最终结果
  • 四、总结

一、I2C简介

IC( Inter-- Integrated Circuit)总线是一种由 PHILIPS连接微控制器及其外围设备的公司开发的两线串行总线。它由数据线组成SDA和时钟SCL串行总线可以发送和接收数据。 在CPU与被控I2C之间、I2C与I2C双向传输,高速IC总线一般可达400kbps以上。 I2C在传输数据的过程中,总线有三种信号:开始信号、结束信号和响应信号。

  • 开始信号:SCL高电平时,SDA数据从高电平跳转到低电平跳转。
  • 结束信号:SCL高电平时,SDA数据从低电平跳转到高电平,数据从结东传输。
  • 响应信号:接收数据IC在接收到8bit数据发送到数据后IC发出特定的低电平脉冲表示已收到数据。CPU向受控单位发出信号后,等待受控单位发出响应信号,CPU接收响应信号后,根据实际情况判断是否继续传输信号。未收到响应信号的,判断为受控单位故障。

在这些信号中,起始信号是必要的,不需要结束信号和响应信号。

stm32(正点原子)SLC和SDA连接如下: 在这里插入图片描述

二、硬件I2C与软件I2C的区别

硬件I2C

硬件I2C对应芯片I2C外设,有相应的I2C驱动电路,它使用的I2C管脚也是专用的

软件I2C

软件I2C一般是用GPIO管脚用软件控制,模拟管脚状态I2C通信波形

硬件I2C软件的效率远高于软件I2C由于不受管脚限制,接口比较灵活

模拟I2C 是通过GPIO,软件模拟寄存器的工作模式,硬件(固件)I2C直接调用内部寄存器配置。如果要看具体的硬件,可以看芯片手册。因为固件I2C端口是固定的,所以会有区别。

区分他们:

可以看底层配置,比如IO如果配置了口配置IO口的功能(IIC功能)即固件IIC 可以看IIC写函数,看看里面有木头调用现成函数或给寄存器赋值。如果是这样,一定是固件IIC功能,如果没有,必须是数据bit一个bit模拟发生发送,必须使用循环,即模拟。 根据代码量,模拟的代码量必须大于固件。

三、实现I2CAHT20温湿度传感器数据采集

1、AHT20简介

AHT20是国内奥松生成的。I2C接口的MEMS温湿度传感器,ADC位数为20Bit,体积小,精度高,成本低。

由于AHT10/15/20 具有国产化、体积小、精度高、成本低等特点 DHT11/DHT12/AM2320/SHT20/SHT30单芯片价格在2元~3.体积小,容易嵌入产品

参数如下:

2.配置函数库,编写函数

参考 正点原子STM32开发板第27章 IIC实验

step0:驱动代码(官网下载)AHT20.c和AHT20.h,官网有,最重要的是I2C可参考原子代码myiic下就是关于i2c的代码。

对于正点原子的精英版,它SCL和SDL对应的是PB6和PB我们用普通人IO口来模拟I2C实现功能的功能。 step1: 用例程原子I2C例程,例程需要更改,这里不详细说明。基本函数库的基本框架不需要更改,因为串口通信,所以不需要更改lcd与key添加我们的代码的系列函数。

在这里,您可以复制上述两个代码HARDWARE问件夹下

点击manage project items 在HARDWRE下加入上面.c文件。 然后点击魔术棒,C/C ,路径添加AHT20文件夹 step2: 编写主函数

1、检测AHT20是否收集数据,如果收集数据,处理数据

2.根据以下两个公式

c1 = AHT20.HT[0]10010/1024/1024; //湿度 t1 = AHT20.HT[1]20010/1024/1024-500

计算得出温度。

3.指示灯翻转标识正常工作

4、AHT20函数中,有定义结构体,根据结构体来得到相关值 主函数:

#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "usmart.h"  #include "24cxx.h"  #include "AHT20.h" /****my code start lee***/     struct m_AHT20 AHT20; int main(void)
{ 
        
	volatile int  c1,t1;
	float c2,t2;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置中断优先级
	LED_Init();									//初始化LED
	delay_init();	    				//延时初始化
	IIC_Init();							//IIC初始化
  uart_init(115200);	 //串口初始化为115200
	AHT20.alive=!AHT20_Init();	        //AHT20初始化
 
	while(1)
	{ 
        
		if(AHT20.alive)//是否存活
		{ 
        
			//读取其原始数据
			AHT20.flag = AHT20_ReadHT(AHT20.HT);
			c1 = AHT20.HT[0]*100*10/1024/1024;  //湿度
			t1 = AHT20.HT[1]*200*10/1024/1024-500;//温度计算公式
			//结果都放大了10倍
			c2=c1/10.0;
			t2=t1/10.0;
			printf("湿度:\r\n%f\r\n",c2);
			printf("温度:\r\n%f\r\n\r\n",t2);
			//正常工作双灯翻转
			LED0=!LED0;
			LED1=!LED1;
		}
		delay_ms(2000);
		
	}
}

step3: 编译连接,烧入程序

硬件如下

分别对应
SCL–>PB6
SDA–>PB7
共地
给3.3V电

3、最终结果展示

四、总结

这次的学习我了解了什么是硬件I2C什么是软件I2C,通过对AHT20的配置与实验更加了解了如何使用I2C。获益匪浅。

参考

https://blog.csdn.net/weixin_42048417/article/details/80683556

http://www.aosong.com/products-61.html

https://zhidao.baidu.com/question/693765215942559364.html

https://blog.csdn.net/toopoo/article/details/80053929

标签: 温湿度传感器lcdmems传感器里面02温湿度传感器系列湿度传感器ic芯片温度湿度传感器iicam2315温湿度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台