HAL库串口参考:
一、AHT10基本介绍
1、总体概况
温湿度传感器是一种能够检测环境中的温度和湿度,并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。
2、工作原理
传感技术:AHT10采用了先进的电容式感湿元件和高精度的温度测量元件。湿度的测量是基于湿度敏感电容的变化,当环境湿度变化时,电容值会相应改变。温度测量则是通过集成的温度传感器,利用其对温度敏感的特性来获取温度数值。
数据输出:传感器通过I2C通信协议输出测量得到的温湿度数据。I2C是一种常用的串行通信协议,它只需要两根线(数据线SDA和时钟线SCL)就可以实现与微控制器(如单片机)的通信。
3、应用场景
环境监测:在智能家居系统中,AHT10可以放置在室内各个房间,用于监测房间内的温湿度情况,以便根据设定的条件自动控制空调、加湿器、除湿器等设备,提供舒适的居住环境。
农业领域:可以用于温室大棚内,监测温湿度环境,帮助农民合理调整灌溉、通风等操作,确保农作物生长在适宜的温湿度环境中。
工业控制:在一些对环境温湿度有要求的生产车间,如电子元件生产车间、食品加工车间等,AHT10可以实时监测温湿度,保证生产过程的稳定性和产品质量。
二、cubeMX配置
1、新建工程参考:

3、串口配置参考:
三、keil5代码
1、添加AHT10.c文件,copy以下代码(添加步骤参考)STM32-HAL库MPU6050姿态传感器(创社派-STM32F407ZGT6)-CSDN博客
https://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 */
四、效果

&spm=1001.2101.3001.5002&articleId=143471792&d=1&t=3&u=920bb106c47042a4a58c65eed503775e)
1万+

被折叠的 条评论
为什么被折叠?



