A real-time hardware telemetry dashboard built with Arduino, Python, Flask, and Socket.IO.
This project reads sensor data from an Arduino over serial, sends it to a Python backend, and visualizes it live in a browser dashboard.
Built for the ACM x WECE Hardware Telemetry Workshop (2026).
This project shows how to build a simple full-stack hardware interface:
You will learn how to:
- Read sensor data on an Arduino
- Send structured data over serial
- Parse data in Python
- Stream telemetry with websockets
- Visualize real-time data in a browser dashboard
-
Real-time telemetry dashboard
-
Works with Arduino Uno
-
Supports potentiometer + temperature sensor
-
Serial data formatted as JSON
-
Live statistics:
- current value
- min / max
- moving average
-
Chart visualization with Chart.js
-
Fake data mode for testing without hardware
Any Arduino Uno compatible board.
Workshop tested kits:
- Arduino Uno Starter Kit
- Elegoo Arduino Uno Starter Kit
Components used:
- Arduino Uno
- Potentiometer
- LM35 temperature sensor
- Breadboard
- Jumper wires
Note: You will need a standard USB port. The Arduino cable typically is USB and not USBC.
- You will first fork this repo, and then clone your fork to your machine
git clone https://github.com/<your-username>/hardware-dashboard-workshop.git
cd hardware-dashboard-workshopRecommended:
python -m venv venvActivate it.
Windows
venv\Scripts\activateMac / Linux
source venv/bin/activatepip install -r requirements.txtDependencies include:
- flask
- flask-socketio
- pyserial
Upload the Arduino sketch from:
telemetry/telemetry.ino
The sketch:
- reads the potentiometer and temperature sensor
- converts them to normalized values
- sends JSON telemetry over serial
Example output:
{"t_ms":5234,"pot":0.53,"temp":0.41}Serial settings:
baud rate: 115200
Start the Python server.
python server/app.py --source fakepython server/app.py --source serial --port COM5NOTE: your port may be different. You can check (on Windows) by searching for Device Manager in the start menu, and clicking on the Ports dropdown
Examples:
Windows
python server/app.py --source serial --port COM5Mac
python server/app.py --source serial --port /dev/tty.usbmodemXXXXLinux
python server/app.py --source serial --port /dev/ttyACM0Then open your browser:
http://127.0.0.1:5000
You should see the live telemetry dashboard.
--source fake | serial
--port serial port (required for serial mode)
--baud baud rate (default 115200)
Example:
python server/app.py --source serial --port COM5 --baud 9600Telemetry is sent as JSON lines:
{
"t_ms": 5234,
"pot": 0.53,
"temp": 0.41
}Fields:
| Field | Description |
|---|---|
| t_ms | milliseconds since Arduino boot |
| pot | potentiometer value (0–1) |
| temp | normalized temperature value (0–1) |
If hardware is unavailable, the dashboard can generate synthetic telemetry.
Run:
python server/app.py --source fakeThis allows students to:
- test the dashboard
- debug frontend code
- run the project without hardware
Check the console output of app.py.
Ensure the correct port is used:
Windows example:
COM3
COM4
COM5
Check in Arduino IDE → Tools → Port.
This is expected behavior. Opening the serial port triggers an Arduino reset.
The server waits briefly to allow the Arduino to reboot.
Jacob Frankel Sally Golding
ACM @ University of Florida Women in Electrical & Computer Engineering (WECE)