document.write('
')

澳门新莆京在线登录

创作

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

STM32外接DHT11温湿度传感器并通过OLED进行数据显示的设计电路与程序

码农爱学习 来源:码农爱学习 作者:码农爱学习 2022-06-07 09:09 次阅读
如何外接温湿度传感器实现当前环境温湿度的读取,并显示到OLED屏幕上。

1 DTH11温湿度传感器

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,包括一个电阻式感湿元件和一个NTC测温元件。

pYYBAGKeI0KAYkwXAABY5VeVh9M655.png

1.1 数据读取协议

微控制器MCU与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。

从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。

1.1.1 起始信号

总线空闲状态为高电平,MCU把总线拉低等待DHT11响应,MCU把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。

DHT11接收到主机的开始信号后,等待MCU的开始信号结束,然后发送80us低电平响应信号

MCU发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,MCU发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。

poYBAGKeI0qACqJrAACYOJAsx1w271.png

1.1.2 数据数字信号

总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1

数字0和数字1的表示,如下面图示:

数字0:50us低电平开始后,26-28us的高电平表示0

数字1:50us低电平开始后,70us的高电平表示1

如果读取响应信号为高电平,则DHT11没有响应,需要检查线路是否连接正常。

pYYBAGKeI1GAJ_FXAAFhGv-1YVM724.png

当最后一bit数据传送完毕后,DHT11拉低总线50us澳门新莆京在线登录,随后总线由上拉电阻拉高进入空闲状态。

1.1.3 温湿度数据格式

一次完整的数据传输为40bit,高位先出。数据分小数部分和整数部分,数据格式:

8bit湿度整数数据

8bit湿度小数数据

澳门新莆京在线登录 8bit温度整数数据

8bit温度小数数据

8bit校验和

数据传送正确时校验和数据等于“ 8bit 湿度整数数据 +8bit 湿度小数数据+8bit温度整数数据 +8bit 温度小数数据 ”所得结果的末8位。

1.2 接线

DHT11的数据读取只需要一根线,我使用的是PB8,另外,OLED用来显示温湿度的值,使用IIC通信,使用的是PB6和PB7。

pYYBAGKeI1mASyrHAAELN-XAScw161.png

2 程序编写

根据DHT11的数据读取协议,编写对应的数据读取函数。

2.1 DHT11复位和检测响应函数

澳门新莆京在线登录 首先是MCU向DHT11发送的起始信号,拉低20ms,再拉高30us。

u8 DHT11RstAndCheck(void)
{
    u8 timer = 0;

    __set_PRIMASK(1);          //关总中断
    DHT11_OUT = 0; 	           //输出低电平
    delay_ms(20);    	       //拉低至少18ms
    DHT11_OUT = 1; 	           //输出高电平
    delay_us(30);     	       //拉高20~40us
    while (!DHT11_IN)          //等待总线拉低,DHT11会拉低40~80us作为响应信号
    {
        timer++;               //总线拉低时计数
        delay_us(1);
    }
     (timer>100 || timer<20) //判断响应时间
    {
        __set_PRIMASK(0);      //开总中断
        return 0;
    }
	
    timer = 0;
    while (DHT11_IN)           //等待DHT11释放总线,持续时间40~80us
    {
        timer++;               //总线拉高时计数
        delay_us(1);
    }
    __set_PRIMASK(0);          //开总中断
    if (timer>100 || timer<20) //检测响应信号之后的高电平
    {
        return 0;
    }
	
    return 1;
}

2.2 数据读取

MCU向DHT11发送起始信号后,就可以接收DHT11的数据返回了,一次读取湿度和温度即可。

/*读取一字节数据,返回值-读到的数据*/
u8 DHT11ReByte(void)
{
    u8 i;
    u8 byt = 0;

    __set_PRIMASK(1);      //关总中断
    for (i=0; i<8; i++)
    {
        while (DHT11_IN);  //等待低电平,数据位前都有50us低电平时隙
		
        while (!DHT11_IN); //等待高电平,开始传输数据位
		
        delay_us(40);
        byt <<= 1;         //因高位在前,所以左移byt,最低位补0
        if (DHT11_IN)      //将总线电平值读取到byt最低位中
        {
            byt |= 0x01;
        }
    }
    __set_PRIMASK(0);      //开总中断

    return byt;
}

/*读取一次数据,返回参数:Humi-湿度,Temp-温度;返回值: 0-成功,1-失败*/
u8 DHT11ReadData(float *Humi, float *Temp)
{
    s8 sta = 0;
    u8 i;
    u8 buf[5];

    if (DHT11RstAndCheck())         //检测响应信号
    {
        for(i=0;i<5;i++)            //读取40位数据
        {
            buf[i]=DHT11ReadByte(); //读取1字节数据
        }
        if(buf[0]+buf[1]+buf[2]+buf[3] == buf[4]) //校验成功
        {
            u8 H_inte = buf[0]; //湿度整数部分数据
			u8 H_frac = buf[1]; //湿度小数部分数据
            u8 T_inte = buf[2]; //温度整数部分数据
			u8 T_frac = buf[3]; //温度小数部分数据
			
			char tmp1[8], tmp2[8];
			sprintf(tmp1, "%d.%d",H_inte,H_frac);
			sscanf(tmp1, "%f", Humi);
			sprintf(tmp2, "%d.%d",T_inte,T_frac);
			sscanf(tmp2, "%f", Temp);
        }
        sta = 0;
    }
    else //响应失败返回-1
    {
        *Humi = 88; //响应失败返回-1
        *Temp = 88; //响应失败返回-1
        sta = 1;
    }
    
    return sta;    
}

2.3 初始化

使用DHT11之前,进行引脚的初始化和器件的初始化。

/*DHT11初始化函数*/
u8 DHT11Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC端口
    GPIO_SetBits(GPIOB,GPIO_Pin_8);                     //设置PC13输出高电平,(先设置引脚电平可以避免IO初始化过程中可能产生的)
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;	        //设置DHT11数据引脚->PC13
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;    //设置为开漏输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //设置输出速率为50MHz
    GPIO_Init(GPIOB, &GPIO_InitStructure);	            //初始化GPIOC端口

    return DHT11RstAndCheck();                          //返回DHT11状态
}

