1 dht11温湿度基础测量_第1页
1 dht11温湿度基础测量_第2页
1 dht11温湿度基础测量_第3页
1 dht11温湿度基础测量_第4页
1 dht11温湿度基础测量_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目4环境参数监测与显示系统的设计与实现12案例引导本项目主要讲解温湿度传感器、光照强度传感器和OLED显示模块、TFT-LCD显示屏、电子秤的工作原理及应用技术,介绍STM32F4系列微控制器的I2C、SPI、FSMC外设的使用细节。读者通过实施本项目的4个任务,应掌握以下内容。(1)常用的环境参数监测传感器的编程应用方法。(2)常见的通信接口的编程配置方法。(3)能完成有显示需求的应用程序开发。环境参数测量任务描述1任务目标(1)掌握常用的温湿度传感器的工作原理。(2)会编写环境温湿度监测的应用程序。任务4.1环境温湿度监测的应用开发32本任务要求设计一个应用程序,以实现对环境温湿度的监测。具体电路如图4-1所示。从图4-1中可以看到,单总线温湿度传感器DHT11与STM32F407微控制器的某个GPIO引脚相连。微控制器每隔1s采集一次温湿度数据,转换为指定格式之后,通过USART发送到上位机显示。显示样例为:“温度:25℃,湿度:67%”。任务内容图4-1环境参数测量4知识链接DHT11概述及其性能指标

DHT11是一款温湿度一体化的数字传感器,它的内部由一个电阻式的测湿元件和一个负温度系数NTC的测温元件组成,测湿与测温元件与一个高性能的8位单片机相连。DHT11的性能指标DHT115知识链接DHT11的数据格式DHT11与微控制器之间的通信采用单总线数据格式。DHT11单次传输5个字节(40Bit)的数据,高位先出。具体数据构成为:8Bit湿度整数数据+8Bit湿度小数数据+8Bit温度整数数据+8Bit温度小数数据+8Bit校验和,其中校验和为前四个字节的数据相加并保留低8位。图为从DHT11中一次性读取的数据样例。从DHT11中一次性读取的数据DHT116知识链接DHT11的传输时序DHT111.数据通信时序图微控制器(主机)与DHT11进行数据通信的时序如图所示,其中包括“主机探测DHT11是否正确连接”与“数据传输”两个过程:

首先主机发送开始信号,即拉低数据线保持t1(至少18ms)时间,然后拉高数据线t2(20~40μs)时间,然后读取DHT11的回应信号,正常的话,DHT11会拉低数据线,保持t3(40~50μs)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50μs)时间后,开始输出数据,每一比特数据都以低电平开始,时序如图4-4所示。DHT11的传输时序DHT113.单总线数据格式中数字‘0’和‘1’的表示方法8任务描述任务4.1环境温湿度监测的应用开发环境参数测量序号设备/资源数量是否准备到位(√)1STM32F407ZET6最小系统1

2DHT111

3杜邦线3

任务实施前必须准备好表4-2所列的设备/资源。表4-2设备/资源清单表硬件连接将DHT11温湿度传感器的VCC引脚连接3.3V电压,GND引脚接地,DATA引脚与微控制器的某GPIO引脚(本任务选择PG9)相连。9任务描述任务4.1环境温湿度监测的应用开发环境参数测量任务描述要完成本任务,可将实施步骤分成以下7步。使用STM32CubeMX完成基础工程的创建和配置。在工程中添加代码包。在源文件中添加代码。编译代码。硬件环境搭建。模块固件下载。结果验证。具体实施步骤如下。10外设配置任务4.1环境温湿度监测的应用开发环境参数测量PG9配置USART1配置11时钟配置任务4.1环境温湿度监测的应用开发环境参数测量12软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.h文件如程序清单4-1所示。程序清单4-1:#ifndef__DHT11_H#define__DHT11_H#include

"main.h"#defineDHT11_DATA_PinGPIO_PIN_9#defineDHT11_DATA_GPIO_PortGPIOG#defineDHT11_DQ_INHAL_GPIO_ReadPin(DHT11_DATA_GPIO_Port,DHT11_DATA_Pin)voiddelay_us(uint32_tus);uint8_tDHT11_Init(void); //初始化DHT11uint8_tDHT11_Read_Data(uint8_t*temp,uint8_t*humi);//读取温湿度uint8_tDHT11_Read_Byte(void);//读出一个字节uint8_tDHT11_Read_Bit(void);//读出一个位uint8_tDHT11_Check(void); //检测是否存在DHT11voidDHT11_Rst(void); //复位DHT11voiddht11_inputmode(void);//设置PG9为输入模式voiddht11_outputmode(void);//设置PG9为输出模式#endif13软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。#include

