使用 Arduino 从温度和湿度传感器获取数据

arduinoarduino boardsarduino idearduino programming language

在本教程中,我们将连接 Arduino DHT-22 温度和湿度传感器,并在串行监视器上打印获取的温度和湿度值。

电路图

当 DHT-22 面向您时,左侧第一个引脚 VCC 引脚连接到 5V,下一个引脚是 DATA 引脚,它连接到 Arduino Uno 上的引脚 2。第三个引脚未连接。第 4 个引脚 GND 连接到 Arduino 上的 GND。如上图所示,DATA 引脚和 DHT22 的 Vcc 引脚之间应连接一个 10K 电阻。

所需库

将 Arduino Uno 与 OLED 显示屏连接起来需要 Adafruit 的 DHT 传感器库 库 −

转到工具 → 管理库,搜索此库,然后单击安装。

代码演练

我们将演练随 DHT 传感器库附带的示例代码。转到文件 →示例 → DHT 传感器库 → DHTtester

或者,可以在 GitHub 上访问代码 − https://github.com/adafruit/DHTsensor-library/blob/master/examples/DHTtester/DHTtester.ino

如您所见,我们从包含 DHT 库开始。

#include "DHT.h"

接下来,我们定义连接到 DHT 传感器的数字引脚(在本例中为 Arduino 的引脚 2)。我们还定义了我们正在使用的 DHT 传感器的类型 (DHT22)

#define DHTPIN 2
#define DHTTYPE DHT22

接下来,我们使用之前定义的 DHTPIN 和 DHTTYPE 定义 DHT 对象

DHT dht(DHTPIN, DHTTYPE);

在设置中,我们使用 dht.begin() 初始化 Serial 和 dht。

void setup() {
   Serial.begin(9600);
   Serial.println(F("DHTxx test!"));

   dht.begin();
}

在循环中,我们首先添加 2 秒的延迟。这使得两次读数之间有一定的时间间隔。接下来,我们使用 .readHumidity() 和 .readTemperature() 函数读取湿度和温度。.readTemperature() 函数接受一个布尔参数,当设置为 true 时,将返回华氏温度(默认情况下返回摄氏度)。

如果 3 个读数中的任何一个为 NaN,我们将返回(您也可以在此处写入 continue)。最后,我们使用读取的温度和湿度值计算热指数。您可以在此处阅读有关热指数的更多信息。

最后,我们打印所有读取/计算的值。

void loop() {
   // 测量之间等待几秒钟。
   delay(2000);

   // 读取温度或湿度大约需要 250 毫秒!
   // 传感器读数可能长达 2 秒(这是一个非常慢的传感器)
   float h = dht.readHumidity();
   // 以摄氏度读取温度(默认值)
   float t = dht.readTemperature();
   // 以华氏度读取温度(isFahrenheit = true)
   float f = dht.readTemperature(true);

   // 检查是否有任何读取失败并提前退出(重试)。
   if (isnan(h) || isnan(t) || isnan(f)) {
      Serial.println(F("无法从 DHT 传感器读取!"));
      return;
   }

   // 以华氏度计算热指数(默认值)
   float hif = dht.computeHeatIndex(f, h);
   // 以摄氏度计算热指数(isFahreheit = false)
   float hic = dht.computeHeatIndex(t, h, false);

   Serial.print(F("Humidity: "));
   Serial.print(h);
   Serial.print(F("% Temperature: "));
   Serial.print(t);
   Serial.print(F("°C "));
   Serial.print(f);
   Serial.print(F("°F Heat index: "));
   Serial.print(hic);
   Serial.print(F("°C "));
   Serial.print(hif);
   Serial.println(F("°F"));
}

将此代码上传到您的 Arduino,您将能够在串行监视器上观察温度和湿度值。


相关文章