温湿度采集与OLED显示

温湿度采集与OLED显示

一、采集的温度-湿度值通过串口输出

1.“软件I2C”和“硬件I2C”

软件I2C是使用微控制器的通用I/O(GPIO)引脚来模拟I2C协议的时序。在软件I2C中,程序员需要编写代码来精确控制SDA和SCL线的电平变化,以模拟I2C的通信过程。

硬件I2C是指微控制器内置了专用的I2C硬件模块来处理I2C协议的所有细节。这个硬件模块通常包括一个I2C接口,它可以自动处理开始位、停止位、应答信号、时钟信号等。

2.实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机
1、创建工程

(1)打开STM32CubeMX,点击“ACCESS TO MCU SELECTOR"

在这里插入图片描述
(2)选择芯片STM32F103C8T6

在这里插入图片描述

(3)配置RCC


(4)配置sys


(5)配置USART1

在这里插入图片描述

(6)配置I2C1

在这里插入图片描述

(7)配置时钟

在这里插入图片描述

(8)配置文件信息并导出

!在这里插入图片描述

2、编辑代码

(1)在文件中加入aht20.c和aht20.h

aht20.c

#include "aht20.h"

#define AHT20_ADDRESS 0x70 // 从机地址
//AHT20 的驱动程序
 void AHT20_Init () //AHT20初始化函数  记住要在"aht20.h"中声明
{
  uint8_t readBuffer;//用于接收状态信息
  HAL_Delay(40);
  HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);//I2C读取函数,读数据函数 readBuffer此时获得了一个字节的状态字。
  if((readBuffer & 0x08) == 0x00) //判断第三位是否为0 发送0xBE命令初始化
  {
	  uint8_t sendBuffer [3] = {0xBE , 0x08 , 0x00};
	  HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);//I2C发送函数
  }

}

 void AHT20_Read(float *Temperature , float *Humidity) //AHT20读取温度湿度函数  记住要在"aht20.h"中声明
{
	uint8_t sendBuffer [3] = {0xAC , 0x33 , 0x00};
	uint8_t readBuffer [6];
	HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);
	HAL_Delay(75);
	HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);
	if((readBuffer[0] & 0x80) == 0x00)
	{
		uint32_t date = 0;//接收温湿度需要2个半字节 所以要32
		date = ((uint32_t )readBuffer[3] >> 4) + ((uint32_t )readBuffer[2] << 4) + ((uint32_t )readBuffer[1] << 12);//对数据进行移位拼接.
		*Humidity = date * 100.0f / (1 << 20);//(1 << 20) 意为2的20次方. 乘100.0可以表示为百分数

		date = (((uint32_t )readBuffer[3] & 0x0F)<< 16) + ((uint32_t )readBuffer[4] << 8) + (uint32_t )readBuffer[5];//& 0x0F: 将这个无符号整数与十六进制数0x0F进行按位与操作。0x0F的二进制表示为00001111,这个操作会保留readBuffer[3]的低四位,即将高四位清零。
		*Temperature = date * 200.0f / (1 << 20) - 50;
	}
}

aht20.h

<p>/*</p>
<ul>
<li>aht20.h
*</li>
<li>Created on: Apr 25, 2024</li>
<li>Author: lenovo
 */</li>

</ul>
<p>#ifndef INC_AHT20_H_
#define INC_AHT20_H_</p>
<p>#include &quot;i2c.h&quot;
 void AHT20_Init (void);</p>
<p> void AHT20_Read(float *Temperature , float <em>Humidity);
#endif /</em> INC_AHT20_H_ */</p>

(2)修改main.c

<p>/* USER CODE BEGIN Header */
/**</p>
<hr />
<ul>
<li>@file           : main.c</li>
<li>@brief          : Main program body</li>

</ul>
<hr />
<ul>
<li>@attention
*</li>
<li>Copyright (c) 2024 STMicroelectronics.</li>
<li>All rights reserved.
*</li>
<li>This software is licensed under terms that can be found in the LICENSE file</li>
<li>in the root directory of this software component.</li>
<li>If no LICENSE file comes with this software, it is provided AS-IS.
*</li>

</ul>
<hr />
<p>  <em>/
/</em> USER CODE END Header <em>/
/</em> Includes ------------------------------------------------------------------*/
#include &quot;main.h&quot;
#include &quot;i2c.h&quot;
#include &quot;usart.h&quot;
#include &quot;gpio.h&quot;</p>
<p>/* Private includes --------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值