CCCPaste

Weather Station

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define DHTPIN 4
#define DHTTYPE DHT22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

float previousPressure = 0.0;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  dht.begin();
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    while (1) {}
  }
  display.clearDisplay();
}

void loop() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  float pressure = bmp.readPressure() / 100.0F;  // Convert to hPa

  if (isnan(temperature) || isnan(humidity) || isnan(pressure)) {
    Serial.println("Failed to read from sensors!");
    return;
  }

  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" *C");
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");
  Serial.print("Pressure: ");
  Serial.print(pressure);
  Serial.println(" hPa");

  String weatherPrediction = predictWeather(pressure);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.print("Temp: "); display.print(temperature); display.println(" *C");
  display.print("Hum: "); display.print(humidity); display.println(" %");
  display.print("Pres: "); display.print(pressure); display.println(" hPa");
  display.print("Prediction: ");
  display.println(weatherPrediction);
  display.display();

  previousPressure = pressure;

  delay(60000);  // Delay for 1 minute
}

String predictWeather(float currentPressure) {
  if (previousPressure == 0.0) {
    previousPressure = currentPressure;
    return "Gathering data...";
  }

  if (currentPressure > previousPressure) {
    return "Improving weather";
  } else if (currentPressure < previousPressure) {
    return "Worsening weather";
  } else {
    return "Stable weather";
  }
}