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
}

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




  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: DHT11是一种常用的湿度传感器,它可以通过接入Arduino或其他微控制器来测量环境中的度和湿度。以下是一个简单的DHT11代码示例,用于读取和显示湿度数据: 1. 首先,需要在Arduino IDE中添加DHT11。在"工具"菜单中选择"管理器",搜索并安装DHT。 2. 在代码中引入所需要的: #include <DHT.h> 3. 定义DHT11引脚: #define DHTPIN 2 4. 定义DHT类型: #define DHTTYPE DHT11 5. 创建传感器对象: DHT dht(DHTPIN, DHTTYPE); 6. 设置传感器参数: dht.begin(); 7. 读取湿度数据: float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); 8. 显示湿度数据: Serial.print("Temperature: "); Serial.print(temperature); Serial.print(" °C"); Serial.print(" Humidity: "); Serial.print(humidity); Serial.println(" %"); 9. 延时一段时间等待传感器更新数据: delay(2000); 10. 完整代码示例: #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); Serial.print("Temperature: "); Serial.print(temperature); Serial.print(" °C"); Serial.print(" Humidity: "); Serial.print(humidity); Serial.println(" %"); delay(2000); } 这段代码通过读取DHT11传感器的度和湿度数据,并通过串口将其显示出来。在代码的设置部分,可以根据具体的连接方式和实际需求进行修改。并注意,这段代码可能需要进行一定的适配,以适应特定的硬件环境和使用平台。 ### 回答2: 51湿度传感器DHT11是一款数字湿度传感器,有较高的性价比和可靠性。下面是一个示例的51单片机的DHT11湿度传感器的代码: ```c #include <reg52.h> #include <stdio.h> #define DHT11_Pin P2_0 void Delay_ms(unsigned int t) { unsigned int i, j; for (i = 0; i < t; i++) { for (j = 0; j < 123; j++); } } void DHT11_Init() { DHT11_Pin = 1; Delay_ms(30); DHT11_Pin = 0; Delay_ms(18); DHT11_Pin = 1; Delay_ms(40); while (!DHT11_Pin); Delay_ms(80); while (DHT11_Pin); } unsigned char DHT11_ReadByte() { unsigned char i, dat = 0; for (i = 0; i < 8; i++) { while (!DHT11_Pin); Delay_ms(30); if (DHT11_Pin == 0) { Delay_ms(60); dat <<= 1; } else { dat |= 1; Delay_ms(60); } while (DHT11_Pin); } return dat; } void DHT11_ReadData(unsigned char *temper, unsigned char *humi) { unsigned char humi_int, humi_dec, temper_int, temper_dec, ck; DHT11_Init(); humi_int = DHT11_ReadByte(); humi_dec = DHT11_ReadByte(); temper_int = DHT11_ReadByte(); temper_dec = DHT11_ReadByte(); ck = DHT11_ReadByte(); if (ck == humi_int + humi_dec + temper_int + temper_dec) { *temper = temper_int; *humi = humi_int; } else { *temper = 0; *humi = 0; } } void main() { unsigned char temper, humi; DHT11_ReadData(&temper, &humi); printf("Temperature: %d Celsius\n", temper); printf("Humidity: %d RH\n", humi); } ``` 以上是一个简单的51单片机的DHT11湿度传感器的示例代码。在初始化函数DHT11_Init中,我们会给传感器提供一个起始信号和读取数据所需的时钟信号。在读取函数DHT11_ReadData中,我们会依次读取湿度整数部分、湿度小数部分、度整数部分、度小数部分和校验位。校验位的求和结果应该与其他四个数据的和相等,以保证数据的准确性。最后在主函数中,我们打印出度和湿度的值。请注意,以上代码是一种简化的示例,实际应用中,还需要考虑数据处理、显示和错误处理等功能。 ### 回答3: DHT11是一种数字湿度传感器,可以用于测量当前环境的度和湿度,并通过数字信号输出给单片机进行处理。以下是一个简单的DHT11代码示例: 首先,需要引入DHT文件,用于与传感器进行通信。具体使用哪个文件需要根据自己所用的开发板或平台进行选择。以Arduino为例,可以使用DHT。 在代码中,需要定义传感器的引脚,例如DHT11模块的数据引脚连接了Arduino的数字引脚2,那么可以定义为: #define DHTPIN 2 同时,还需要定义传感器的类型为DHT11: #define DHTTYPE DHT11 接下来,在setup函数中进行初始化设置,包括启动串口通信和传感器的初始化。例如: void setup() { Serial.begin(9600); // 启动串口通信 dht.begin(); // 初始化DHT传感器 } 在loop函数中,通过调用DHT提供的函数来读取湿度数据。例如: void loop() { float humidity = dht.readHumidity(); // 读取湿度值 float temperature = dht.readTemperature(); // 读取度值 Serial.print("Humidity: "); // 输出湿度值 Serial.print(humidity); Serial.print("%"); Serial.print(" Temperature: "); // 输出度值 Serial.print(temperature); Serial.println("°C"); delay(2000); // 延时2秒 } 以上代码中,通过readHumidity和readTemperature函数来读取湿度数据,并通过串口输出。延时2秒的目的是为了让传感器有足够的时间来测量和输出数据。 这是一个简单的DHT11代码示例,可以根据具体的需求进行修改和扩展。同时,还应注意对传感器进行正确的连接和引脚定义,并选择适合自己开发板或平台的文件。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值