当前位置:   article > 正文

STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手+源代码_dht11温度传感器串口

dht11温度传感器串口

目录

一、DHT11模块参数

二、DHT11模块接线说明

三、测试说明 

四、DTT11传感器模块代码 

五、串口调试助手把采集的温湿度数据发送出来  

六、源代码 


一、DHT11模块参数

1 可以检测周围环境的湿度和温度

2 传感器采用DHT11

3 湿度测量范围:20%-95%(0 度-50 度范围)湿度测量误差:+-5%

4 温度测量范围:0 度-50 度温度测量误差:+-2 度 4 工作电压3.3V-5V

5 输出形式:数字输出

6 设有固定螺栓孔,方便安装

7 小板PCB 尺寸:3.2cm * 1.4cm

8 电源指示灯(红色)

二、DHT11模块接线说明

1 VCC 外接3.3V-5V

2 GND 外接GND

3 DATA 小板开关数字量输出接口接单片机IO 口

4 蜂鸣器VCC 外接3.3V,GND外接GND,I/O接PA7

三、测试说明 

编译环境:keil5

测试单片机: STM32F103C8T6

DHT11 模块与单片机连接: VCC-VCC  GND-GND  DATA-PA11

温湿度超过设定的阈值就会触发蜂鸣器报警!!!

FMQ.c文件编写蜂鸣器驱动代码如下:

  1. #include "FMQ.h"
  2. #include "stm32f10x.h"
  3. void mfq_Init(void)
  4. {
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  10. GPIO_Init(GPIOB, &GPIO_InitStructure);
  11. }
  12. void fmq(float temp,float humi)
  13. {
  14. if(temp>15 || humi>95)//温度大于15度 或者 湿度大于95度 蜂鸣器报警
  15. {
  16. GPIO_ResetBits(GPIOB, GPIO_Pin_0);
  17. }
  18. else
  19. {
  20. GPIO_SetBits(GPIOB, GPIO_Pin_0);
  21. }
  22. }

四、DTT11传感器模块代码 

 DHT11.c文件,对温湿度传感器驱动经行了封装

  1. #include "dht11.h"
  2. #include "Delay.h"
  3. void DHT11_Rst(void)
  4. {
  5. DHT11_IO_OUT();
  6. DHT11_DQ_OUT=0;
  7. Delay_ms(20);
  8. DHT11_DQ_OUT=1;
  9. Delay_us(30);
  10. }
  11. u8 DHT11_Check(void)
  12. {
  13. u8 retry=0;
  14. DHT11_IO_IN();//SET INPUT
  15. while (DHT11_DQ_IN&&retry<100)
  16. {
  17. retry++;
  18. Delay_us(1);
  19. };
  20. if(retry>=100)return 1;
  21. else retry=0;
  22. while (!DHT11_DQ_IN&&retry<100)
  23. {
  24. retry++;
  25. Delay_us(1);
  26. };
  27. if(retry>=100)return 1;
  28. return 0;
  29. }
  30. u8 DHT11_Read_Bit(void)
  31. {
  32. u8 retry=0;
  33. while(DHT11_DQ_IN&&retry<100)
  34. {
  35. retry++;
  36. Delay_us(1);
  37. }
  38. retry=0;
  39. while(!DHT11_DQ_IN&&retry<100)
  40. {
  41. retry++;
  42. Delay_us(1);
  43. }
  44. Delay_us(40);//µÈ´ý40us
  45. if(DHT11_DQ_IN)return 1;
  46. else return 0;
  47. }
  48. u8 DHT11_Read_Byte(void)
  49. {
  50. u8 i,dat;
  51. dat=0;
  52. for (i=0;i<8;i++)
  53. {
  54. dat<<=1;
  55. dat|=DHT11_Read_Bit();
  56. }
  57. return dat;
  58. }
  59. u8 DHT11_Read_Data(u8 *temp,u8 *humi)
  60. {
  61. u8 buf[5];
  62. u8 i;
  63. DHT11_Rst();
  64. if(DHT11_Check()==0)
  65. {
  66. for(i=0;i<5;i++)//¶ÁÈ¡40λÊý¾Ý
  67. {
  68. buf[i]=DHT11_Read_Byte();
  69. }
  70. if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  71. {
  72. *humi=buf[0];
  73. *temp=buf[2];
  74. }
  75. }else return 1;
  76. return 0;
  77. }
  78. u8 DHT11_Init(void)
  79. {
  80. GPIO_InitTypeDef GPIO_InitStructure;
  81. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPG¶Ë¿ÚʱÖÓ
  82. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  83. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  84. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  85. GPIO_Init(GPIOA, &GPIO_InitStructure);
  86. GPIO_SetBits(GPIOA,GPIO_Pin_11);
  87. DHT11_Rst();
  88. return DHT11_Check();
  89. }

 DHT11.h文件,对温湿度传感器驱动函数经行了声明

  1. #ifndef __DHT11_H
  2. #define __DHT11_H
  3. #include "sys.h"
  4. #define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
  5. #define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
  6. IO²Ù×÷º¯Êý
  7. #define DHT11_DQ_OUT PAout(11) //Êý¾Ý¶Ë¿Ú PA0
  8. #define DHT11_DQ_IN PAin(11) //Êý¾Ý¶Ë¿Ú PA0
  9. u8 DHT11_Init(void);
  10. u8 DHT11_Read_Data(u8 *temp,u8 *humi);
  11. u8 DHT11_Read_Byte(void);
  12. u8 DHT11_Read_Bit(void);
  13. u8 DHT11_Check(void);
  14. void DHT11_Rst(void);
  15. #endif

五、串口调试助手把采集的温湿度数据发送出来  

printf("temp=%d humi=%d\r\n",temp,humi);

六、源代码 

《STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手》源代码资源-CSDN文库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/606407
推荐阅读
相关标签
  

闽ICP备14008679号