【STM32F103ZET6开发板】第3-3讲:DHT11温湿度传感器 DHT11温湿度传感器实验 实验目的 了解DHT11数字温湿度传感器的基本原理及单总线通信。掌握STM32与DHT11单总线通信的程序设计。 实验内容 编写程序检测DHT11温湿度值通过串口1在串口调试助手和艾克姆实验助手上显示。编写程序检测DHT11温湿度值通过RS485接口在串口调试助手和艾克姆实验助手上显示。 硬件设计 湿敏件简介 湿敏件是最简单的湿度传感器。湿敏件比较常见的是电阻式湿敏件和电容式湿敏件。除此之外,还有电解质离子型湿敏件、重量型湿敏件(利用感湿膜重量的变化来改变振荡频率)、光强型湿敏件、声表面波湿敏件等。下面就电阻式湿敏件和电容式湿敏件进行介绍。 电阻式湿敏件一般指的是湿敏电阻,湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,件的电阻率和电阻值都发生变化,利用这一特性即可测量湿度。湿敏电阻的种类很多,例如金属氧化物湿敏电阻、硅湿敏电阻、陶瓷湿敏电阻等。 湿敏电阻的优点是灵敏度高,主要缺点是线性度和产品的互换性差。 电容式湿敏件一般指的就是湿敏电容,湿敏电容一般是用高分子薄膜电容制成的,常用的高分子材料有聚苯乙烯、聚酰亚胺、酷酸醋酸纤维等。当环境湿度发生改变时,湿敏电容的介电常数发生变化,使其电容量也发生变化,其电容变化量与相对湿度成正比。 湿敏电容的主要优点是灵敏度高、产品互换性好、响应速度快、湿度的滞后量小、便于制造、容易实现小型化和集成化,其精度一般比湿敏电阻要低一些。注:湿敏件的线性度及抗污染性差,在检测环境湿度时,湿敏件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。温湿度知识点介绍研究表明,温度和湿度有着密不可分的关系,人的体感并不单纯受温度或是湿度的影响,而是两者综合作用的结果。室内温度不宜过高或过低,室温过低会使人感到寒冷、缩手缩脚,人体消耗热能也会大大增加;室温过高会使人感到闷热难受,令人精神不振、头昏脑胀,昏昏欲睡。室内湿度也不宜过高或过低,室内湿度过高,人体散热就比较困难;室内湿度过低,空气干燥,人的呼吸道会干涩难受。
图1:温湿度适宜的家居环境据研究表明,室内最适合温度应保持在室温达18℃时,相对湿度应保持在30~40%,室温达 25℃ 时,相对湿度应保持在40~50%为最宜。温度的概念大家比较了解,下面重点介绍下与湿度有关的知识点。湿度,一般在气象学中指的是空气湿度,它是空气中水蒸气的含量。空气中液态或固态的水不算在湿度中。不含水蒸气的空气被称为干空气。下面介绍与湿度有关的3个概念。相对湿度(Relative Humidity)是指气体中(通常为空气中)所含水蒸气量(水蒸气压)与其空气相同情况下饱和水蒸气量(饱和水蒸气压)的百分比,一般用百分数表示。通常所说的湿度都是指相对湿度,比如说某个房间的湿度为60%,即指该房间的相对湿度是60%。绝对湿度是指一定体积的空气中含有的水蒸气的质量,一般其单位是克/立方米。绝对湿度的最大限度是饱和状态下的最高湿度。绝对湿度只有与温度一起才有意义,因为空气中能够含有的湿度的量随温度而变化,在不同的温度中绝对湿度也不同,因为随着温度的变化空气的体积也要发生变化。但绝对湿度越靠近最高湿度,它随温度的变化就越小饱和湿度是表示在一定温度下,单位容积空气中所能容纳的水蒸气量的最大限度。如果超过这个限度,多余的水蒸气就会凝结,变成水滴,此时的空气湿度便称为饱和湿度。注:相对湿度 = 绝对湿度 / 饱和湿度×100% 。DHT11数字温湿度传感器DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,也是一款电容式湿度传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿件和一个NTC测温件,并与一个高性能8位单片机相连接。下面给出DHT11数字温湿度传感器和带PCB底板的DHT11模块的实物图。DHT11模块相对于DHT11传感器只是加了电源指示灯及信号引脚上的上拉电阻,也方便杜邦线接线。
图2:DHT11传感器和DHT11模块实物图注:艾克姆科技IK-ZET6开发板有DHT11传感器专用接口J17,用户不需要购买带PCB的DHT11模块。DHT11数字温湿度传感器的规格参数下面介绍下DHT11数字温湿度传感器的规格参数,DHT11模块的规格参数在此不做介绍。表1:DHT11数字温湿度传感器规格参数参数规格工作电压3.3V~5.5V外形尺寸23.2(L)mm ×12.5(W)mm测量范围温度:-20~+60℃ 湿度:5~95%RH精度温度:±2℃ 湿度:±5%RH (25℃)分 辨 率温度:0.1℃ 湿度:1%RH衰 减 值温度:<0.1℃/年 湿度:<1%RH/年输出信号单总线数字信号外壳材料ABS塑料重量1g引脚数4个 DHT11数字温湿度传感器的管脚定义下面介绍DHT11数字温湿度传感器的管脚定义,首先将DHT11数字温湿度传感器的引脚号标注下。
图3:DHT11数字温湿度传感器管脚号表2:DHT11数字温湿度传感器管脚定义DHT11管脚号管脚名功能描述1VCC供电正2DATA串行数据引脚3NC空脚4GND供电地注:MCU的GPIO口可以和DHT11的串行数据引脚DATA连接,但需要该引脚上接有上拉电阻方可有效采集传感器信息。DHT11数字温湿度传感器与开发板连接IK-ZET6开发板上设计了1个DS18B20/DHT11传感器接口,该接口串行数据引脚DATA连接到STM32F103ZET6的PB1引脚上。通过单总线通信协议读取DHT11传感器采集的数据。
图4:IK-ZET6开发板DS18B20/DHT11接口1个DS18B20/DHT11接口占用的单片机的引脚如下表:表3:DS18B20/DHT11接口引脚分配DHT11引脚说明DATAPB1独立GPIO注:独立GPIO表示开发板没有其他的电路使用这个GPIO,非独立GPIO说明开发板有其他电路用到了该GPIO。软件设计DHT11数字温湿度传感器单总线通信DHT11数字温湿度传感器采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;单总线通常要求外接一个约4.7kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。单总线介绍单总线是美国DALLAS公司推出的外围串行扩展总线技术。我们知道,SPI、I²C串行通信会有专用的时钟线,而单总线则是采用单根信号线,这根信号线既传输时钟又传输数据,而且数据传输是双向的。单总线通信的优势:节省I/O口、资源结构简单、成本低廉、便于总线扩展和维护等。单总线的数据传输速率一般为16.3Kbit/s,最大可达142Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。主设备I/O口可直接驱动200m范围内的从设备,经过扩展后可达1km范围。DHT11数字温湿度传感器与MCU通信DHT11数字温湿度传感器DATA引脚用于与微处理器MCU进行单总线通信,下图给出MCU作为单总线通信的主机与DHT11从机之间通信的步骤。
图5:MCU与DHT11单总线通信步骤示意注: 1、需要注意一次传送40位数据是高位先出,下面给出40位数据的格式: 8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验位 2、传送的40位数据之间也有特殊关系,如下: 8bit校验位=8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据 3、传送的40位数据,位数据“0”和位数据“1”的格式如下: 位数据“0”:54us的低电平 + (23~27) us的高电平; 位数据“1”:54us的低电平 + (68~74) us的高电平。 DHT11数字温湿度传感器接收数据计算示例 举例DHT11检测温度为正值时的40位数据如下:
图6:MCU与DHT11单总线通信步骤示意举例DHT11检测温度为负值时的40位数据如下:
图7:MCU与DHT11单总线通信步骤示意举例DHT11检测到的40位数据校验有误需丢弃的数据如下:
图8:MCU与DHT11单总线通信步骤示意 DHT11温湿度串口调试助手显示实验(串口1) 注:本节的实验源码是在“实验2-6-2:USART1串口使用printf函数”的基础上修改。本节对应的实验源码是:“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”。 工程需要用到的库文件 本例需要用到的c文件如下表所示,工程需要添加下表中的c文件。 表4:实验需要用到的C文件序号文件名后缀功能描述1stm32f10x_rcc.c复位与时钟控制器。2stm32f10x_gpio.c通用输入输出。3stm32f10x_usart.c通用同步/异步收发器。4misc.c中断向量控制器。 按下图所示将需要的c文件添加到工程。
图9:在新建工程中添加所需库函数c文件 头文件引用和路径设置 需要引用的头文件 因为在“main.c”文件中使用了标准库和我们自己建的软件延时函数,所以需要引用下面的头文件。#include “stm32f10x.h” //delay这里报错的原因是:delay函数用汇编实现的,导致了MDK误报。 #include “delay.h” 需要包含的头文件路径 本例需要包含的头文件路径如下表: 表5: 头文件包含路径序号路径描述1..\Lib\F10x_FWLIB\inc标准库头文件路径。2..\Userstm32f10x_conf.h头文件在该路径,所以要包含。3..\User\bsp自建的板卡相关的驱动文件路径。 MDK中魔术棒,打开工程配置窗口,按照下图所示添加头文件包含路径。
图10:添加头文件包含路径 MCU与DHT11传感器通信所需函数汇集 在“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”工程中有dht11.c文件,该文件包括了MCU单总线与DHT11通信所用到的函数。这些函数仅是艾克姆科技根据DHT11手册设计的函数,仅供用户参考。下表列举了这些函数。 表6:MCU与DHT11单总线通信相关函数汇集序号函数名功能描述1DHT11_GPIO_Config初始化DHT11所用到的GPIO。2DHT11_Mode_IPU配置DHT11的DATA引脚为上拉输入。3DHT11_Mode_Out_PP配置DHT11的DATA引脚为推挽输出。4Read_Byte读取单总线上1字节数据。5Read_DHT11读取DHT11传送的40位数据。 编写代码 首先介绍下DHT11_GPIO_Config函数,该函数中配置DHT11传感器DATA引脚(PB1)初始状态为推挽输出,输出电平是高电平。 代码清单:初始化DHT11的DATA引脚 /* * 描 述 : 初始化DHT11信号引脚为输出 * 入 参 : 无 * 返回值 : 无 */ void DHT11_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT11_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = DHT11_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DHT11_PORT, &GPIO_InitStructure); GPIO_SetBits(DHT11_PORT, DHT11_PIN); } 然后,在Read_DHT11函数中,会按照单总线通信的协议依次进行MCU对DHT11发送起始信号、DHT11向MCU发送响应信号、DHT11向MCU发送40位数据,MCU会调用Read_Byte函数读5次数据得到这40位数据。关于函数Read_DHT11和Read_Byte清单如下。 代码清单:读取DHT11传送的40位数据 /* * 描 述 : 一次完整的数据传输为40bit,高位先出 * 入 参 : 8bit 湿度整数 + 8bit 湿度小数 + 8bit 温度整数 + 8bit 温度小数 + 8bit 校验和 * 返回值 : uint8_t */ uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data) { DHT11_Mode_Out_PP(); //输出模式 DHT11_DATA_OUT(LOW); //主机拉低 sw_delay_ms(18); //延时18ms DHT11_DATA_OUT(HIGH); //总线拉高 主机延时30us sw_delay_us(30); //延时30us DHT11_Mode_IPU(); //主机设为输入 判断从机响应信号 if(DHT11_DATA_IN()==Bit_RESET) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 { while(DHT11_DATA_IN()==Bit_RESET); //轮询直到从机发出的83us 低电平 响应信号结束 while(DHT11_DATA_IN()==Bit_SET); //轮询直到从机发出的87us 高电平 标置信号结束 /*开始接收数据*/ DHT11_Data->humi_int= Read_Byte(); DHT11_Data->humi_deci= Read_Byte(); DHT11_Data->temp_int= Read_Byte(); DHT11_Data->temp_deci= Read_Byte(); DHT11_Data->check_sum= Read_Byte(); DHT11_Mode_Out_PP(); //读取结束,引脚改为输出模式 DHT11_DATA_OUT(HIGH); //主机拉高 /*检查读取的数据是否正确*/ if(DHT11_Data->check_sum == DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data->temp_int+ DHT11_Data->temp_deci) return SUCCESS; else return ERROR; } else { return ERROR; } } 代码清单:读取单总线上1字节数据/ * 描 述 : 从DHT11读取一个字节,MSB先行 * 入 参 : 无 * 返回值 : uint8_t */ static uint8_t Read_Byte(void) { uint8_t i, temp=0; for(i=0;i<8;i++) { while(DHT11_DATA_IN()==Bit_RESET); //每bit以50us低电平标置开始,轮询直到从机发出 的50us 低电平 结束 /*DHT11 以23~27us的高电平表示“0”,以68~74us的高电平表示“1” */ sw_delay_us(40); //延时40us,这个延时需要大于数据0持续的时间即可 if(DHT11_DATA_IN()==Bit_SET) // 40us后仍为高电平表示数据“1” { while(DHT11_DATA_IN()==Bit_SET); //等待数据1的高电平结束 temp|=(uint8_t)(0x01<<(7-i)); //把第7-i位置1,MSB先行 } else // 40us后为低电平表示数据“0” { temp&=(uint8_t)~(0x01<<(7-i)); //把第7-i位置0,MSB先行 } } return temp; } 最后,在主函数中对所使用串口1及DHT11传感器DATA引脚进行初始化后,调用DHT11_SCAN函数实时读取显示温湿度信息。 代码清单:串口实时显示温湿度/* * 描 述 : 串口实时显示温湿度 * 入 参 : 无 * 返回值 : 无 */ void DHT11_SCAN(void) { if( Read_DHT11(&DHT11_Data)==SUCCESS) { printf(“\r\n读取DHT11成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n”,\ DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci); } else { printf(“Read DHT11 ERROR!\r\n”); } } 代码清单:主函数int main(void) { //初始化USART1并配置USART1中断优先级 USART1_Init(); //初始化温湿度传感器检测引脚 DHT11_GPIO_Config(); //主循环 while(1) { DHT11_SCAN(); //实时显示温湿度 sw_delay_ms(2000); } } 实验步骤 解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→Open Project”打开“…\DHT11\projec”目录下的工程“DHT11.uvproj”。编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“DHT11.hex”位于工程目录下的“Objects”文件夹中。按钮下载程序 。如果需要对程序进行仿真,Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,打开串口调试助手选择正确的串口号,波特率设置为19200,数据位为8、停止位为1,可以观察到串口调试助手2s显示一次读取到的温湿度信息。 DHT11温湿度艾克姆实验助手显示实验(串口1) 注:本节的实验源码是在“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”的基础上修改。本节对应的实验源码是:“实验3-3-2:DHT11温湿度传感器 – 艾克姆实验助手显示(串口1)”。 工程需要用到的库文件 在使用库函数建“实验3-3-2:DHT11温湿度传感器 – 艾克姆实验助手显示(串口1)”工程时,需要用到的c文件以及添加头文件包含路径的方法与介绍“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”完全一样,在此不再赘述。 编写代码 首先dht.c相关的函数及配置与“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”的代码完全一样,在此不再赘述。 然后,在主函数中对所使用串口1及DHT11传感器DATA引脚进行初始化后,会根据艾克姆实验助手解析数据的协议发送实时读取的温湿度信息。 程序清单:主函数int main(void) { uint8_t temp[5]; //初始化USART1并配置USART1中断优先级 USART1_Init(); // 初始化温湿度传感器检测引脚 DHT11_GPIO_Config(); //主循环 while(1) { memset(temp, 0, 5); //将temp数组初始化 if( Read_DHT11(&DHT11_Data)==SUCCESS) { temp[0] = ‘H’; //由与艾克姆实验助手通信格式决定 //将温湿度值转换成字符串,在艾克姆实验助手中显示 temp[1] = DHT11_Data.temp_int/10+ 0x30; temp[2] = DHT11_Data.temp_int%10+ 0x30; temp[3] = DHT11_Data.humi_int/10+ 0x30; temp[4] = DHT11_Data.humi_int%10+ 0x30; USART1_SendStr(temp); //实时显示温湿度 sw_delay_ms(2000); } } } 实验步骤 解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-3-2:DHT11温湿度传感器 – 艾克姆实验助手显示(串口1)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→Open Project”打开“…\DHT11\projec”目录下的工程“DHT11.uvproj”。编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“DHT11.hex”位于工程目录下的“Objects”文件夹中。按钮下载程序 。如果需要对程序进行仿真,Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,打开艾克姆实验助手选择正确的串口号,波特率设置为38400,设置完成后,打开,可以观察到艾克姆实验助手信息栏会2s刷新一次温湿度信息,并且有实时温湿度曲线。 DHT11温湿度串口调试助手显示实验(RS485) 注:本节的实验源码是在“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”的基础上修改。本节对应的实验源码是:“实验3-3-3:DHT11温湿度传感器 – 串口调试助手显示(RS485)”。 工程需要用到的库文件 在使用库函数建“实验3-3-3:DHT11温湿度传感器 – 串口调试助手显示(RS485)”工程时,需要用到的c文件以及添加头文件包含路径的方法与介绍“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”完全一样,在此不再赘述。 编写代码 首先dht.c相关的函数及配置与“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”的代码完全一样,在此不再赘述。 然后,在主函数中会对所使用RS485接口进行初始化,并对DHT11传感器DATA引脚进行初始化,后会调用DHT11_SCAN函数实时读取显示温湿度信息。 程序清单:串口实时显示温湿度/* * 描 述 : 串口显示实时温湿度 * 入 参 : 无 * 返回值 : 无 / void DHT11_SCAN(void) { if( Read_DHT11(&DHT11_Data)==SUCCESS) { RS485TX; //使能发送,关闭接收 sw_delay_ms(1); //延时1ms,不可省去 printf(“\r\n读取DHT11成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n”,\ DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci); sw_delay_ms(1); //延时1ms,不可省去 RS485RX; //使能接收,关闭发送 } else { RS485TX; //使能发送,关闭接收 sw_delay_ms(1); //延时1ms,不可省去 printf(“Read DHT11 ERROR!\r\n”); sw_delay_ms(1); //延时1ms,不可省去 RS485RX; //使能接收,关闭发送 } } 程序清单:主函数int main(void) { //初始化RS485所用GPIO口及所用USART2配置 RS485_Init(); //使能RS485接收,关闭发送 RS485RX; //初始化温湿度传感器检测引脚 DHT11_GPIO_Config(); //主循环 while(1) { DHT11_SCAN(); //实时显示温湿度 sw_delay_ms(2000); } } 实验步骤 解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-3-3:DHT11温湿度传感器 – 串口调试助手显示(RS485)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→Open Project”打开“…\DHT11\projec”目录下的工程“DHT11.uvproj”。编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“DHT11.hex”位于工程目录下的“Objects”文件夹中。按钮下载程序 。如果需要对程序进行仿真,Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,打开串口调试助手选择正确的串口号,波特率设置为19200,数据位为8、停止位为1,可以观察到串口调试助手2s显示一次读取到的温湿度信息。 DHT11温湿度艾克姆实验助手显示实验(RS485) 注:本节的实验源码是在“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”的基础上修改。本节对应的实验源码是:“实验3-3-4:DHT11温湿度传感器 – 艾克姆实验助手显示(RS485)”。 工程需要用到的库文件 在使用库函数建“实验3-3-4:DHT11温湿度传感器 – 艾克姆实验助手显示(RS485)”工程时,需要用到的c文件以及添加头文件包含路径的方法与介绍“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”完全一样,在此不再赘述。 编写代码 首先dht.c相关的函数及配置与“实验3-3-1:DHT11温湿度传感器 – 串口调试助手显示(串口1)”的代码完全一样,在此不再赘述。 然后,在主函数中会对所使用RS485接口进行初始化,并对DHT11传感器DATA引脚进行初始化,后根据艾克姆实验助手解析数据的协议发送实时读取的温湿度信息。 程序清单:主函数int main(void) { uint8_t temp[5]; //初始化RS485所用GPIO口及所用USART2配置 RS485_Init(); //使能RS485接收,关闭发送 RS485RX; //初始化温湿度传感器检测引脚 DHT11_GPIO_Config(); //主循环 while(1) { memset(temp, 0, 5); //将temp数组初始化 if( Read_DHT11(&DHT11_Data)==SUCCESS) { temp[0] = ‘H’; //由与艾克姆实验助手通信格式决定 //将温湿度值转换成字符串,在艾克姆实验助手中显示 temp[1] = DHT11_Data.temp_int/10+ 0x30; temp[2] = DHT11_Data.temp_int%10+ 0x30; temp[3] = DHT11_Data.humi_int/10+ 0x30; temp[4] = DHT11_Data.humi_int%10+ 0x30; RS485TX; //使能发送,关闭接收 sw_delay_ms(1); //延时1ms,不可省去 USART2_SendStr(temp); //实时显示温湿度 sw_delay_ms(1); //延时1ms,不可省去 RS485RX; //使能接收,关闭发送 sw_delay_ms(2000); } } } 实验步骤 解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-3-4:DHT11温湿度传感器 – 艾克姆实验助手显示(RS485)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→Open Project”打开“…\DHT11\projec”目录下的工程“DHT11.uvproj”。编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“DHT11.hex”位于工程目录下的“Objects”文件夹中。按钮下载程序 。如果需要对程序进行仿真,Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,打开艾克姆实验助手选择正确的串口号,波特率设置为38400,设置完成后,打开,可以观察到艾克姆实验助手信息栏会2s刷新一次温湿度信息,并且有实时温湿度曲线。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/65922.html