基于STM32F103C8T6单片机的DHT11温湿度传感器与OLED显示屏实时动态数据监测系统设计

这篇具有很好参考价值的文章主要介绍了基于STM32F103C8T6单片机的DHT11温湿度传感器与OLED显示屏实时动态数据监测系统设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

标题:

摘要:
本文提出了一种利用STM32F103C8T6微控制器,结合DHT11数字温湿度传感器和OLED显示屏实现环境温湿度实时、直观显示的方法。该系统通过低功耗且精确的DHT11传感器获取环境温湿度信息,并借助于STM32F103C8T6强大的处理能力和I/O资源进行数据读取、解析以及控制OLED屏幕显示。研究内容包括硬件接口设计、软件程序开发以及实际应用测试。

一、引言
随着物联网技术的发展和智能设备的需求增长,对环境参数(如温度和湿度)的实时监控显得尤为重要。本研究旨在设计并实现一个以STM32F103C8T6为核心,搭配DHT11温湿度传感器和OLED显示屏的低成本、高效率实时温湿度监测系统。

二、系统设计与实现
1. 硬件设计:阐述了如何将DHT11温湿度传感器与STM32F103C8T6的GPIO端口连接,以及采用何种通信协议进行数据交互。同时描述了OLED显示屏的选型、接口设计及其与STM32F103C8T6的I2C或SPI连接方式。

2. 软件设计与算法实现:详细介绍了STM32F103C8T6下驱动DHT11读取温湿度数据的具体流程,包括数据包的接收、解码及错误检测机制;同时,说明了如何编写OLED显示屏驱动程序,实现数据显示格式的定制与刷新操作。

三、实验结果与分析
进行了系统的功能验证和性能测试,展示了系统在不同环境条件下的温湿度采集精度和响应速度,并对比分析了显示效果和系统稳定性。

四、结论
总结了基于STM32F103C8T6的DHT11-OLED温湿度监测系统的设计成果,强调其在智能家居、环境监测等领域的广泛应用前景,同时讨论了未来可能的技术优化方向。

关键词:STM32F103C8T6;DHT11温湿度传感器;OLED显示屏;实时监测;嵌入式系统设计

注意:由于论文写作需配合实际项目进展和实验数据,上述提纲仅供参考,具体撰写时需根据实际工作细节和实验数据来填充和完善。

#include "dht11.h"
#include "delay.h"

void DHT11_IO_OUT(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(DHT11_GPIO_CLK|RCC_APB2Periph_AFIO, ENABLE);	 
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 
	
	
 	GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;				 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure);				 
}

void DHT11_IO_IN(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(DHT11_GPIO_CLK|RCC_APB2Periph_AFIO, ENABLE);	 
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);     
	
 	GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;				 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 		 
 	GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure);				 
}


void DHT11_Rst(void)	   
{                 
	DHT11_IO_OUT(); 	
  DHT11_DQ_OUT=0; 	
  delay_ms(20);    	
  DHT11_DQ_OUT=1; 	
	delay_us(30);     	
}

uint8_t DHT11_Check(void) 	   
{   
	uint8_t retry=0;
	DHT11_IO_IN(); 
    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
	{
		retry++;
		delay_us(1);
	};	 
	if(retry>=100)return 1;
	else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
	{
		retry++;
		delay_us(1);
	};
	if(retry>=100)return 1;	    
	return 0;
}

uint8_t DHT11_Read_Bit(void) 			 
{
 	uint8_t retry=0;
	while(DHT11_DQ_IN&&retry<100)//等待变为低电平
	{
		retry++;
		delay_us(1);
	}
	retry=0;
	while(!DHT11_DQ_IN&&retry<100)//等待变高电平
	{
		retry++;
		delay_us(1);
	}
	delay_us(40);//等待40us
	if(DHT11_DQ_IN)return 1;
	else return 0;		   
}

uint8_t DHT11_Read_Byte(void)    
{        
	uint8_t i,dat;
	dat=0;
	for (i=0;i<8;i++) 
	{
		dat<<=1; 
		dat|=DHT11_Read_Bit();
  }						    
  return dat;
}

