TABLE 4 – Stage 2 Setup

The ESP32 setup is taking longer than expected to install and configure on my system, so I’m a bit delayed in getting started with Stage 2. I’m working on resolving it and should be up and running soon.

Please let me know if there are any suggested fixes!

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:

  1. Diagnosed the missing library issue.

  2. Verified board manager configuration.

  3. Installed the required ESP32 board package.

  4. Reconfigured the IDE settings.

  5. 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);

}

Nice effort. But you have not plotted the data graphically on ThingSpeak