四、STM32 AHT10温湿度传感器

一、AHT10

二、STM32CubeMX配置

三、代码移植

创建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   ÎÂʪ¶È²âÁ¿ÃüÁî

/*温湿度结构体*/
typedef struct{
	float humi;
	float temp;
}ahtData_t;

void AHT10_Init(void);
void AHT10_Read_predata(ahtData_t *ahtData); //¶ÁÈ¡ÎÂʪ¶È

#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(&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  ahtData->temp:温度
 *         ahtData->humi:湿度
 * @retval 
 */
void AHT10_Read_predata(ahtData_t *ahtData)
{
    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]);
        ahtData->humi = ((humi * 100.0) / 1024/1024);
        ahtData->temp = ((float)temp / 1024/1024) * 200 - 50;
//	return 0;
//    }
//	return 1;
}

四、串口调试

main.c添加或修改

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "AHT10.h"
/* USER CODE END Includes */   //添加头文件


int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_SPI1_Init();
  MX_I2C2_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  while (1)
  {
		HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
		HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
       /*AHT10*/
        ahtData_t AhtData;
		AHT10_Read_predata(&AhtData);

		printf("温度:%d/n",(uint8_t)AhtData.temp);	
		printf("湿度:%d/n",(uint8_t)AhtData.humi);
		HAL_Delay(100);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */	
  }
  /* USER CODE END 3 */
}

五、OLED调试(移植u8g2后调试)

STM32移植u8g2图形库(Pulse sensor和AHT10调试)

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值