uint8_t Read_DHT_Data(uint8_t *temp,uint8_t *humi)    
{        
		uint8_t buf[5];
		uint8_t i;
		DHT11_Rst();
		if(DHT11_Check()==0)
		{
				for(i=0;i<5;i++)//读取40位数据
				{
						buf[i]=DHT11_Read_Byte();
				}
				if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
				{
						*humi=buf[0];
						*(humi + 1)=buf[1];
						*temp=buf[2];
						*(temp + 1)=buf[3];
				}
		}
		else
		{
				return 1;
		}			
		return 0;	    
}
   	 
uint8_t DHT11_INIT(void)
{	 		    
		DHT11_Rst();  
		return DHT11_Check();
} 







#ifndef __DHT11_H
#define __DHT11_H 
#include "sys.h"   
										   
#define	DHT11_DQ_OUT PAout(7) //数据端口	PA15 
#define	DHT11_DQ_IN  PAin(7)  //数据端口	PA15

#define DHT11_GPIO_PORT    	GPIOA			              //GPIO端口
#define DHT11_GPIO_CLK 	    RCC_APB2Periph_GPIOA		//GPIO端口时钟
#define DHT11_GPIO_PIN		GPIO_Pin_7			        //连接到SCL时钟线的GPIO

uint8_t DHT11_INIT(void);//初始化DHT11
uint8_t Read_DHT_Data(u8 *temp,u8 *humi);//读取温湿度
uint8_t DHT11_Read_Byte(void);//读出一个字节
uint8_t DHT11_Read_Bit(void);//读出一个位
uint8_t DHT11_Check(void);//检测是否存在DHT11
void DHT11_Rst(void);//复位DHT11    
#endif















main

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "oled.h"

#include "string.h"

#include "DHT11.h" 

int main(void)
{
		uint8_t wendu[2] = {0};																		//wendu[0]:存储温度数据整数,wendu[1]:存储温度数据小数	
		uint8_t shidu[2] = {0};	
	
		delay_init();
	
		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);						//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
		
		
		
		
		
		
		
		
		
		
		
		DHT11_INIT();
		
		OLED_Init();			//初始化OLED  
		
		OLED_Clear();
		
		OLED_ShowCHinese(0,0,0);//温
		OLED_ShowCHinese(18,0,1);//度
		OLED_ShowString(36,0,":",16);
		OLED_ShowCHinese(92,0,4);//摄氏度符号
		
		OLED_ShowCHinese(0,2,3);//湿
		OLED_ShowCHinese(18,2,1);//度
		OLED_ShowString(36,2,":",16);
		OLED_ShowString(93,2,"%",16);
		OLED_ShowString(105,2,"RH",16); 
		
		while(1)
		{
				Read_DHT_Data(wendu, shidu);	
			
				OLED_ShowNum(54,0,wendu[0],2,16);//温度整数
				OLED_ShowString(72,0,".",16);	 	 //小数点
				OLED_ShowNum(74,0,wendu[1],2,16);//温度小数
			
				OLED_ShowNum(54,2,shidu[0],2,16);//湿度整数
				OLED_ShowString(72,2,".",16);		 //小数点
				OLED_ShowNum(74,2,shidu[1],2,16);//湿度小数
			
				delay_ms(1000);
		}
}


基于STM32F103C8T6单片机的DHT11温湿度传感器与OLED显示屏实时动态数据监测系统设计,STM32,单片机,stm32,嵌入式硬件

 后续会更新连接阿里云平台的代码文章来源地址https://www.toymoban.com/news/detail-806451.html

