目录
一、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文件编写蜂鸣器驱动代码如下:
#include "FMQ.h"
#include "stm32f10x.h"
void mfq_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void fmq(float temp,float humi)
{
if(temp>15 || humi>95)//温度大于15度 或者 湿度大于95度 蜂鸣器报警
{
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}
else
{
GPIO_SetBits(GPIOB, GPIO_Pin_0);
}
}
四、DTT11传感器模块代码
DHT11.c文件,对温湿度传感器驱动经行了封装
#include "dht11.h"
#include "Delay.h"
void DHT11_Rst(void)
{
DHT11_IO_OUT();
DHT11_DQ_OUT=0;
Delay_ms(20);
DHT11_DQ_OUT=1;
Delay_us(30);
}
u8 DHT11_Check(void)
{
u8 retry=0;
DHT11_IO_IN();//SET INPUT
while (DHT11_DQ_IN&&retry<100)
{
retry++;
Delay_us(1);
};
if(retry>=100)return 1;
else retry=0;
while (!DHT11_DQ_IN&&retry<100)
{
retry++;
Delay_us(1);
};
if(retry>=100)return 1;
return 0;
}
u8 DHT11_Read_Bit(void)
{
u8 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;
}
u8 DHT11_Read_Byte(void)
{
u8 i,dat;
dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT11_Read_Bit();
}
return dat;
}
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{
u8 buf[5];
u8 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];
*temp=buf[2];
}
}else return 1;
return 0;
}
u8 DHT11_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPG¶Ë¿ÚʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_11);
DHT11_Rst();
return DHT11_Check();
}
DHT11.h文件,对温湿度传感器驱动函数经行了声明
#ifndef __DHT11_H
#define __DHT11_H
#include "sys.h"
#define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
IO²Ù×÷º¯Êý
#define DHT11_DQ_OUT PAout(11) //Êý¾Ý¶Ë¿Ú PA0
#define DHT11_DQ_IN PAin(11) //Êý¾Ý¶Ë¿Ú PA0
u8 DHT11_Init(void);
u8 DHT11_Read_Data(u8 *temp,u8 *humi);
u8 DHT11_Read_Byte(void);
u8 DHT11_Read_Bit(void);
u8 DHT11_Check(void);
void DHT11_Rst(void);
#endif
五、串口调试助手把采集的温湿度数据发送出来
printf("temp=%d humi=%d\r\n",temp,humi);
六、源代码
《STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手》源代码资源-CSDN文库