3 min read
IoT Real-Time Sensoring
Full stack IoT real-time sensoring system

Project Overview

IoT Real-Time Sensoring is a full-stack application built to collect and visualize sensor data in real time. ESP32 microcontrollers read data from physical sensors and stream it to a backend, where a Flutter mobile app displays the live readings instantly.

The project was built during HackUPC, a 36-hour hackathon, by a team of 4 members. The time constraint shaped every decision: fast iteration, pragmatic choices, and a clear split of responsibilities within the team.


My Role

My main responsibility was the ESP32 firmware: reading sensor values, managing the WiFi connection, and sending data to the backend reliably within the hackathon timeframe.

The biggest challenge was a hardware conflict with the WiFi Arduino library — it required specific pins that were already in use by our sensors. Resolving this took a significant chunk of time during the event, but it was one of the most valuable debugging experiences of the project.


Design Process

1

Step 1 — Problem Definition

Define the project scope for the hackathon: real-time sensor data collection and visualization, achievable within 36 hours by a team of 4.

2

Step 2 — Hardware Setup

Set up ESP32 microcontrollers with the target sensors and establish the data pipeline from hardware to backend.

3

Step 3 — WiFi Pin Conflict

Identified and resolved a critical hardware conflict: the WiFi Arduino library required pins already occupied by the sensors. Required rerouting and firmware workarounds.

4

Step 4 — Backend & Real-Time Transport

Built the Express.js backend to receive sensor payloads from the ESP32 and expose them to the mobile client in real time.

5

Step 5 — Mobile App

Developed the Flutter app to fetch and display live sensor readings, updating the UI as new data arrived from the backend.

6

Step 6 — Grafana Dashboard

Integrated Grafana to provide a visual dashboard of the historical and live sensor data alongside the mobile app.


Features

Real-Time Data
Sensor readings streamed live from ESP32 to the mobile app with minimal latency.
ESP32 Firmware
Custom firmware handling sensor reading, WiFi connectivity, and data transmission.
Flutter App
Cross-platform mobile client displaying live sensor values as they arrive.
Grafana Dashboard
Visual dashboards for real-time and historical sensor data visualization.
36-Hour Build
Designed, built, and demoed during a single HackUPC hackathon weekend.
Team of 4
Collaborative development with clear role separation across hardware, backend, and frontend.

Tech Stack

LayerTechnology
MicrocontrollerESP32 (Arduino framework)
Firmware languageC++ / Python
BackendExpress.js (Node.js)
Mobile appFlutter (Dart)
DashboardsGrafana

Conclusions

Building a full-stack IoT system in 36 hours was as much a lesson in prioritization as it was in engineering. The hardware pin conflict with the WiFi library was a real blocker, the kind of low-level problem that doesn’t show up until you’re deep into integration, and solving it under time pressure made it memorable.

The result was a working end-to-end pipeline: physical sensors feeding real-time data through a backend into both a mobile app and Grafana dashboards. Constrained environments push you to find practical solutions fast, and this project was a clear example of that.

Related Content

esc close

Keyboard Shortcuts

Global Shortcuts

Open command palette
⌘K or Ctrl+K
Go to Projects
g then p
Go to Work
g then w
Go to Blog
g then b
Go to Home
g then h
Show keyboard shortcuts ?

Navigation Shortcuts

Scroll down j
Scroll up k
Jump to top gg
Jump to bottom G
Go back h
Go forward l
Jump to prev section [
Jump to next section ]

Palette Shortcuts

Quick select result 1-9
Navigate results ↑↓
Select result
Close palette Esc

Tips

  • Global shortcuts work from anywhere on the site
  • Press g twice quickly for chord shortcuts
  • Number shortcuts (1-9) only appear for the first 9 results
  • Chord shortcuts show a visual indicator in the bottom right
  • Navigation shortcuts (j/k/[/]) don't work when typing in input fields