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