温湿度采集与OLED显示

温湿度采集与OLED显示

一、I2C总线协议

定义:I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

一)I2C协议的物理层和协议层

1.物理层

I2C是一个支持设备的总线。可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。对于I2C 总线,只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。I2C 通讯设备常用连接方式

在这里插入图片描述

2.协议层

主要是定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等。

通讯的起始和停止信号

在这里插入图片描述

数据有效性

在这里插入图片描述

响应

在这里插入图片描述

一)硬件I2C

直接利用 STM32 芯片中的硬件 I2C 外设。

硬件I2C的使用
只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。

二)软件I2C

直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。

软件I2C的使用
需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

三)两者的区别

硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。对于硬件I2C用法比较复杂,软件I2C的流程更清楚一些。如果要详细了解I2C的协议,使用软件I2C可能更好的理解这个过程。在使用I2C过程,硬件I2C可能通信更加快,更加稳定。

二、AHT20

一)代码撰写

1.AHT20芯片的使用过程

void  read_AHT20_once(void)
{
	delay_ms(10);

	reset_AHT20();//重置AHT20芯片
	delay_ms(10);

	init_AHT20();//初始化AHT20芯片
	delay_ms(10);

	startMeasure_AHT20();//开始测试AHT20芯片
	delay_ms(80);

	read_AHT20();//读取AHT20采集的到的数据
	delay_ms(5);
}

2.AHT20芯片读取数据

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,0x08是该芯片读取流程中规定的,如果读取过程没有问题,就对读到的数据进行相应的处理
	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");
	//根据AHT20芯片中,温度和湿度的计算公式,得到最终的结果,通过串口显示
	printf("温度:%d%d.%d",T1/100,(T1/10)%10,T1%10);
	printf("湿度:%d%d.%d",H1/100,(H1/10)%10,H1%10);
	printf("\r\n");
}

二)实验结果

在这里插入图片描述

三、总结

这部分需要认真理解AHT20如何读取数据,多研究代码是如何进行读取的过程。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现STM32温湿度采集系统,您需要以下材料: - STM32微控制器 - 温湿度传感器 - 电容 - 电阻 - 连接线 - 电源 接下来,您可以按照以下步骤进行操作: 1. 将STM32微控制器连接到计算机,并使用STM32CubeMX或Keil等软件进行编程。 2. 将温湿度传感器连接到STM32微控制器。 3. 配置STM32微控制器以读取温湿度传感器的数据。 4. 编写代码来解析传感器返回的数据,并将其显示在LCD屏幕上或通过串口发送给计算机。 在编写代码时,您可以使用C语言或基于HAL库的代码来访问STM32微控制器的GPIO端口和ADC模块。此外,您还可以使用RT-Thread等RTOS操作系统来简化代码开发。 需要注意的是,您需要确保正确连接传感器和微控制器,并使用电容和电阻来稳定电路。同时,您也需要选择合适的电源来为系统供电。 ### 回答2: STM32温湿度采集系统是一种基于STM32微控制器的设备,用于实时监测环境温度和湿度。它具有稳定可靠的性能和高精度的数据采集能力。 该系统主要由STM32微控制器、温湿度传感器、显示屏和通信模块等组成。STM32微控制器作为核心控制单元,具有强大的计算能力和丰富的外设接口,用于采集、处理和传输温湿度数据。 温湿度传感器用于将环境中的温度和湿度变化转化为电信号,并将其输入到STM32微控制器进行采集。由于传感器的选用和校准,系统能够实现高精度的数据采集,确保数据的准确性和稳定性。 显示屏模块用于显示当前的温度和湿度数值,以及其他相关信息。用户可以通过这个显示屏直观地了解当前环境的温湿度状况。 通信模块可以实现系统与其他设备的数据传输和远程监测。例如,可以通过无线方式将采集到的数据发送给上位机,实现远程数据监测和控制。 总之,STM32温湿度采集系统是一种高精度、稳定可靠的设备,能够实时、准确地监测环境中温度和湿度的变化。它在农业、气象、仓储和生产等领域有着广泛的应用,为用户提供了便利和可靠的环境监测解决方案。 ### 回答3: STM32温湿度采集系统是一种基于STM32微控制器的设备,旨在实时采集和监测环境的温度和湿度信息。它采用了先进的传感器技术和高性能的处理器,可以精确地测量当前环境的温湿度数据。 该系统的主要组成部分包括STM32微控制器、温湿度传感器、显示屏和通信接口。STM32微控制器是系统的核心,它具有强大的处理能力和丰富的外设接口,可以实现温湿度数据的实时采集和处理。 温湿度传感器是系统的重要部分,用于测量环境的温度和湿度。常见的温湿度传感器有DHT11、DHT22等,它们可以通过数字信号将温湿度数据传输给STM32微控制器。 系统还配备了显示屏,用于将测量到的温湿度数据以直观的方式展示出来。显示屏可以是液晶显示屏或者OLED屏幕,用户可以通过它实时查看环境的温湿度信息。 通信接口是系统的另一个重要组成部分,它可以将采集到的温湿度数据传输给其他设备,如电脑或无线网络。常见的通信接口有串口、USB口和无线通信模块等。 通过STM32温湿度采集系统,用户可以方便地监测和记录环境的温湿度变化。它广泛应用于农业、气象、仓储和生产领域,为用户提供了重要的环境数据支持,帮助他们做出科学的决策和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值