arduino读取DHT11温度、湿度数据并串口显示_牛仔1875_新浪博客

前两天在箱子里发现还有一颗闲置的DHT11没用过,暑假没啥事就顺便折腾一下。期间遇到不少问题,分享分享。 DHT11的数据手册就不传了,网上很容易找到 , 通信协议也比较简单。 Arduino用的是ATmega328的板子. 网上也有DHT11的现成的库文件,大概看了一下,发现网上对这个库函数有好几种说法,并且说的函数和arduino里面下载库函数并不一样,乱不清楚干脆自己写一个,顺便练习练习。

————————————————————
正文:


截图自DHT11数据手册
以主机将数据io拉低至少18ms为起始信号,之后DHT11在等待20-40us之后再次将io拉低80us再拉高80us作为响应。之后开始发送数据.

arduino读取DHT11温度、湿度数据并串口显示
数据 0 的电平
arduino读取DHT11温度、湿度数据并串口显示
数据 1 的电平
arduino读取DHT11温度、湿度数据并串口显示

在DHT11响应之后开始发送数据,高位在前。依次是8位湿度整数,8位湿度整数,8位温度整数,8位温度小数,8位校验值,共40位。校验值为温度和湿度的和。

下面是程序:

 NormalText Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
int out=2;                 //2号IO口作为通信接口
void setup() {
    Serial.begin(115200); //波特率115200
    pinMode(out,INPUT);   //IO口设为输入模式
}

void loop() {
    begin();    //起始函数,向DHT11发送起始信号
    int* b=read1();//读取传感器数据
    display_1(b);//串口显示数据
}

void begin()
{
    pinMode(out,OUTPUT);//io 设为输出模式,是因为测量发现DHT11的上拉电流有5mA,
                         //远大于输入模式下ATmega328的 io 的下拉电流,便无法得到 起始的至少28ms的低电平。
    digitalWrite(out,HIGH);//io置高
    delay(1400);      //等待1.4s,因为DHT11的采样周期为1s,这里取的稍长一些。
    digitalWrite(out,LOW);//io拉低,发送起始信号
    delay(30);        //延时至少28ms,这里取30ms
    digitalWrite(out,HIGH);//拉高
    pinMode(out,INPUT);//切换到输入模式,准备读数据
}

int* read1()
{
    int a[6]={0,0,0,0,0,0};//定义数组,存放数据
    int i,j;//变量,下面用到
    int* b=new int[5];//用b将数据返回给loop()**此处将传感器数据传递出去用全局变量也行,但想试试其他方法***
    delayMicroseconds(40);//延时40us,等待DHT11将io拉低
    if(digitalRead(out)==0)//io读取值为0,说明DHT11已响应,io已经被拉低
    {
        while(digitalRead(out)==0);//等待80us的低电平结束
        delayMicroseconds(90);//等待80us的高电平结束
        for(i=0;i<5;i++)//5个元素,依次存放温度、湿度、校验值数据
        {
            for(j=0;j<8;j++)//依次读取各二进制位
            {  
                while(digitalRead(out)==0);//等待50us的低电平结束
               
Arduino可以通过引用DHT库来读取DHT11湿度传感器数据。首先,需要将DHT库添加到Arduino环境中。可以在库管理器中搜索"DHT"来找到适合的库。然后,选择合适的DHT库并安装它。 接下来,连接DHT11传感器Arduino板。DHT11有三个引脚:VCC、OUT和GND。将DHT11的VCC引脚连接到Arduino的5V引脚,OUT引脚连接到Arduino的数字引脚(如D2引脚),而GND引脚连接到Arduino的GND引脚。 在Arduino IDE中,创建一个新的项目,并在代中引用DHT库。使用DHT库提供的函数来读取湿度传感器数据。首先,定义一个DHT对象,并指定DHT传感器的引脚和类型。例如,可以使用以下代: #include <DHT.h> #define DHTPIN 2 // 定义DHT11引脚为数字引脚2 #define DHTTYPE DHT11 // 设置传感器类型为DHT11 DHT dht(DHTPIN, DHTTYPE); // 创建一个DHT对象 然后,在setup()函数中,初始化串口通信,并将DHT对象初始化。例如,可以使用以下代: void setup() { Serial.begin(9600); // 初始化串口通信为9600波特率 dht.begin(); // 初始化DHT对象 } 最后,在loop()函数中,使用DHT库提供的函数读取湿度数据,并将其打印到串口监视器上。例如,可以使用以下代: void loop() { float temperature = dht.readTemperature(); // 读取温度值 float humidity = dht.readHumidity(); // 读取湿度值 Serial.print("温度: "); Serial.print(temperature); Serial.print(" °C"); Serial.print("\t湿度: "); Serial.print(humidity); Serial.println(" %"); delay(2000); // 延迟2秒 } 这样,Arduino将会每隔2秒读取一次DHT11湿度传感器数据,并将其通过串口通信输出到电脑上的串口监视器中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值