基于STM32物联网环境采集系统设计 --------AHT10温湿度检测(5)

这篇具有很好参考价值的文章主要介绍了基于STM32物联网环境采集系统设计 --------AHT10温湿度检测(5)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、电路连接图

二、AHT10模块简介

三、AHT10模块工作原理

四、AHT10的通信方式

五、AHT10的时序图

5-1、AHT10测量指令时序图解析

5-2、AHT10读数据时序图解析

5-3、AHT10的温湿度转换公式

六、IIC的GPIO配置

  6-1、AHT10.C文件

6-2、AHT10.H文件

七、实现的功能


一、电路连接图

stm32 aht10,STM32物联网环境采集系统设计,物联网,stm32,单片机

图(1)AHT10电路连接图

二、AHT10模块简介

        AHT10是一款高精度、完全校准、贴片封装的温湿度传感器,使用MEMS的制作工艺,确保产品具有极高的可靠性与卓越的长期稳定性。该传感器包括一个电容式感湿元件和一个高性能CMOS微处理器相连接。其通信方式采用标准I²C通信方式,具有超小的体积、极低的功耗,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。AHT10支持较宽的工作电源电压范围,该器件可为各类常见应用场景提供低成本和低功耗优势,AHT10模块的温湿度传感器均在高精度的恒温恒湿腔室中进行出厂校准,直接输出经温度补偿后的湿度、温度等信息,用户无需要对湿度进行温度补偿,便可得到准确的温湿度信息。其参数包括输入电压范围:1.8V至3.6V,出厂经过标定校准,产品具有温度补偿功能,具有I²C接口,超低功耗,SMD封装,湿度精度±2% RH(典型值),温度精度±0.3℃(典型值)

三、AHT10模块工作原理

        AHT10模块的湿度传感器采用电容式感湿元件,通过测量周围环境中湿度变化引起的电容变化来测量湿度。同时,它还采用了微处理器进行数据处理和校准,以获得更准确的湿度测量结果,另外,AHT10模块还配有一个标准片上温度传感元件,用于测量周围环境的温度。微处理器对湿度和温度数据进行处理和校准,然后通过IIC通讯方式输出经过温度补偿的温湿度信息。

四、AHT10的通信方式

        AHT10的通信方式采用标准I2C通信方式。这是一种串行通信协议,用于在微处理器和外围设备之间进行数据传输。I2C通信使用两根线:一根是时钟线(SCL),用于同步数据的传输和接收;另一根是数据线(SDA),用于数据的传输和接收。AHT10通过I2C接口与微处理器或微控制器进行通信,实现温湿度数据的读取,IIC驱动例程见上文:基于STM32物联网环境采集系统设计 --------BH1750光照检测强度(4)-CSDN博客

不过值得注意的是,在使用AHT10与单片机进行IIC通信时尽量不要使用多个IIC设备使用同一组IIC接口,最好能够独立使用一组IIC与AHT10进行通信,详情见数据手册:

stm32 aht10,STM32物联网环境采集系统设计,物联网,stm32,单片机

五、AHT10的时序图

5-1、AHT10测量指令时序图解析

stm32 aht10,STM32物联网环境采集系统设计,物联网,stm32,单片机

图(2)AHT10发送测量命令时序图

从时序图可以看出,AHT10触发测量数据的指令分为以下步骤:

  1. 起始信号
  2. 写指令时IIC地址:0X70
  3. 读应答信号
  4. 发送触发测量指令0xAC
  5. 读应答信号
  6. 发送触发测量指令0x33
  7. 读应答信号
  8. 发送触发测量指令0x00
  9. 读应答信号
  10. 结束信号

        其中IIC地址0X70由七位地址0x38(011 1000)+ 第八位读写位(向左移一位)后,写指令为:0x70(0111 0000),读指令为:0x71(0111 0001),数据手册解析如下图所示:

stm32 aht10,STM32物联网环境采集系统设计,物联网,stm32,单片机

图(3)AHT10设备地址解析图

5-2、AHT10读数据时序图解析