3

在移植过U8g2库的hello_world例程上进行修改,在屏幕上显示温湿度。注意摄氏度单位的小圆圈,不知道怎么直接以符号的形式显示出来,我这里是单独画了一个小空心圆。

int main(void)
{	
	delay_init();	    //延时函数初始化	  
	_Init();		  	//初始化与LED连接的硬件
	IIC_Init();
	 
	u8g2_t u8g2;
	u8g2Init(&u8g2);
	u8g2_SetFontMode(&u8g2, 1);
	u8g2_SetFont(&u8g2, u8g2_font_unifont_t_symbols);
	
	DHT11Init();
	float Temp = 0;
	float Hu = 0;
	char strTemp[32];
	char strHumi[32];
	while(1)
	{
		u8g2_FirstPage(&u8g2);
		do
		{
			//draw(&u8g2);
			DHT11ReadData(&Humi, &Temp);
			sprintf(strTemp, "Temp: %.1f C", Temp);
			sprintf(strHumi, "Humi: %.1f %%", Humi);
			
			u8g2_ClearBuffer(&u8g2);
			u8g2_DrawStr(&u8g2, 0, 30, strTemp);
			u8g2_DrawCircle(&u8g2, 84, 22, 2, U8G2_DRAW_ALL);
		    u8g2_DrawStr(&u8g2, 0, 60, strHumi);
			u8g2_SendBuffer(&u8g2);			
			delay_ms(3000);
		} while (u8g2_NextPage(&u8g2));
    }
}

测试效果如下:

poYBAGKeI2SAB1d2AAHnclpA9_s846.png

4 总结

澳门新莆京在线登录 本篇介绍了如何在STM32上外接温湿度DHT11实现温湿度数据的读取,并通过OLED进行数据显示。

收藏 人收藏

评论

相关推荐

单片机STC12C5A60S2数据手册

STC12C5A60S2是一款基于高性能IT架构80C51 CPU的单片机,由STC MCU有限公司....
发表于 06-13 16:57 7次 阅读

单片机STC12C2052AD数据手册

STC12C2052AD系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超....
发表于 06-13 16:56 3次 阅读

单片机STC12C5201AD数据手册

STC12C5201AD是基于高性能IT架构80C51 CPU的单片机,由STC MCU有限公司生产....
发表于 06-13 16:54 4次 阅读

