#include <Wire.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal_I2C.h>
// ===== WIFI =====
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ===== THINGSPEAK =====
WiFiClient client;
unsigned long channelNumber = 3323282;
const char* writeAPIKey =
IXUXLFTP3DUOSS10;
// ===== BMP180 =====
Adafruit_BMP085 bmp;
// ===== LCD =====
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ===== LED & BUZZER =====
int greenLED = 16;
int yellowLED = 17;
int redLED = 18;
int buzzer = 19;
// ===== TIMER =====
unsigned long lastTime = 0;
unsigned long timerDelay = 15000;
void setup() {
Serial.begin(115200);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Weather System");
delay(2000);
lcd.clear();
// BMP180
if (!bmp.begin()) {
lcd.print("BMP180 Error");
Serial.println("BMP180 not found");
while(1);
}
// WIFI
WiFi.begin(ssid, password);
lcd.print("Connecting WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi Connected");
lcd.clear();
lcd.print("WiFi Connected");
delay(2000);
lcd.clear();
ThingSpeak.begin(client);
}
void loop() {
float pressure = bmp.readPressure() / 100.0;
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" hPa");
lcd.setCursor(0,0);
lcd.print("Pressure:");
lcd.setCursor(0,1);
lcd.print(pressure);
lcd.print(" hPa ");
// OFF all
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(buzzer, LOW);
// ===== CONDITION =====
if (pressure > 1020) {
Serial.println("High Pressure - Clear Weather");
lcd.setCursor(0,1);
lcd.print("Clear Weather ");
digitalWrite(greenLED, HIGH);
}
else if (pressure >= 1001 && pressure <= 1019) {
Serial.println("Normal Pressure - Moderate");
lcd.setCursor(0,1);
lcd.print("Moderate Weather");
digitalWrite(yellowLED, HIGH);
}
else {
Serial.println("Low Pressure - Rain Alert");
lcd.setCursor(0,1);
lcd.print("Rain/Storm Alert");
digitalWrite(redLED, HIGH);
digitalWrite(buzzer, HIGH);
}
// ===== SEND TO THINGSPEAK =====
if ((millis() - lastTime) > timerDelay) {
ThingSpeak.setField(1, pressure);
int x = ThingSpeak.writeFields(channelNumber, writeAPIKey);
if (x == 200) {
Serial.println("ThingSpeak Updated");
}
else {
Serial.println("ThingSpeak Error");
}
lastTime = millis();
}
delay(2000);
}