STM32-HAL库AHT10温湿度传感器(创社派-STM32F407ZGT6)

HAL库串口参考:

STM32-HAL库 串口配置,printf函数重定向(创社派-STM32F407ZGT6)_stm32usart3端口配置hal库-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/H_andQ/article/details/143374994?spm=1001.2014.3001.5502

一、AHT10基本介绍

1、总体概况

温湿度传感器是一种能够检测环境中的温度和湿度,并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。

2、工作原理

传感技术:AHT10采用了先进的电容式感湿元件和高精度的温度测量元件。湿度的测量是基于湿度敏感电容的变化,当环境湿度变化时,电容值会相应改变。温度测量则是通过集成的温度传感器,利用其对温度敏感的特性来获取温度数值。

数据输出:传感器通过I2C通信协议输出测量得到的温湿度数据。I2C是一种常用的串行通信协议,它只需要两根线(数据线SDA和时钟线SCL)就可以实现与微控制器(如单片机)的通信。

3、应用场景

环境监测:在智能家居系统中,AHT10可以放置在室内各个房间,用于监测房间内的温湿度情况,以便根据设定的条件自动控制空调、加湿器、除湿器等设备,提供舒适的居住环境。

农业领域:可以用于温室大棚内,监测温湿度环境,帮助农民合理调整灌溉、通风等操作,确保农作物生长在适宜的温湿度环境中。

工业控制:在一些对环境温湿度有要求的生产车间,如电子元件生产车间、食品加工车间等,AHT10可以实时监测温湿度,保证生产过程的稳定性和产品质量。

二、cubeMX配置

1、新建工程参考:

STM32-HAL库 新建工程以及点亮LED灯(创社派-STM32F407ZGT6)_hal库新建工程-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/H_andQ/article/details/143302091?spm=1001.2014.3001.55022、开启IIC

3、串口配置参考:

STM32-HAL库 串口配置,printf函数重定向(创社派-STM32F407ZGT6)_stm32usart3端口配置hal库-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/H_andQ/article/details/143374994?spm=1001.2014.3001.5502

三、keil5代码

1、添加AHT10.c文件,copy以下代码(添加步骤参考)STM32-HAL库MPU6050姿态传感器(创社派-STM32F407ZGT6)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/H_andQ/article/details/143466955?spm=1001.2014.3001.5502

#include "AHT10.h"
 
/**
 * @brief  AHT10 初始化
 * @param  void
 * @retval void
 */
void AHT10_Init(void)
{
    uint8_t senddata;
    senddata = AHT10_Init_com;
    HAL_I2C_Master_Transmit(&hi2c2, AHT10_Write_ADDRESS, &senddata, 1, 0xFFFF);
}
 
/**
 * @brief  AHT10 软复位
 * @param  void
 * @retval void
 */
void AHT10_SoftReset(void)
{
    uint8_t senddata;
    senddata = AHT10_SoftReset_com;
    HAL_I2C_Master_Transmit(&hi2c2, AHT10_Write_ADDRESS, &senddata, 1, 0xFFFF);
    HAL_Delay(20);
}
 
/**
 * @brief  AHT10触发测量
 * @param  void
 * @retval void
 */
void AHT10_TrigeMea(void)
{
    uint8_t senddata[3];
    senddata[0] = AHT10_TrigeMea_com;
    senddata[1] = 0x33; // DATA0
    senddata[2] = 0x00; // DATA1
    HAL_I2C_Master_Transmit(&hi2c2, AHT10_Write_ADDRESS, senddata, 3, 0xFFFF);
    HAL_Delay(80);
}
 
/**
 * @brief  AHT10 设备读取 相对湿度和温度
 * @param  float *humidity:湿度信息;
 *         float *temperature:温度信息。
 * @retval uint8_t:0-读取数据正常; 1-读取设备失败,设备一直处于忙状态,不能获取数据
 */
uint8_t AHT10_Read_predata(float *humidity, float *temperature)
{
    AHT10_TrigeMea();
    HAL_Delay(75);
    static uint32_t humi, temp;
    uint8_t readdata[6];
    uint8_t BusyIndication, CalEnable;
    HAL_I2C_Master_Receive(&hi2c2, AHT10_Read_ADDRESS, readdata, 6, 0xFFFF);
    BusyIndication = (readdata[0] >> 7) & 0x01; // 状态标志位
    CalEnable = (readdata[0] >> 3) & 0x01;      // 校准标志位
    if (CalEnable == 0)
    {
        AHT10_SoftReset();
    }
    if (BusyIndication == 0)
    {
        humi = (readdata[1] << 12) | (readdata[2] << 4) | (readdata[3] >> 4);
        temp = ((readdata[3] & 0x0F) << 16) | (readdata[4] << 8) | (readdata[5]);
        *humidity = ((humi * 100.0) / 1048576);
        *temperature = ((float)temp / 1048576) * 200 - 50;
        return 0;
    }
    return 1;
}
 

2、添加AHT10.h文件

#ifndef _AHT10_H_
#define _AHT10_H_
 
#include "i2c.h"
 
// 定义AHT10地址
#define AHT10_ADDRESS 0x70
#define AHT10_Write_ADDRESS 0x70
#define AHT10_Read_ADDRESS 0x71
 
// 定义AHT10命令
#define AHT10_Init_com 0xE1      // 1110 0001
#define AHT10_SoftReset_com 0xBA // 1011 1010
#define AHT10_TrigeMea_com 0xAC  // 1010 1100
 
 
 
 
void AHT10_SoftReset(void);
void AHT10_TrigeMea(void);
void AHT10_Init(void);
uint8_t AHT10_Read_predata(float *humidity, float *temperature);
 
#endif

3、在main.c中

①添加头文件

/* USER CODE BEGIN Includes */


#include "AHT10.h"


/* USER CODE END Includes */

②初始化函数

 /* USER CODE BEGIN 2 */


HAL_Delay(20);
AHT10_Init();
 

float humidity,temperature;


  /* USER CODE END 2 */

③while循坏

 /* USER CODE BEGIN 3 */
		
		AHT10_Read_predata(&humidity,&temperature);
		
		printf("湿度:%.2f%%;温度:%.2f\r\n",humidity,temperature);
		
		HAL_Delay(1000);

		
		
		
  }
  /* USER CODE END 3 */

四、效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值