单片机STC12C5410AD数据手册

STC12C5410AD是一款基于高性能1T架构8051 CPU的单片微控制器由STC MCU有限公....
发表于 06-13 16:51 6次 阅读

单片机STC12C5620AD数据手册

STC12C5620AD是一种基于高性能IT架构8051 CPU的单片微控制器由STC MCU有限公....
发表于 06-13 16:46 5次 阅读

STC12H系列单片机技术参考手册

STCI2H系列单片机是不需要外部晶振和外部复位的单片机,是以超强抗干扰/超低价/高速/低功耗为目标....
发表于 06-13 16:45 3次 阅读

利尔达与ST联合发布STM32MP1开发板新品

近日,致力于提供物联网产品研发、技术应用、服务落地一站式解决方案的国家高新技术企业利尔达与ST意法半....
的头像 物联网观察 发表于 06-13 15:22 109次 阅读

CS5801 HDMI2.0b到DP1.4a转换器概述及特点

CS5801是HDMI2.0b到DP1.4a转换器。CS5801有一个HDMI2.0b输入,最大带宽....
发表于 06-13 15:14 103次 阅读

单片机课程指导书

单片机课程设计课程指导书
发表于 06-13 15:13 5次 阅读

STM32课程设计贪吃蛇

贪吃蛇课程设计
发表于 06-13 15:09 8次 阅读

STM32F103双串口实验

STM32F103双串口实验,程序将串口1和串口3全部调通,可同时使用
发表于 06-13 15:07 6次 阅读

基于8位单片机TM52F1376的LED小夜灯方案

随着智能家居越来越深入生活,很多智能家居走进了千家万户,小夜灯就是其中一种。小夜灯具备装饰的功能,同....
发表于 06-13 15:07 51次 阅读

STM32F407-双串口实验

STM32F407-双串口实验,程序将串口1和串口2全部调通,可同时使用
发表于 06-13 15:06 6次 阅读

89系列单片机上机指导

89系列单片机上机指导
发表于 06-13 14:20 6次 阅读

在生产中使用商品ARM评估平台的优缺点

  评估板非常适合评估特定处理器和进行试验。社区支持普遍良好,硬件投资极少。但是,如果您计划围绕评估....
的头像 星星科技指导员 发表于 06-13 14:11 127次 阅读

驱动程序接口协议发生变化

  工程师仍然可以选择最新工具的低成本版本(满载应用程序以满足当今的需求,只是没有针对所有未来的排列....
的头像 星星科技指导员 发表于 06-13 10:51 108次 阅读

ECOT力同步降压调节器概述

RY9135 16V 3A 500KHz ECOT力同步降压调节器 特性 •宽4.5V至16V工作输....
发表于 06-13 10:22 117次 阅读

单芯锂离子及锂聚电池保护IC的概述

特性 •充电器反向连接保护 •蓄电池反接保护 •过热保护 •过充电流保护 •两步过流检测: 在放电电....
发表于 06-13 09:38 42次 阅读

一种同时至此本地和远程升级的方法

常见的存储设备有SD卡,TF卡,U盘,硬盘等。将升级文件拷贝到存储设备中,设备启动的时候,通过ubo....
的头像 strongerHuang 发表于 06-13 09:33 76次 阅读

使用ADC0832与单片机的电量指示电路设计

在数字电路中,电平只有高和低两种状态,而在模拟电路中,电平理论上有无数个状态,在使用过程中就需要将两....
发表于 06-13 08:58 859次 阅读

1.       硬件准备接下来,我们的目的是做一个图像识别相关的事情,但由于我们这个Phytec开发板它并没有带...
发表于 06-12 14:44 271次 阅读

跃昉的开发板终于到了,跃昉的开发板终于到了。 等了一个月了吧。 在我们一次次的催促下,发货了。 话不多说了,拿到货后,第...
发表于 06-12 13:55 297次 阅读

【新提醒】stc单片机下载程序的原理是什么? - 单片机交流 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) ...
发表于 06-12 11:57 314次 阅读

锂离子/聚合物电池保护的高集成度解决方案

RY2230是锂离子/聚合物电池保护的高集成度解决方案。RY2230包含内部功率MOSFET、高精度....
发表于 06-12 10:12 135次 阅读

