资讯详情

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

目录

  • 一、学习任务
  • 二、I2C总线协议
    • 2.1 定义
    • 2.2 区别
  • 三、AHT20数据采集
  • 四、硬件连接及其效果显示
  • 五、总结
  • 六、参考链接

一、学习任务

传感器数据,通过串口输出采集的温湿度值。具体任务: 1)解释什么是软件I2C”和“硬件I2C”? (阅读野火配套教材第23章I2C–读写EEPROM原则章节) 2)阅读AHT编程实现20数据手册一次温湿度数据,并通过串口发送到上位机(win10)。

二、I2C总线协议

2.1 定义

软件I2C一般是用GPIO管脚,用软件控制管脚状态以软件I2C通信波形。 硬件I2C对应芯片I2C外设,有相应的I2C驱动电路,它使用的I2C管脚也是专用的。

2.2 区别

硬件I2C软件的效率远高于软件I2C接口灵活,因为不受管脚限制。 软件I2C 是通过GPIO,软件模拟寄存器的工作模式,硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册。因为固件I2C端口是固定的,所以会有区别。

三、AHT20数据采集

主函数代码:

#include "delay.h" #include "usart.h" #include "bsp_i2c.h"   int main(void) {   delay_init();       uart_init(115200);  //串口通信波特率1152  IIC_Init();   while(1)  {   printf("温湿度显示");   read_AHT20_once();   delay_ms(1500);   } } 

读取模块函数:

void  read_AHT20_once(void) {  delay_ms(10);   reset_AHT20();//重置AHT20芯片  delay_ms(10);   init_AHT()AHT20芯片  delay_ms(10);   startMeasure_AHT()AHT20芯片  delay_ms(80);   read_AHT20();//读取AHT收集到的数据  delay_ms(5); } 

AHT读取和输出温湿度函数:

void read_AHT20(void) {  uint8_t   i;   for(i=0; i<6; i  )  {   readByte[i]=0;  }   //-------------  I2C_Start();//I2C启动   I2C_WriteByte(0x71);//I2C写数据  ack_status = Receive_ACK();///收到的响应信息  readByte[0]= I2C_ReadByte();//I2C读取数据  Send_ACK()   readByte[1]= I2C_ReadByte();  Send_ACK();   readByte[2]= I2C_ReadByte();  Send_ACK();   readByte[3]= I2C_ReadByte();  Send_ACK();   readByte[4]= I2C_ReadByte();  Send_ACK();   readByte[5]= I2C_ReadByte();  SendNot_Ack();  //Send_ACK();   I2C_Stop();//I2C停止函数   ///判断读取的第一个字节是否为0x08,0x如果读取过程取过程中规定的,如果读取过程没有问题,相应地处理所读数据  if( (readByte[0] & 0x68) == 0x08 )  {   H1 = readByte[1];   H1 = (H1<<8) | readByte[2];   H1 = (H1<<8) | readByte[3];   H1 = H1>>4;    H1 = (H1*1000)/1024/1024;    T1 = readByte[3];   T1 = T1 & 0x0000000F;   T1 = (T1<<8) | readByte[4];   T1 = (T1<<8) | readByte[5];    T1 = (T1*2000)/1024/1024 - 500;    AHT20_OutData[0] = (H1>>8) & 0x000000FF;   AHT20_OutData[1] = H1 & 0x000000FF;    AHT20_OutData[2] = (T1>>8) & 0x000000FF;   AHT20_OutData[3] = T1 & 0x000000FF;  }  else  {   AHT20_OutData[0] = 0xFF;   AHT20_OutData[1] = 0xFF;    AHT20_OutData[2] = 0xFF;   AHT20_OutData[3] = 0xFF;   printf("读取失败");   }  printf("\r\n");  //根据温度和湿度的计算公式,计算后输出结果,通过串口发送到上位机显示  printf("温度:%d%d.%d",T1/100,(T1/10),T1);  printf("湿度:%d%d.%d",H1/100,(H1/10),H1);  printf("\r\n"); } 

四、硬件连接及其效果显示

USB的RXT连接PA9,TXT连接PA10,SCL连接PB6,SDA连接PB7。

在这里插入图片描述

五、总结

初步了解了I2C协议的基本用法通过完成实验加深了印象,完成实验也可以增强自信,让自己进一步研究。

六、参考链接

stm32通过I2C接口实现温湿度(AHT20)的采集 模拟IIC与硬件IIC的区别!

标签: 温度湿度传感器iic

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

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