#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal_I2C.h>
#include <HTTPClient.h>
// WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak base URL
const char* server = "http://api.thingspeak.com";
// API Key
String apiKey = "9NBJOUZOQJHX8KNG";
// Objects
Adafruit_BMP085 bmp;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins
int greenLED = 25;
int yellowLED = 26;
int redLED = 27;
int buzzer = 14;
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
// BMP180
if (!bmp.begin()) {
Serial.println("BMP180 not found! Continue anyway...");
}
lcd.init();
lcd.backlight();
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(buzzer, OUTPUT);
// Connect WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
}
void loop() {
float pressure = bmp.readPressure() / 100.0; // hPa
String weatherStatus = "";
// Reset LEDs & buzzer
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(buzzer, LOW);
// 🌦️ Pressure Classification
if (pressure >= 1020) {
digitalWrite(greenLED, HIGH);
weatherStatus = "HIGH Pressure(Clear Weather)";
}
else if (pressure >= 1001) {
digitalWrite(yellowLED, HIGH);
weatherStatus = "NORMAL Pressure(Moderate weather)";
}
else {
digitalWrite(redLED, HIGH);
digitalWrite(buzzer, HIGH);
weatherStatus = "LOW Pressure(Rain/storm alert)";
}
// ✅ Serial display (CLEAN)
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" hPa");
Serial.print("Status: ");
Serial.println(weatherStatus);
// ✅ LCD display
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(pressure);
lcd.print(" hPa");
lcd.setCursor(0, 1);
lcd.print(weatherStatus);
// 🌐 Encode status for URL (IMPORTANT FIX)
String encodedStatus = weatherStatus;
encodedStatus.replace(" ", "%20");
encodedStatus.replace("(", "%28");
encodedStatus.replace(")", "%29");
// 🌐 Send to ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
HTTPClient http;
String url = String(server) + "/update?api_key=" + apiKey +
"&field1=" + String(pressure) +
"&field2=" + encodedStatus;
http.begin(client, url);
int httpCode = http.GET();
if (httpCode == 200) {
Serial.println("ThingSpeak Update Successful");
} else {
Serial.print("ThingSpeak Error. HTTP Code: ");
Serial.println(httpCode);
}
http.end();
} else {
Serial.println("WiFi disconnected");
}
delay(15000); // ThingSpeak limit
}