基于I2C通信协议的AHT21B温湿度传感器数据采集

文章目录

  • 一、I2C简介
  • 二、“硬件I2C”与“软件I2C”
    • 1、硬件I2C
    • 2、软件I2C
    • 3、两者区别
  • 三、AHT20温湿度传感器数据采集
    • 1、任务要求
    • 2、实验器材
    • 3、主要代码
    • 4、烧录程序
  • 四、参考资料

一、I2C简介

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

  • 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
  • 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
  • 这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
  • IIC 总线时序图如图所示:
    基于I2C通信协议的AHT21B温湿度传感器数据采集_第1张图片

二、“硬件I2C”与“软件I2C”

1、硬件I2C

硬件I2C是由I2C控制器实现各种时序和应答,是MCU内置的IIC硬件模块,接收发送都由硬件完成,占用MCU资源少,有中断处理对应芯片上的I2C外设,有专用的I2C管脚,有相应I2C驱动电路。

2、软件I2C

软件模拟I2C就意味着你要用软件模拟I2C的时序,并且要随时监控I2C总线上的各种状态并作出相应的回应,占用MCU资源,如果总线上的数据交换比较频繁,那cpu基本就不能做其他事情了,否则就会丢数据。

3、两者区别

  • 硬件IIC用法比较复杂,模拟IIC的流程更清楚一些。

  • 硬件IIC速度比软件快,并且可以用DMA

  • 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。

三、AHT20温湿度传感器数据采集

1、任务要求

  • 每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)。

2、实验器材

① STM32最小核心板(STM32F103C8T6)
②奥松AHT21B温湿度传感器
③USB转TTL(ch340芯片)
④ IDE:keil5
⑤ 实验所用串口:USART1

3、主要代码

  • 完整代码是在正点原子的I2C实验的库函数版本与奥松的AHT20的读取示例程序两者结合而成
  • main.c
#include "delay.h"
#include "AHT20tem.h"
#include "sys.h"
#include "usart.h"

 int main(void)
 {	 	
    u32 CT_data[2];
    volatile float  c1=0,t1=0;     
     
    delay_init();	    	 //延时函数初始化	  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(115200);	 //串口初始化为115200
    AHT20tem_init();    
	
	delay_ms(40);//刚上电,延时40ms才可以读取状态
	
	while(1)
	{
       
        delay_ms(1000);
        AHT20_Read_CTdata(CT_data);       //不经过CRC校验,直接读取AHT20的温度和湿度数据    推荐每隔大于1S读一次

        c1 = CT_data[0]*100*10/1024/1024;  //计算得到湿度值(放大了10倍)
        t1 = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍)
        
        printf("湿度:%.1f\r\n",(c1/10));
        printf("温度:%.1f度\r\n",(t1/10));
		printf("\r\n");
		delay_ms(1000);
        
	 }

}

4、烧录程序

  • 将AHT21B温湿度传感器连接到stm32核心板上,对应接口如下:
AHT21B stm32核心板
SCL PB6
SDA PB7
VCC 3.3V
GND GND
  • 效果展示
    常温下:
    基于I2C通信协议的AHT21B温湿度传感器数据采集_第2张图片
    用手捂住传感器后:
    基于I2C通信协议的AHT21B温湿度传感器数据采集_第3张图片

四、参考资料

1、https://blog.csdn.net/weixin_40774605/article/details/88399276
2、AHT20产品手册
3、正点原子I2C实验讲解视频
4、AHT20的读取示例程序
5、正点原子STM32F103最小系统板开发指南-库函数版本_V1.1

你可能感兴趣的:(stm32,传感器,stm32,嵌入式)