stm32 aht10,STM32物联网环境采集系统设计,物联网,stm32,单片机

 图(4)AHT10读数据时序解析图

  1. 起始信号
  2. 读数据时IIC地址:0X71
  3. 读应答信号
  4. 读取AHT10当前状态
  5. 写应答信号
  6. 读取湿度数据
  7. 写应答信号
  8. 读取湿度数据
  9. 写应答信号
  10. 读取湿度低四位和温度高四位数据
  11. 写应答信号
  12. 读取温度数据
  13. 写应答信号
  14. 读取温度数据
  15. 写非应答信号
  16. 结束信号

        其中湿度与温度的数据为20位数据,所以分别需要读两次数据,其中第三次读取数据的时候湿度的低四位与温度的高四位共同保存在一个变量或数组内。

5-3、AHT10的温湿度转换公式

温湿度的转换公式如下图所示:

stm32 aht10,STM32物联网环境采集系统设计,物联网,stm32,单片机

 图(5)AHT10数据转换公式

六、IIC的GPIO配置

  6-1、AHT10.C文件

#include "AHT10.H"
#include "Delay.H"

#define AHT10_Addr 0X70
uint8_t AHT10_BUF[6];

#define AHT10_SDA_GPIO GPIO_Pin_13
#define AHT10_SCL_GPIO GPIO_Pin_14
#define AHT10_IIC_GPIO GPIOB

void AHT10_MyI2C_W_SCL(uint8_t BitValue)
{
	GPIO_WriteBit(AHT10_IIC_GPIO, AHT10_SCL_GPIO, (BitAction)BitValue);
	delay_us(10);
}

void AHT10_MyI2C_W_SDA(uint8_t BitValue)
{
	GPIO_WriteBit(AHT10_IIC_GPIO, AHT10_SDA_GPIO, (BitAction)BitValue);
	delay_us(10);
}

uint8_t AHT10_MyI2C_R_SDA(void)
{
	uint8_t BitValue;
	BitValue = GPIO_ReadInputDataBit(AHT10_IIC_GPIO, AHT10_SDA_GPIO);
	delay_us(10);
	return BitValue;
}

void AHT10_MyI2C_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIO_InitStructure.GPIO_Pin = AHT10_SDA_GPIO | AHT10_SCL_GPIO;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(AHT10_IIC_GPIO, &GPIO_InitStructure);
	GPIO_SetBits(AHT10_IIC_GPIO, AHT10_SDA_GPIO | AHT10_SCL_GPIO);
}
/**
  * @brief  IIC启动函数
  * @param  无
  * @retval 无
**/
void AHT10_MyI2C_Start(void)
{
	AHT10_MyI2C_W_SDA(1);
	AHT10_MyI2C_W_SCL(1);
	AHT10_MyI2C_W_SDA(0);
	AHT10_MyI2C_W_SCL(0);
}
/**
  * @brief  IIC结束函数
  * @param  无
  * @retval 无
**/
void AHT10_MyI2C_Stop(void)
{
	AHT10_MyI2C_W_SDA(0);
	AHT10_MyI2C_W_SCL(1);
	AHT10_MyI2C_W_SDA(1);
}
/**
	* @brief  IIC发送一个字节
  * @param  data为写入的数据
  * @retval 无 
**/
void AHT10_MyI2C_SendByte(uint8_t Byte)
{
	uint8_t i;
	for (i = 0; i < 8; i ++)
	{
		AHT10_MyI2C_W_SDA(Byte & (0x80 >> i));
		AHT10_MyI2C_W_SCL(1);
		AHT10_MyI2C_W_SCL(0);
	}
}
/**
	* @brief  IIC读取一个字节
  * @param  
  * @retval 字节数据
**/
uint8_t AHT10_MyI2C_ReceiveByte(void)
{
	uint8_t i, Byte = 0x00;
	AHT10_MyI2C_W_SDA(1);
	for (i = 0; i < 8; i ++)
	{
		AHT10_MyI2C_W_SCL(1);
		if (AHT10_MyI2C_R_SDA() == 1){Byte |= (0x80 >> i);}
		AHT10_MyI2C_W_SCL(0);
	}
	return Byte;
}
/**
	* @brief  IIC发送应答信号
  * @param  
  * @retval 
**/
void AHT10_MyI2C_SendAck(uint8_t AckBit)
{
	AHT10_MyI2C_W_SDA(AckBit);
	AHT10_MyI2C_W_SCL(1);
	AHT10_MyI2C_W_SCL(0);
}
/**
	* @brief  IIC等待应答信号
  * @param  
  * @retval 
**/
uint8_t AHT10_MyI2C_ReceiveAck(void)
{
	uint8_t AckBit;
	AHT10_MyI2C_W_SDA(1);
	AHT10_MyI2C_W_SCL(1);
	AckBit = AHT10_MyI2C_R_SDA();
	AHT10_MyI2C_W_SCL(0);
	return AckBit;
}

