【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)

一、温湿度传感器:

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

原理:

温湿度传感器通常基于不同的物理原理,以下是一些常见的原理:

  1. 热电偶原理:热电偶传感器通过两种不同金属导线连接点的电压变化来感应温度。

  2. 热敏电阻原理:热敏电阻的电阻值随温度变化而变化,通过测量电阻值可以计算出温度。

  3. 湿敏电容原理:湿敏电容的电容值会随着湿度的变化而变化,通过测量电容值可以确定湿度。

  4. 露点温度原理:通过测量空气冷却至露点时的温度来确定湿度。

作用:

  • 环境监测:监测室内外环境的温湿度,用于舒适度控制。
  • 工业控制:在工业生产过程中,控制环境的温湿度以保证产品质量。
  • 农业:监测温室或农田的温湿度,优化作物生长条件。
  • 医疗:医院等场所需要精确控制温湿度以保证病人舒适及设备正常运作。
  • AHT10温湿度传感器:

      AHT10,新一代温湿度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚SMD 封装,底面 4 x 5mm ,高度1.6mm。传感器输出经过标定的数字信号,标准 I2C 格式。AHT10 配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器,经过改进使其在恶劣环境下的性能更稳定。每一个传感器都经过校准和测试,在产品表面印有产品批号。由于对传感器做了改良和微型化改进,因此它的性价比更高,并且最终所有设备都将得益于尖端的节能运行模式。

      应用范围主要在暖通空调 、除湿器、测试及检测设备、消费品、汽车 、自动控制、数据记录器、气象站、家电、湿度调节、医疗及其他相关温湿度检测控制。

    电气特点:

  • 数字输出:AHT10采用数字I2C接口,与微控制器通信方便。
  • 精度高:温度测量精度为±0.5°C,湿度测量精度为±2%RH。
  • 响应速度快:快速响应环境中的温湿度变化。
  • 低功耗:适合电池供电的便携式设备。
  • 集成度高:AHT10将传感器、模拟信号处理、数字接口等功能集成在一个小型封装内。
  • AHT10的工作流程大致如下:

    1. 上电初始化:AHT10在上电后需要初始化,这通常通过发送特定的命令序列来完成。
    2. 测量:初始化后,可以命令AHT10进行一次或周期性的温湿度测量。
    3. 数据读取:测量完成后,通过I2C接口读取测量数据。
    4. 数据处理:将读取的原始数据转换为实际的温湿度值。

    二、cubeMX配置

     可以参考我的新建工程系列教程

    stm32-HAL库+cubeMX新建工程教程系列https://blog.csdn.net/qq_39150957/article/details/143087351?fromshare=blogdetail&sharetype=blogdetail&sharerId=143087351&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link

    1、开启I2C

    2、开启串口

    具体串口配置如下:

    【STM32-HAL库】串口配置、printf函数重定向https://blog.csdn.net/qq_39150957/article/details/136638229?fromshare=blogdetail&sharetype=blogdetail&sharerId=136638229&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link

    三、编写代码

    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
    

    AHT10.c

    #include "AHT10.h"
    
    /**
     * @brief  AHT10 初始化
     * @param  void
     * @retval void
     */
    void AHT10_Init(void)
    {
        uint8_t senddata;
        senddata = AHT10_Init_com;
        HAL_I2C_Master_Transmit(&hi2c1, 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(&hi2c1, 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(&hi2c1, 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(&hi2c1, 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;
    }
    
    

    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 */

    主循环内代码

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

    四、接线示意

    I2C接模块,我们可以从cubeMX中配置看到引脚及引脚定义

    STM32       

    AHT10温湿度传感器

    PB6 SCL
    PB7 SDA
    3.3V VCC
    GND        GND

    串口接引脚我们也可以从下面引脚示意中看到

    STM32 串口模块
    PA9 RX
    PA10 TX
    3.3V VCC
    GND GND

    五、运行效果

    我们打开串口助手即可查看到当前的效果

    我哈了一口气,所以看到温度在上升、湿度也在上升。

    工程下载

    通过百度网盘分享的文件:AHT10.zip 提取码:6666https://pan.baidu.com/s/1hoSKvpqDYm9s_rrKE9KCEQ

    作者:暮雪倾风

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)

    发表回复