TABLE 4 SkySense v2.0 – Complete IoT Weather Monitoring System
From Embedded Prototype to Network-Enabled Intelligence
TEAM-
Priyanshi katore- Student 1
Parth Bhaskar- Student 2
Haleema Khan- Teacher
In Stage 1, SkySense functioned as a standalone embedded weather station.
In Stage 2, we transformed it into a fully operational IoT system using the ESP32, enabling real-time remote monitoring over WiFi.
This upgrade was not merely a hardware replacement…… it was a complete architectural evolution.
System Architecture
Hardware Components
DHT22 – Temperature & Humidity sensing
-
BMP085 – Atmospheric Pressure sensing
-
I2C 16x2 LCD – Real-time local display
-
ESP32 – WiFi-enabled microcontroller and web host
Software & Functional Design
SkySense v2.0 integrates:
-
Real-time sensor polling
-
Pressure differential–based weather prediction algorithm
-
Embedded HTTP web server hosted directly on ESP32
-
Dynamic HTML response generation
-
Auto-refreshing browser dashboard (5-second interval)
-
Dual-mode LCD display cycle:
-
Environmental Data View
-
Weather Prediction View
IoT Implementation
Operational pipeline:
Sensors → ESP32 Processing → LCD Output → Web Server → Browser Dashboard
System Achievements:
Successful WiFi authentication
Dynamic IP allocation
Live browser-accessible dashboard
Real-time temperature, humidity & pressure streaming
Functional weather prediction logic
Synchronized LCD and Web output
The system was successfully compiled, deployed, and demonstrated during Stage 2.
Deployment Complexity & Technical Adaptation
Transitioning to the ESP32 environment introduced additional setup layers compared to traditional microcontroller workflows.
This included:
-
Board package configuration
-
Driver recognition and port alignment
-
IDE environment setup
-
Network library integration
ESP32-based IoT deployment requires correct toolchain preparation before firmware execution.
We ensured:
-
Proper board configuration within the IDE
-
Stable driver communication
-
Successful WiFi library integration
-
Clean firmware upload and execution
This preparation enabled seamless network connection and live hosting during demonstration.
While many teams paused at this stage, we:
-
Diagnosed the missing library issue.
-
Verified board manager configuration.
-
Installed the required ESP32 board package.
-
Reconfigured the IDE settings.
-
Successfully compiled and uploaded the IoT-enabled code.
Technical Significance
This implementation demonstrates practical understanding of:
-
Embedded systems integration
-
Microcontroller-based networking
-
Edge device web hosting
-
Real-time data acquisition and processing
-
Applied IoT deployment architecture
Rather than limiting the device to local monitoring, we extended it into a scalable, network-accessible environmental intelligence system.
Demonstration Evidence
The attached image shows SkySense v2.0 during live demonstration, confirming:
-
Operational hardware setup
-
Active LCD environmental display
-
Successful IoT configuration
This validates full Stage 2 execution.
Evolution from Stage 1 to Stage 2
| Stage 1 |
Stage 2 |
| Local embedded weather station |
Network-enabled IoT system |
| Sensor display only |
Live web dashboard + LCD |
| Standalone hardware |
Real-time remote monitoring |
| Basic sensing |
Sensing + prediction + web hosting |
SkySense evolved from a prototype device into a connected smart monitoring platform.
Final Outcome
SkySense v2.0 successfully demonstrates:
-
Hardware–software integration
-
Network-enabled IoT deployment
-
Real-time web hosting from a microcontroller
-
Functional live demonstration under hackathon constraints
The project reflects our ability to execute a complete, working IoT system — not just conceptually, but practically.
HERE’S THE CODE—-
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// ===== WIFI DETAILS =====
const char* ssid = “OnePlus Nord CE4”;
const char* password = “haleemak”;
// ===== PIN DEFINITIONS =====
#define DHTPIN 4
#define DHTTYPE DHT22
// ===== OBJECTS =====
WiFiServer server(80);
Adafruit_BMP085 bmp;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ===== VARIABLES =====
float temperature;
float humidity;
float currentPressure = 0;
float lastPressure = 0;
String weatherPrediction = “Initializing”;
void setup() {
Serial.begin(115200);
dht.begin();
bmp.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(“SkySense v2.0”);
lcd.setCursor(0,1);
lcd.print(“Connecting WiFi”);
// Connect WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(“\nWiFi Connected!”);
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“WiFi Connected”);
delay(2000);
lcd.clear();
server.begin();
lastPressure = bmp.readPressure() / 100.0;
}
void loop() {
// ===== READ SENSORS =====
temperature = dht.readTemperature();
humidity = dht.readHumidity();
currentPressure = bmp.readPressure() / 100.0;
if (isnan(temperature) || isnan(humidity)) {
Serial.println("DHT Error!");
return;
}
// ===== WEATHER PREDICTION =====
float pressureDiff = currentPressure - lastPressure;
if (pressureDiff > 0.5)
weatherPrediction = "Clear Weather";
else if (pressureDiff < -0.5)
weatherPrediction = "Rain Likely";
else
weatherPrediction = "Stable";
lastPressure = currentPressure;
// ===== LCD DISPLAY =====
lcd.setCursor(0,0);
lcd.print(“T:”);
lcd.print(temperature,1);
lcd.print(“C H:”);
lcd.print(humidity,0);
lcd.setCursor(0,1);
lcd.print(“P:”);
lcd.print(currentPressure,0);
lcd.print(" ");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(weatherPrediction);
delay(2000);
lcd.clear();
// ===== WEB SERVER =====
WiFiClient client = server.available();
if (client) {
String request = client.readStringUntil('\\r');
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
client.println("<html><head><meta http-equiv='refresh' content='5'></head>");
client.println("<h1>SkySense v2.0</h1>");
client.println("<p>Temperature: " + String(temperature) + " C</p>");
client.println("<p>Humidity: " + String(humidity) + " %</p>");
client.println("<p>Pressure: " + String(currentPressure) + " hPa</p>");
client.println("<p>Prediction: " + weatherPrediction + "</p>");
client.println("</html>");
client.stop();
}
delay(2000);
}