void AHT10_Init(void)
{
	AHT10_MyI2C_Init();
	delay_ms(50);
}
void AHT10_Rand_Data(float  *humi,float  *temp)
{
	uint8_t AHT_State,i; 
	uint32_t temp_bit,humi_bit;
	
	AHT10_MyI2C_Start();
	AHT10_MyI2C_SendByte(AHT10_Addr);
	AHT10_MyI2C_ReceiveAck();
	AHT10_MyI2C_SendByte(0XAC);
	AHT10_MyI2C_ReceiveAck();
	AHT10_MyI2C_SendByte(0X33);
	AHT10_MyI2C_ReceiveAck();
	AHT10_MyI2C_SendByte(0X00);	
	AHT10_MyI2C_ReceiveAck();	
	AHT10_MyI2C_Stop();
	delay_ms(80);
	
	AHT10_MyI2C_Start();
	AHT10_MyI2C_SendByte(AHT10_Addr + 1);
	AHT10_MyI2C_ReceiveAck();
	AHT_State = AHT10_MyI2C_ReceiveByte();
	AHT10_MyI2C_SendAck(0);
	if((AHT_State & 0x80) == 0)
	{
		for(i=0;i<5;i++)
		{ 		
			AHT10_BUF[i] = AHT10_MyI2C_ReceiveByte();	
			if(i == 4)
			{
				AHT10_MyI2C_SendAck(1);
			} 
			else	AHT10_MyI2C_SendAck(0);			
		} 
			AHT10_MyI2C_Stop();
			humi_bit = (AHT10_BUF[0]<<12)|(AHT10_BUF[1]<<4)|(AHT10_BUF[2]>>4);
			temp_bit = ((AHT10_BUF[2]&0X0F)<<16)|(AHT10_BUF[3]<<8)|(AHT10_BUF[4]);
			
			*humi = (humi_bit * 100.0/1024/1024+0.5);
			*temp = (temp_bit * 2000.0/1024/1024+0.5)/10.0-50;
	}	 


}

6-2、AHT10.H文件

#ifndef __AHT10_H
#define __AHT10_H 

#include "stm32f10x.h"                
void AHT10_MyI2C_Init(void);
void AHT10_MyI2C_Start(void);
void AHT10_MyI2C_Stop(void);
void AHT10_MyI2C_SendByte(uint8_t Byte);
uint8_t AHT10_MyI2C_ReceiveByte(void);
void AHT10_MyI2C_SendAck(uint8_t AckBit);
uint8_t AHT10_MyI2C_ReceiveAck(void);

void AHT10_Init(void);
void AHT10_Rand_Data(float  *humi,float  *temp);

#endif

6-3、main函数代码

#include "stm32f10x.h" 
#include "stdio.h"
#include "USAR.h"
#include "delay.h"
#include "AHT10.H"
/*  
	欢迎加入QQ群聊:726328854
	CSDN:云平台产品创建及添加链接:https://blog.csdn.net/qq_44942724/article/details/134492924
	哔哩哔哩视频:https://www.bilibili.com/video/BV1mw411H7bh/?spm_id_from=333.999.0.0
	CSDN:BH1750光照传感器原理及驱动代码链接:https://blog.csdn.net/qq_44942724/article/details/134757983?spm=1001.2014.3001.5501
	有道云笔记链接:https://note.youdao.com/ynoteshare/index.html?id=99a39eb24282bf94ed55c613cb81fe03&type=note&_time=1700385978659
*/

float AHT10_Temp;
float AHT10_Humi;

int main(void)
{		
	delay_init();
    usart1_Init(115200);
	AHT10_Init();
  while(1)
	{

		AHT10_Rand_Data(&AHT10_Humi,&AHT10_Temp);

	}	 
} 

七、实现的功能

        本文最终实现STM32F103C8T6单片机读取AHT10温湿度传感器的数据,并温湿度保存至变量:AHT10_Humi和AHT10_Temp中,后续将会把检测到的温湿度显示在OLED屏幕中,并将温湿度上传至ONENET物联网云平台。