到了这里,关于基于STM32F103C8T6单片机的DHT11温湿度传感器与OLED显示屏实时动态数据监测系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32项目设计:基于stm32f103c8t6智能电梯系统

    资料链接:待更新~ 哔哩哔哩视频链接:https://www.bilibili.com/video/BV17D4y1V7HG/?vd_source=e5082ef80535e952b2a4301746491be0(bilibili:化作尘my) 资料链接:https://pan.baidu.com/s/1qObK7KBl50RmFrAtoX12kw 提取码:iih4 实物链接:https://m.tb.cn/h.5h5mDXI?tk=MdxLWYHgKnz CZ0001 1、OLED显示当前楼层、目标楼层等信息

    2024年02月03日
    浏览(57)
  • 基于STM32F103C8T6ADC检测交流电压

    上篇文章写了硬件部分的实现思路,通过采样电阻的到小电压后经过二级放大电路得到单片机可处理的交流电压,此文介绍了如何采用单片机采集交流电压以及stm32ADC外设的使用。首先是硬件电路部分。  电路没有采用核心板,而是直接将芯片焊接到主板上,采用type-c接口供

    2024年02月12日
    浏览(56)
  • STM32f103c8t6模板的搭建-基于正点例程

           笔者认为正点编写的官方例程结构较为整洁,可以便于后期的例程开发,如果开发者对于项目开发中芯片要求较高的话,有很多人会选择正点的开发板,但是通常大多数是stm32初学者会选择用价格更为便宜的c8t6来进行学习,而正点选用的教程开发板大多都是些RC、ZE、

    2024年02月06日
    浏览(68)
  • 基于STM32F103C8T6的超声波测距应用

    #一、超声波HC_SR04简介 #二、超声波工作原理 #三、超声波测距步骤 #四、硬件接线 #五、项目代码 一、超声波HC_SR04简介 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触发)、Echo(回应) 工作电压与电流

    2024年02月03日
    浏览(47)
  • 基于stm32f103c8t6的fft频率计

    之前项目中需要用到正弦信号的频率测量,也参考了几个大佬的博客(链接如下),但可能是由于stm32的型号不匹配,虽然也在网上查了一些需要修改的地方,但结果一直不太对,后来经过自己摸索结果终于对了,在这里给大家分享下,具体原理不在赘述。 参考的部分大佬博

    2024年02月14日
    浏览(74)
  • 基于STM32F103C8T6的HC-06蓝牙通信

    如果朋友们 遇到了如下问题 ,可以仔细借鉴本文章和另一篇专门讲解 蓝牙通信问题 的文章,一定能够解决你在蓝牙通信时遇到的诸多困难 1.在调试蓝牙模块AT指令时无返回值 2.身边 无USB转TTL模块 可以直接调试蓝牙模块(本人就是由于无模块花了了整整一天才调试成功)

    2024年02月03日
    浏览(69)
  • 【单片机】STM32单片机,RTC实时时钟,STM32F103C8T6,程序,万年历,数字时钟

    我以STM32F103C8T6为例,但STM32F103的RTC是通用的,STM32F103C8T6有一个原理图: https://qq742971636.blog.csdn.net/article/details/131288390 用纽扣电池给VBAT供电(要共地),即可实现掉电后依旧走时的能力。 主要特性(来源于STM32中文参考手册V10.pdf): 记得加标准库文件: 串口接收:

    2024年02月11日
    浏览(56)
  • HX711压力传感器(基于STM32F103C8T6)

    HX711模块是我们目前比较常见的压力传感器模块,主要的作用是用来做压力检测,重量监测等等。博主的这篇博文主要实现功能为,在对重量或者压力进行监测的同时,可以累加或者清零数值,在此基础上就可以对比如饮水量进行统计等等。 HX711模块是市面上比较常见的模块

    2024年02月11日
    浏览(58)
  • 基于stm32f103c8t6的定时器详解(持续更新)

    先声明:stm32f103c8t6中没有基本定时器、只有TIM1-TIM4:分别是高级定时器和通用定时器(对照下图请自行阅读stm32f103x的datasheet) 1、定时器功能:定时、输出比较、输入捕获、互补输出,其中基本定时器只有定时功能、通用定时器只没有互补输出功能、高级定时器具有所有功能

    2023年04月24日
    浏览(70)
  • [STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

    目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数,和重定向printf) Uart.c main.c  3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢? 4.小车PWM调速,  6.跟随功能 7.避障功能 超声波测距

    2024年02月13日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包