Arduino 温湿度传感器DHT11模块实验

网上有很多DHT11的测试,试了N个程序,总是不得要领,各种报错,最后终于找到一套可用的库。

首先是DHT11.h文件

#ifndef __DHT11_H__
#define __DHT11_H__

#include <Arduino.h>

//DHT11 IO设置
#define DHT11_DQ 2

#define DHT11_DQ_0 digitalWrite(DHT11_DQ,LOW)
#define DHT11_DQ_1 digitalWrite(DHT11_DQ,HIGH)

//函数或者变量声明
extern void DHT11_Init();
extern unsigned char DHT11_Read_Byte();
extern void DHT11_Read();

extern unsigned char HUMI_Buffer_Int;
extern unsigned char TEM_Buffer_Int;

#endif

其次是DHT11.cpp文件

#include "DHT11.h"

//定义变量
unsigned char HUMI_Buffer_Int = 0;
unsigned char TEM_Buffer_Int = 0;

//****************************************************
//初始化DHT11
//****************************************************
void DHT11_Init()
{
	pinMode(DHT11_DQ,OUTPUT);

	DHT11_DQ_0;                      //拉低总线,发开始信号;
	delay(30);                       //延时要大于 18ms,以便 DHT11 能检测到开始信号;
	DHT11_DQ_1;
	delayMicroseconds(40);           //等待 DHT11 响应;
	pinMode(DHT11_DQ,INPUT);
	while(digitalRead(DHT11_DQ) == HIGH);
	delayMicroseconds(80);           //DHT11 发出响应,拉低总线 80us;
	if(digitalRead(DHT11_DQ) == LOW);
	delayMicroseconds(80);           //DHT11 拉高总线 80us 后开始发送数据;
}

//****************************************************
//读一个字节DHT11数据
//****************************************************
unsigned char DHT11_Read_Byte()
{
	unsigned char i,dat = 0;
	unsigned int j;

	pinMode(DHT11_DQ,INPUT);

	for( i=0; i<8; i++)
	{
		if(digitalRead(DHT11_DQ) == LOW)
		{
			while(digitalRead(DHT11_DQ) == LOW);   //等待 50us;
			delayMicroseconds(30);     //判断高电平的持续时间,以判定数据是‘0’还是‘1’;
			if(digitalRead(DHT11_DQ) == HIGH)
				dat |= (1<<(7-i));     //高位在前,低位在后;
			while(digitalRead(DHT11_DQ) == HIGH);  //数据‘1’,等待下一位的接收;
		}
	}
	return dat;
}

//****************************************************
//读取温湿度值,存放在TEM_Buffer和HUMI_Buffer
//****************************************************
void DHT11_Read()
{
	DHT11_Init();

	HUMI_Buffer_Int = DHT11_Read_Byte(); //读取湿度的整数值
	DHT11_Read_Byte();                   //读取湿度的小数值
	TEM_Buffer_Int = DHT11_Read_Byte();  //读取温度的整数值
	DHT11_Read_Byte();                   //读取温度的小数值
	DHT11_Read_Byte();                   //读取校验和
	delayMicroseconds(50);               //DHT11拉低总线50us

	pinMode(DHT11_DQ,OUTPUT);
	DHT11_DQ_1;                          //释放总线	

}

最后是主程序文件

#include <Arduino.h>
#include "DHT11.h"

void setup()                //Arduino程序初始化程序放在这里,只在开机时候运行一次
{
	Serial.begin(9600);     //设置通讯的波特率为9600
	DHT11_Read();           //读取温湿度值
	delay(200);             //等待传感器稳定
}

void loop()                 //Arduino程序的主程序部分,循环运行内部程序
{
	DHT11_Read();           //读取温湿度值
	Serial.print("HUMI = ");
	Serial.print(HUMI_Buffer_Int);
	Serial.println(" %RH");

	Serial.print("TMEP = ");
	Serial.print(TEM_Buffer_Int);
	Serial.println(" C");
	delay(1000);            //延时1s
}

三个文件保存在同一个文件夹即可。

Arduino 温湿度传感器DHT11模块实验

时间: 2024-10-28 21:30:07