ONENET物联网云平台的产品添加:1-ONENET云平台的产品及设备添加_哔哩哔哩_bilibili

详细内容:云平台的产品及设备添加、STM32代码移植、微信小程序获取云平台数据、手机APP获取云平台数据笔记链接:https://note.youdao.com/ynoteshare/index.html?id=99a39eb24282bf94ed55c613cb81fe03&type=note&_time=1700385978659文章来源地址https://www.toymoban.com/news/detail-837125.html

到了这里,关于基于STM32物联网环境采集系统设计 --------AHT10温湿度检测(5)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32的物联网环境监测系统

    基于机智云物联网的环境监测系统 视频演示 摘 要:随着人民对美好生活的向往,人们对于环境的重视程度越来越强烈,环境对生活的影响已经成为一个热点问题。本设计以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完

    2024年02月07日
    浏览(63)
  • STM32通过I2C接口实现温湿度(AHT20)的采集

    学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务: 1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C–读写EEPROM”原理章节) 2)阅读AHT20数据手册,编程实现:每隔

    2024年02月03日
    浏览(53)
  • 基于STM32与FPGA的数据采集系统的设计与实现

    数据采集系统在现代工程中起着至关重要的作用,用于实时获取和处理各种传感器或外部设备的数据。在本文中,我们将探讨如何基于STM32微控制器和FPGA(现场可编程门阵列)实现一个高效的数据采集系统。我们将详细介绍系统设计的关键步骤,并提供相应的源代码示例。

    2024年02月06日
    浏览(51)
  • STM32驱动AHT10&OLED显示温湿度

    AHT10是新一代的温湿度传感器,使用SMD封装,上面有一个改进型的MEMS半导体电容式湿度传感器和一个标准的片上温度传感器原件,可用于空调,除湿器等温湿度控制领域的检测。 电气参数 AHT10模块 工作电压 DC1.8-3.3V 通讯接口 IIC 湿度 分辨率:0.024 %RH 误差:±2%RH 温度 分辨率

    2024年02月01日
    浏览(48)
  • 基于STM32+物联网设计的货车重量检测系统(OneNet)

    基于STM32+物联网设计的货车重量检测系统(OneNet) 随着物流行业的迅速发展,货车作为一种重要的货物运输工具,在运输过程中需要对其载重进行检测,以确保安全和合规性。而传统的货车重量检测方法需要人工操作,时间成本高且易出现误差,不能满足现代化的物流需求。

    2024年02月08日
    浏览(41)
  • 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现

    作者: 颜孙炜 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wC12xZrc-1673843611066)(C:UsersadminAppDataRoamingTyporatypora-user-imagesimage-20230110223524043.png)] 用STM32F103C8T6自有的RTC功能实现一款数字钟的设计,包括温度输入检测和显示模块、数字钟显示模块

    2024年02月02日
    浏览(60)
  • 物联网毕业设计-基于stm32的温湿度监控系统

            近年来,随着科技的进步,计算机和电子技术在各个领域的应用越来越广泛,人们对温湿度的要求也越来越高。现在用于食品、药品和环境监测的仪器、仪表和计算机等设备越来越多,它们与人们生产、生活的关系越来越密切。如何实现温湿度的实时监控,避免因

    2023年04月24日
    浏览(52)
  • 【毕业设计】基于STM32的智能药箱系统设计与实现 - 物联网 单片机

    Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目 基于STM32的智能药箱系统设计与实现 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 照顾老人, 特别是提醒老人准时吃药已经成

    2024年02月01日
    浏览(85)
  • 【项目设计】基于STM32人脸识别系统 - 单片机 物联网 嵌入式

    项目设计主要是对于所学知识的整体回顾,需要结合各个学科,才能做出达到符合标准的设计。 文章的目的在分享优质的项目以及项目经验,提供设计思路,欢迎交流与指正不足之处。 由于人脸识别技术具有无需接触、安全性高、可靠性高等优点,在身份认证领域具有广阔

    2024年01月21日
    浏览(69)
  • 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于单片机的智能温控农业大棚系统 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 近年来我国的温室控制取得了 长足的进步, 首先在

    2024年02月02日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包