#include <DHT.h>
#define DHTPIN 2 // 将DHT传感器的数据引脚连接到ESP32的GPIO23引脚
#define LED1 19 // 低于一定温度的话,点亮蓝灯
#define LED2 21 // 在一定的温度范围内,点亮绿灯
#define LED3 22 // 超过一定温度的话,点亮红灯
#define DHTTYPE DHT22 // 指定使用的传感器类型,DHT11或DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx 测试程序");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
dht.begin();
}
//模拟室内温度变化
void chance(float *humidity, float *temperature){
// 生成一个随机数,范围在-0.5到0.5之间
float deltaTemperature = random(-10, 10);
float deltaHumidity = random(-20,30);
// 假设室内温度和湿度
*temperature = 25.00;
*humidity = 60.00;
*temperature += deltaTemperature;
*humidity += deltaHumidity;
// 限制温度在一定范围内
if (*temperature > 40) {
*temperature = 40;
} else if (*temperature < 0) {
*temperature = 0;
}
//限制湿度在一定范围之内
if(*humidity > 70){
*humidity = 70;
}else if(*humidity < 40){
*humidity = 40;
}
}
//对温度变化做出反应
void lightUp(float *temperature){
if(*temperature > 26){
digitalWrite(LED3, HIGH); // 打開LED
delay(500);
digitalWrite(LED3, LOW); // 關閉LED
delay(500);
}else if(*temperature >= 22 && *temperature <= 26){ // 修正条件判断
digitalWrite(LED2, HIGH); // 打開LED
delay(500);
digitalWrite(LED2, LOW); // 關閉LED
delay(500);
}else if(*temperature < 22){
digitalWrite(LED1, HIGH); // 打開LED
delay(500);
digitalWrite(LED1, LOW); // 關閉LED
delay(500);
}
}
void loop() {
delay(2000);
float humidity = dht.readHumidity(); // 读取湿度数据
float temperature = dht.readTemperature(); // 读取温度数据(默认为摄氏度)
// 检查是否成功读取传感器数据
// if (isnan(humidity) || isnan(temperature)) {
// Serial.println("无法读取传感器数据!");
// return;
// }
//因为是电脑网页模拟器,所以不能获取真实数据,这里采用模拟数据代替:
chance(&humidity, &temperature);
lightUp(&temperature);
// 将读取到的数据打印到串口监视器
Serial.print("湿度: ");
Serial.print(humidity);
Serial.print("%\t");
Serial.print("温度: ");
Serial.print(temperature);
Serial.println("°C");
}