AHT20传感器简单使用记录

文章分享了如何优化使用HAL库在CSDN上遇到的AHT20传感器I2C通信问题,通过调整接收缓冲区长度和数据解析代码,解决了数据读取不正确的问题,提供详细的初始化和读取函数示例。
摘要由CSDN通过智能技术生成

在CSDN上看了很多文章都是用的模拟IIC读取的,代码太冗余了。也找到有用hal库的,但是读取出来数据不对,发现是代码有些小问题,改了之后就能用了。下面就把改好的贴在下面。

void AHT20_Init()
{
   uint8_t readbuffer;
   HAL_Delay(40);
   HAL_I2C_Master_Receive(&hi2c1,AHT20_ADDRESS ,&readbuffer, 1,100);
   if((readbuffe[0]&0x08) == 0x00)
    {
      uint8_t sendbuffer[3]={0xBE,0x08,0x00};
      HAL_I2C_Master_Transmit(&hi2c1,AHT20_ADDRESS,&readbuffer,3,100);
     }
}

void AHT20_Read(float *Temperature, float *Humidity)
{
   uint8_t sendbuff[3] = {0xAC,0x33,0x00};
   uint8_t readbuff[6];
 
   HAL_I2C_Master_Transmit(&hi2c1,AHT20_ADDRESS,sendbuff,3,100);
 
   HAL_Delay(75);
  
   HAL_I2C_Master_Receive(&hi2c1,AHT20_ADDRESS,readbuff,6,100);//这里读取长度是6个,其他文章贴的1个,读取就会有问题
 if((readbuff[0] & 0x80) == 0x00)
  {
    uint32_t data = 0;
 
    data = ((uint32_t)readbuff[3]>>4)+((uint32_t)readbuff[2]<<4)+((uint32_t)readbuff[1]<<12);
    *Humidity = data * 100.0f/ (1<<20);
    data = (((uint32_t)readbuff[3] & 0X0F)<<16)+((uint32_t)readbuff[4]<<8)+((uint32_t)readbuff[5]);
    *Temperature = (data * 200.0f)/(1<<20) - 50;
	}
}

使用方法也很简单,初始化之后直接调用读取函数就行。

	HAL_Delay(50);
	AHT20_Init();//初始化
	HAL_Delay(50);

    float temperature, humidity;
	AHT20_Read(&temperature,&humidity);//读取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山间朝暮-CanEve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值