机器学习概述、工作原理及重要性

本文旨在为硬件和嵌入式工程师提供机器学习(ML)的背景,它是什么,它是如何工作的,它为什么重要,以及....
发表于 06-12 09:27 23次 阅读

利用单片机+OLED显示屏制作实时时钟

最近在学习OLED显示屏的应用,通过OLED显示时间、年、月、日,以及相关信息。还可以根据喜好添加不....
发表于 06-12 09:04 213次 阅读

基于单片机的LED灯光立方设计

光立方顾名思义就是会发光的立方体,光立方的基本原理是利用人眼的暂留效应,利用单片机控制LED灯快速的....
发表于 06-12 08:52 192次 阅读

基于51单片机的OLED显示图片文字

基于51单片机的OLED屏幕显示,可显示图片文字字母等。
发表于 06-12 00:43 695次 阅读

这是什么元件?感谢感谢!
发表于 06-11 19:34 663次 阅读

主板部分留有接口.详谈可加vx:13510974099.在广东东莞,深圳最好 程序要求:l 面板有中英文可切换界面。l 频率有上下限保护(可调...
发表于 06-11 18:46 540次 阅读

MH32F103ARPT6软硬件兼容STM32F103RCT

MH2103A(C)xxxx系列使用高性能的32位内核,最高工作频率216 MHz。 内置的存储器包....
发表于 06-11 15:52 26次 阅读

STM8S0系列特点单片机程序开发复制

STM8S0系列: STM8S001,STM8S003,STM8S005,STM8S007解成功 •....
的头像 ic芯片解密 发表于 06-11 11:14 24次 阅读

板子型号为野火F103指南者,本人在根据课本做点灯实验,将控制RBG小灯的三个引脚定义成了宏,然后写代码将其混合展现出不同的...
发表于 06-11 00:12 574次 阅读

飞凌嵌入式 OKT507-C开发板:安全策略漫谈

硬件平台:飞凌嵌入式 OKT507-C开发板 操作系统:Android10.0 飞凌嵌入式 T507....
发表于 06-10 17:18 308次 阅读

PWM脉冲宽度调制的基本原理及实现方法

PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散....
的头像 凡亿PCB 发表于 06-10 17:06 404次 阅读

本期是我们新推出的技术问答系列。该系列是针对演示某款产品的功能以及该款产品的一些常见应用问题解答。      ...
发表于 06-10 17:00 909次 阅读

MH180是一颗高灵敏度双极锁存性霍尔元件。它是温度稳定的抗应力传感器。利用斩波稳定技术,能够达到卓越的高温工作性能。降低了...
发表于 06-10 16:28 3124次 阅读

我们先来看看CW32F030的资源 从芯片资源和名称上看,就是冲着国际大厂的030的市场去的。 在当下这个缺芯的时期,国内有一...
发表于 06-10 16:06 185次 阅读

STC12C5410AD系列单片机器件

stc12c datasheet
发表于 06-10 16:02 65次 阅读

stc12c2052ad基于高性能1T架构8051 CPU的单片机

stc12c2052datasheet
发表于 06-10 16:00 68次 阅读

灵动微32位单片机MM32L0130在温控器中的应用

温控器的工作原理是通过温度传感器对环境温度自动进行采样、即时监控,当环境温度高于控制设定值时控制电路....
发表于 06-10 15:30 13次 阅读

灵动微MM32F0133C6P的规格配置是怎样的

灵动微MM32F0133C6P是以高性能的Arm®Cortex®-M0为内核的32位MCU,Arm®....
发表于 06-10 15:25 15次 阅读

发表于 06-10 15:04 112次 阅读

Robomaster开发板c型嵌入式软件教程

Robomaster开发板c型嵌入式软件教程
发表于 06-10 14:09 21次 阅读

超低功耗MCU的安全固件更新注意事项

  总之,越来越多的网络嵌入式产品正在创造潜在的高级安全威胁,使现场固件更新更容易受到远程攻击和利用....
的头像 星星科技指导员 发表于 06-10 07:33 166次 阅读

RTC时钟讲解(一)

什么是RTC RTC (Real Time Clock):实时时钟 RTC是个独立的定时器。RTC模....
的头像 嵌入式应用开发 发表于 06-09 17:48 383次 阅读

单片机的开发技巧有哪些,需要注意些什么

医用设备领域、汽车电子设备、机电一体化、自动化办公、航空航天领域、尖端武器和国防军事领域、计算机通讯....
发表于 06-09 17:31 30次 阅读

使用Cortex-M v7 MPU以实现现代嵌入式系统

  无论系统服务是从utasks还是调用,系统服务的操作都是一样的ptasks。例如,autask可....
的头像 星星科技指导员 发表于 06-09 17:20 240次 阅读

基于COM Express Mini和Qseven设计系统

  Qseven 和 SMARC 2.0 之间的主要区别在于接口的数量,它将应用领域划分为更深入的 ....
的头像 星星科技指导员 发表于 06-09 17:03 208次 阅读

架构师为何要为嵌入式应用程序实施HMP系统

  这需要使用除 Cortex-M 处理器之外的 Cortex-A 处理器。因此,越来越多的嵌入式系....
的头像 星星科技指导员 发表于 06-09 16:53 199次 阅读

利用GPGPU的高性能嵌入式系统

  了解 CPU 和 GPU 之间差异的一种简单方法是比较它们处理任务的方式。CPU 由几个针对顺序....
的头像 星星科技指导员 发表于 06-09 16:47 169次 阅读

基于SNTP协议的网络授时芯片CH9126概述

CH9126 基于 SNTP 协议的网络授时芯片。主要解决单片机等嵌入式设备时间同步问题。CH912....
的头像 hw13554961857 发表于 06-09 13:46 189次 阅读

嵌入式CPU模组助力工业产品的开发

为了探讨工业控制技术方案的演进,以及集成电路在工业控制领域的应用与发展,与非网在2022年6月1日在....
的头像 米尔MYIR 发表于 06-09 11:19 112次 阅读

基于APT32F1023F6U6的智能家用按摩仪系统

新材料和电子技术的进步使得按摩球装置实现了小型化和精确控制,大幅提升了按摩器具的舒适度,按摩器材越来....
发表于 06-09 10:49 880次 阅读

触摸按键原理

电容C通过电阻R放电,由于电容刚开始放电时电压为E,放电电流I=E/R,该电流很大,所以放电速度很快....
的头像 FPGA之家 发表于 06-09 10:19 172次 阅读

eFPGA技术的应用优势和实施注意事项

  包括大数据和深度学习在内的几乎所有机器学习应用程序都可以利用大多数 eFPGA 解决方案提供的可....
的头像 星星科技指导员 发表于 06-09 09:38 231次 阅读

为嵌入式浏览解锁GPU的强大功能

  因此,集中使用 GPU 是在不牺牲性能的情况下降低成本的关键。使用这种方法,下一代嵌入式芯片将能....
的头像 星星科技指导员 发表于 06-08 17:00 236次 阅读

浅谈PWM调制技术和PWM输出正余弦波

输出结果相位差45,度,占空比则50。CNT从0计数,当CNT=CCR,波形翻转,CNT溢出重新从0....
的头像 要长高 发表于 06-08 15:50 513次 阅读

普芯达GF90F0320产品手册

普芯达GF90F0320 产品收据手册,GF90F0320 是一颗采用高速低功耗 CMOS 工艺设计....
发表于 06-08 15:22 94次 阅读

基于STM32水温控制

基于STM32水温控制
发表于 06-08 14:26 153次 阅读

码农爱学习

文章:36 被阅读:136457

关注 113人关注
必威体育官网下载 365bet下载地址苹果版 永利app下载 必威体育注册 必威体育betway登录手机 365bet客户端下载 金沙彩票app 必威苹果客户端下载 必威体育app手机版 金沙彩票手机版下载 新澳门葡京网站多少 必威体育betway登录手机 必威体育app官方版下载 必威体育app官方版下载 必威betway中文版 澳门新莆京在线登录 必威体育betway登录手机 必威体育官网下载 澳门威尼斯人网上娱乐 必威登录网页版登录注册 必威体育app手机版 必威体育appios下载 金沙彩票app下载安装 365bet官方下载苹果版 365bet下载地址苹果版 澳门新莆京在线登录 Betway必威中文官网 365betapp苹果版下载 Betway必威中文官网 必威体育app官方版下载