Arduino 温湿度传感器DHT11模块实验的相关文章

【Espruino】NO.14 温湿度传感器DHT11

http://blog.csdn.net/qwert1213131/article/details/35828873 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] [Espruino中文社区] 在第10节演示过一个DS18B20温度传感器,这节引入可以同时检测温度和湿度的传感器DHT11,可检测温度范围0~50℃(精度为+/-1℃),湿度20~90%(精度为 +/- 4%).DHT11有时不能识别触发脉冲,或偶尔不能读取正确的数据,因此使用校验和机制来验证所以接收到的数据

温湿度传感器DHT11

如果想使用 Arduino 开发板驱动 DHT11 来获取温湿度的时候建议使用第三方的库,这样可以加快程序的开发速度,而且不容易出错,下面的代码我已经安转了第三方的库了.详细的安装方法请参考极客先锋的博客:http://www.cnblogs.com/jikexianfeng/p/6290203.html 作者安装的为最低版本(1.0.0).这样为了更好的兼容. 1 /********************************* 2 代码功能:温湿度传感器DHT11 3 使用函数: 4 s

STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数 字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性.传感器包括一 个电容式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接. DHT21(AM2301)湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器.它应用专用

[转载] 树莓派读取温湿度传感器DHT11

原文地址: http://blog.csdn.net/liang890319/article/details/8739683 硬件: 树莓派 2.0 DHT模块  接树莓派5V GND GPIO1 功能:读取传感器数据并打印出来 // //mydht11.c // #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> typedef unsigned char uint8; typedef unsign

12-开发板接入小五物联实现远程控制(stm32采集温湿度传感器DHT11)

采集DHT11温湿度数据, 使用stm32f103zet6 的GPIOG11引脚读取SHT11数据,通过串口打印采集的温湿度 dht11.c文件: #include "dht11.h" #include "delay.h" //复位DHT11 void DHT11_Rst(void) { DHT11_IO_OUT(); //SET OUTPUT DHT11_DQ_OUT=0; //拉低DQ delay_ms(20); //拉低至少18ms DHT11_DQ_OUT=

Linkit 7688 DUO(五) 接上各种Arduino传感器和模块—扩展篇

Linkit 系列博文: 联发科Linkit 7688 (一) 上手及在Mac下搭建OpenWrt交叉编译环境,C语言编译Hello,World 联发科Linkit 7688 (二)GPIO基本操作与C语言编程 联发科Linkit 7688 DUO(三): 通过 Arduino 控制外设和传感器 Linkit 7688 DUO(四): 接上各种Arduino传感器和模块--基础篇 Linkit 7688 DUO(五) 接上各种Arduino传感器和模块-扩展篇 Linkit 7688 DUO(六

Linkit 7688 DUO(四): 接上各种Arduino传感器和模块——基础篇

前一篇讲了 Linkit 7688DUO操作Arduino的原理和基本方法.现在,我们要为开发板接上各类Arduino的传感器和模块了,这些模块提供了各类输入输出. 一.首先要充分了解 Linkit 7688 DUO开发板的引出管脚 Linkit 7688 DUO开发板上有两个处理器芯片. 一片是  Linkit 7688, 主处理器 一片是  ATmega32U4,  这是Arduino的处理芯片,提供Arduino编程接口,用于控制传感器外设等 两个处理器通过内部串口相连. 在开发中, 要写

传感器系列之4.5温湿度传感器

4.5 温湿数据采集实验 一.实验目的 了解智能传感器DHT11的原理与应用 掌握智能传感器DHT11的编程与操作方法 理解微处理器与湿度传感器DHT11之间的通讯 二.实验材料 具有USB 串口通讯的PC 机1 台 ADS1.2 集成开发软件1 套 J-Link-ARM 仿真器及软件1 套 NXP LPC2378 实验节点板1 个 LCD 显示实验板1 个 温湿度传感器模块1个 三.实验原理 振动传感器实验环境由PC机(安装有Windows XP操作系统.ADS1.2集成开发环境和J-Link

【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉. [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验五十五:DHT11 温湿度复合传感器模块(数字型单总线通信) 温度 度量物体冷热的物理量,是国际单位制中7个基本物理量之一.温度是