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 卡上,或者通过网络传输给服务器。