/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
#include <DHTesp.h>
const int DHT_PIN = 15; // Пін, до якого підключено DHT22
const int LED_PIN_INTERNAL = 2; // Внутрішній світлодіод ESP32 (перший)
const int LED_PIN_EXTERNAL = 13; // Зовнішній світлодіод через резистор
const int NUM_READINGS = 10; // Кількість вимірювань для розрахунку середнього значення
DHTesp dhtSensor;
float temperatureSum = 0;
float humiditySum = 0;
int readingCount = 0;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN_INTERNAL, OUTPUT);
pinMode(LED_PIN_EXTERNAL, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Ініціалізація датчика DHT22
randomSeed(analogRead(0)); // Ініціалізація генератора випадкових чисел
}
void loop() {
// Генерація випадкових даних температури та вологості
float randomTemperature = random(200, 350) / 10.0; // Температура від 20.0°C до 35.0°C
float randomHumidity = random(500, 801) / 10.0; // Вологість від 50% до 80%
// Виведення поточних значень у термінал
Serial.print("Temp: ");
Serial.print(randomTemperature, 2);
Serial.println("°C");
Serial.print("Humidity: ");
Serial.print(randomHumidity, 1);
Serial.println("%");
Serial.println("---");
// Додавання значень для обчислення середнього значення
temperatureSum += randomTemperature;
humiditySum += randomHumidity;
readingCount++;
// Умови для запалювання світлодіодів
if (randomHumidity < 60 || randomHumidity > 70) {
// Вологість поза діапазоном 60-70% -> Запалюємо другий внутрішній світлодіод
Serial.println("Turning ON both LEDs (Humidity out in range))");
digitalWrite(LED_PIN_INTERNAL, HIGH); // Вмикаємо внутрішній світлодіод
digitalWrite(LED_PIN_EXTERNAL, HIGH); // Вмикаємо зовнішній світлодіод
} else {
// Вологість в діапазоні 60-70% -> Вимикаємо другий внутрішній світлодіод і запалюємо інші
Serial.println("Turning OFF both LEDs (Humidity in range)");
digitalWrite(LED_PIN_INTERNAL, LOW); // Вимикаємо внутрішній світлодіод
digitalWrite(LED_PIN_EXTERNAL, LOW); // Вимикаємо зовнішній світлодіод
}
// Обчислення середніх значень після певної кількості вимірювань
if (readingCount >= NUM_READINGS) {
float avgTemp = temperatureSum / readingCount;
float avgHumidity = humiditySum / readingCount;
Serial.println("Average Temperature: " + String(avgTemp, 2) + "°C");
Serial.println("Average Humidity: " + String(avgHumidity, 1) + "%");
Serial.println("==========");
// Скидання для нового циклу
temperatureSum = 0;
humiditySum = 0;
readingCount = 0;
}
delay(2000); // Затримка перед новим зчитуванням (2 секунди)
}