Arduino UNO 串口发送DTH温湿度 (可用)#

From: Arduino UNO使用DHT11温湿度传感器通过串口向PC发送温湿度信息_arduino uno 温度传感器-CSDN博客

有 arduino 代码,简短

电路连接#

参考使用这个电路图,但去除 OLED 连线部分,我们向串口打印即可。

安装 DHT 库#

注意,本例使用的 DHT 库:

https://github.com/markruys/arduino-DHT

Arduino 代码#

用下面的代码:

#include "DHT.h"  //引入库文件头  
DHT dht;  // 定义传感器对象 
 
void setup() { 
  Serial.begin(9600); 
  Serial.println(); 
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)"); // 输出头
  dht.setup(2); // 数据针脚为2号 
  } 
 
void loop() { 
  delay(dht.getMinimumSamplingPeriod());    //1 获取最小取样时间,用此时间进行延时。
                                            // DHT11是1秒,其他支持传感器是2秒
 
  float humidity = dht.getHumidity();       //2 读取湿度 
  float temperature = dht.getTemperature(); //3 读取温度
 
  Serial.print(dht.getStatusString());      //4 获取状态字符串 
  Serial.print("\t"); 
  Serial.print(humidity, 1);                
  Serial.print("\t\t"); 
  Serial.print(temperature, 1);              
  Serial.print("\t\t"); 
  Serial.println(dht.toFahrenheit(temperature), 1); //5 串口传输温度,华氏度
}

真正和 DHT 有关的代码只有5行,最关键的是 2 和 3

问题#

有一个有趣的问题,就是 DHT 每一帧数据中既包含温度,又包含湿度,那到在 2、3 中分别读湿度和温度,实际造成读传感器一次,还是两次? 这个得看库。你会怎么实现呢?

其它版本#

搜索的时候,有很多个不同的 DHT。我下载安装 Bonezegei_DHT22 库之后,如果用上面的 ino 文件,编译都通不过。

于是,找到 github 及配套的 example 搞定。使用的是 Arduino UNO, GPIO2 用于读数。

Bonezegei_DHT22:-Temperature-and-Humidity-Sensor-Driver

用 DHT22 是因为我手上的模块应该是DHT22,因为只有3个脚。精度高一点。

编译、下载、运行成功。

用口哈了一会儿气之后,读数有变化,说明是正确的。

另外,此库作者已用ESP32-WROOM32 通过了测试。

/*
  Read Temperature and Humidity
  DHT22 Library
  Author: Bonezegei (Jofel Batutay)
  Date : November 2023

  Tested using ESP32-WROOM32
*/

#include <Bonezegei_DHT22.h>

//param = DHT22 signal pin
Bonezegei_DHT22 dht(2);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {

  if (dht.getData()) {                         // get All data from DHT22
    float tempDeg = dht.getTemperature();      // return temperature in celsius
    float tempFar = dht.getTemperature(true);  // return temperature in fahrenheit if true celsius of false
    int hum = dht.getHumidity();               // return humidity
    Serial.printf("Temperature: %0.1lf°C  %0.1lf°F Humidity:%d n", tempDeg, tempFar, hum);
  }
  delay(2000);  
}

Next#

接下来,你可以用此温度值去控制开关,或将此值存在 SD 卡上,或者通过网络传输给服务器。