Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

ESP32-Based Smart Weather Station with Wi-Fi Control and PWM Fan

View and Edit Project In Cirkit DesignerImage of ESP32-Based Smart Weather Station with Wi-Fi Control and PWM Fan

Circuit Documentation

Summary

This circuit involves an ESP32 microcontroller, a BME/BMP280 sensor, a KY-019 relay module, a 12V PWM fan, a DC power source, and a USB regulator. The ESP32 reads data from the BME/BMP280 sensor, controls the relay module, and regulates the fan speed based on temperature readings.

Component List

BME/BMP280

ESP32 Wroom Dev Kit

DC Power Source

KY-019 Relay Module 1 Channel

USB Regulator

12V PWM Fan (120mm)

Wiring Details

BME/BMP280

ESP32 Wroom Dev Kit

DC Power Source

KY-019 Relay Module 1 Channel

USB Regulator

12V PWM Fan (120mm)

Documented Code

sketch.ino

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Pin Definitionen
#define BME_SDA 21
#define BME_SCL 22
#define RELAY_PIN 18
#define FAN_PWM_PIN 17
#define FAN_TACH_PIN 16

Adafruit_BME280 bme; // BME280 Objekt

void setup() {
  Serial.begin(115200);
  
  // I2C Initialisierung
  Wire.begin(BME_SDA, BME_SCL);
  
  // BME280 Initialisierung
  if (!bme.begin(0x76)) {
    Serial.println("BME280 Sensor nicht gefunden!");
    while (1);
  }
  
  // Relais und Lüfter Pins initialisieren
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(FAN_PWM_PIN, OUTPUT);
  pinMode(FAN_TACH_PIN, INPUT);
  
  // Relais und Lüfter initial ausschalten
  digitalWrite(RELAY_PIN, LOW);
  ledcAttachPin(FAN_PWM_PIN, 0); // Attach pin to channel 0
  ledcSetup(0, 5000, 8); // 5 kHz PWM, 8-bit resolution
  ledcWrite(0, 0);
}

void loop() {
  // Sensorwerte auslesen
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F;
  
  // Sensorwerte ausgeben
  Serial.print("Temperatur: ");
  Serial.print(temperature);
  Serial.println(" °C");
  
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(humidity);
  Serial.println(" %");
  
  Serial.print("Luftdruck: ");
  Serial.print(pressure);
  Serial.println(" hPa");
  
  // Relais steuern (Beispiel: Relais einschalten, wenn Temperatur über 25°C)
  if (temperature > 25.0) {
    digitalWrite(RELAY_PIN, HIGH);
  } else {
    digitalWrite(RELAY_PIN, LOW);
  }
  
  // Lüfter steuern (Beispiel: PWM-Signal basierend auf Temperatur)
  int fanSpeed = map(temperature, 20, 30, 0, 255);
  fanSpeed = constrain(fanSpeed, 0, 255);
  ledcWrite(0, fanSpeed);
  
  delay(2000); // 2 Sekunden warten
}

documentation.txt

Basierend auf den bereitgestellten Informationen handelt es sich bei den Hauptkomponenten um einen ESP32, einen BME/BMP280 Sensor, 
ein KY-019 Relaismodul und einen 12V PWM Lüfter. Der ESP32 wird verwendet, um den Sensor auszulesen, 
das Relais zu steuern und den Lüfter zu regeln.
Erklärung des Codes:

    1. Bibliotheken einbinden: Die benötigten Bibliotheken für den BME280 Sensor werden eingebunden.
    2. Pin Definitionen: Die Pins für den BME280, das Relais und den Lüfter werden definiert.
    3. Setup-Funktion: Initialisiert die serielle Kommunikation, den I2C-Bus, den BME280 Sensor und die Pins für das Relais und den Lüfter.
    4. Loop-Funktion: Liest die Sensorwerte aus, gibt sie über die serielle Schnittstelle aus und steuert das Relais und den Lüfter basierend auf der Temperatur.

Bitte stellen Sie sicher, dass Sie die Adafruit BME280 Bibliothek installiert haben, bevor Sie den Code hochladen. 
Sie können diese Bibliothek über den Bibliotheksverwalter in der Arduino IDE installieren.