"dht11.h"voiddelay_us(uint32_tus){uint32_tdelay=(HAL_RCC_GetHCLKFreq()/4000000*us);

while(delay--) { ; }}uint8_tDHT11_Init(void) {GPIO_InitTypeDefGPIO_Initure;__HAL_RCC_GPIOG_CLK_ENABLE(); //开启GPIOG时钟

GPIO_Initure.Pin=DHT11_DATA_Pin;//PG11GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;//推挽输出GPIO_Initure.Pull=GPIO_PULLUP;//上拉GPIO_Initure.Speed=GPIO_SPEED_HIGH;//高速HAL_GPIO_Init(DHT11_DATA_GPIO_Port,&GPIO_Initure);//初始化

DHT11_Rst();

returnDHT11_Check();

}14软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。//读取温湿度uint8_tDHT11_Read_Data(uint8_t*temp,uint8_t*humi){ uint8_tbuf[5]; uint8_ti; 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])%256==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }else

return1;

return0;

}//读出一个字节uint8_tDHT11_Read_Byte(void) { uint8_ti,dat; dat=0;

for(i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit();}

returndat;

}//读出一个位uint8_tDHT11_Read_Bit(void) { uint8_tretry=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);//等待40μs

if(DHT11_DQ_IN)return1;

else

return0;

}15软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。//检测是否存在DHT11uint8_tDHT11_Check(void) { uint8_tretry=0;

dht11_inputmode();//设置为输出

while(DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80μs { retry++; delay_us(1); };

if(retry>=100)return1;

elseretry=0;

while(!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80μs { retry++; delay_us(1); };

if(retry>=100)return1;

return0;

}//复位DHT11voidDHT11_Rst(void) { dht11_outputmode(); HAL_GPIO_WritePin(DHT11_DATA_GPIO_Port,DHT11_DATA_Pin,GPIO_PIN_RESET);//DQ=0 HAL_Delay(20); //拉低至少18ms HAL_GPIO_WritePin(DHT11_DATA_GPIO_Port,DHT11_DATA_Pin,GPIO_PIN_SET);//DQ=1 delay_us(30); //主机拉高20~40μs

}16软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。//设置DHT11_data为输入模式voiddht11_inputmode(void){ GPIO_InitTypeDefGPIO_InitTypestruct={0}; GPIO_InitTypestruct.Mode=GPIO_MODE_INPUT;//输入 GPIO_InitTypestruct.Pin=DHT11_DATA_Pin; GPIO_InitTypestruct.Pull=GPIO_PULLUP;//上拉 HAL_GPIO_Init(DHT11_DATA_GPIO_Port,&GPIO_InitTypestruct);

}//设置DHT11_data为输出模式voiddht11_outputmode(void){ GPIO_InitTypeDefGPIO_InitTypestruct={0}; GPIO_InitTypestruct.Mode=GPIO_MODE_OUTPUT_PP; GPIO_InitTypestruct.Pin=DHT11_DATA_Pin; GPIO_InitTypestruct.Pull=GPIO_PULLUP; GPIO_InitTypestruct.Speed=GPIO_SPEED_HIGH; HAL_GPIO_Init(DHT11_DATA_GPIO_Port,&GPIO_InitTypestruct);}17软件设计任务4.1环境温湿度监测的应用开发环境参数测量添加代码包在“MDK-ARM”文件夹同级目录新建文件夹“dht11”,将上文的dht11.h、dht11.c文件输入并保存在“dht11”目录下。在KeilMDK工程中建立“dht11”组,将“dht11”文件夹下的dht11.c文件加入组中。最后将“dht11”文件夹加入头文件“IncludePaths”(包含路径)中,以便编译时可以访问相应的文件。18软件设计任务4.1环境温湿度监测的应用开发环境参数测量应用层代码(1)在main.c文件相应位置输入以下代码:19软件设计任务4.1环境温湿度监测的应用开发环境参数测量应用层代码(2)打开usart.c文件,在相应位置输入如下代码:(3)打开usart.h文件,在相应位置输入如下代码:20编译程序,下载程序到核心板,将dht11模组的VCC接核心板3.3V、GND接GND、DATA接GPIOG.9,系统上电。PC端打开串口调试助手,设置好串口。打开串口,可看到如图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论