#include "DHT.h"
// ---------------------- 引脚与参数定义 ----------------------
#define DHTPIN 4 // DHT22数据引脚(和上次实验保持一致)
#define DHTTYPE DHT22 // 使用DHT22传感器
#define LED_PIN 7 // 报警LED接数字引脚7
#define HEAT_INDEX_THRESHOLD 32.0 // 高温报警阈值:热指数≥32℃触发报警
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
// 初始化LED引脚为输出模式
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // 初始状态:LED熄灭
// 打印实验标题信息
Serial.println("恩施职业技术学院信息工程学院");
Serial.println("物联网DHT22温湿度检测系统(带高温报警)");
Serial.println("班级:24110307 姓名:杨淇淇"); // 这里改成你自己的名字
Serial.println("---------------------------------");
Serial.println("正在读取传感器数据...");
Serial.println("---------------------------------");
}
void loop() {
// 读取温湿度数据
float humidity = dht.readHumidity();
float tempC = dht.readTemperature(); // 摄氏温度
float tempF = dht.readTemperature(true); // 华氏温度
// 数据校验:判断是否读取失败
if (isnan(humidity) || isnan(tempC) || isnan(tempF)) {
Serial.println("读取传感器数据失败,请检查接线!");
digitalWrite(LED_PIN, LOW); // 读取失败时LED熄灭
delay(2000);
return;
}
// 计算热指数(体感温度)
float heatIndexC = dht.computeHeatIndex(tempC, humidity, false); // 摄氏
float heatIndexF = dht.computeHeatIndex(tempF, humidity, true); // 华氏
// 高温报警逻辑:热指数≥32℃时点亮LED
bool isHighTempAlarm = (heatIndexC >= HEAT_INDEX_THRESHOLD);
digitalWrite(LED_PIN, isHighTempAlarm ? HIGH : LOW);
// 按截图格式输出数据
Serial.print("湿度: ");
Serial.print(humidity);
Serial.print(" %RH ");
Serial.print(" | 温度: ");
Serial.print(tempC);
Serial.print(" °C / ");
Serial.print(tempF);
Serial.print(" °F ");
Serial.print(" | 热指数: ");
Serial.print(heatIndexC);
Serial.print(" °C / ");
Serial.print(heatIndexF);
Serial.println(" °F");
// 输出报警状态
Serial.print("报警状态: ");
if (isHighTempAlarm) {
Serial.println(" 高温报警 (LED亮)");
} else {
Serial.println(" 正常 (LED灭)");
}
Serial.println("---------------------------------");
// 延时2秒,避免频繁读取
delay(2000);
}