Από τα RAW Data στην Πληροφορία: Οπτικοποίηση δεδομένων με το Arduino & Streamlit
Στο προηγούμενο tutorial της Unique Tech, είδαμε πώς να συνδέσουμε τους αισθητήρες μας μέσω I2C. Όμως, η πραγματική καινοτομία ξεκινά όταν αυτά τα δεδομένα γίνονται κατανοητά από τον χρήστη. Σήμερα, θα δούμε πώς να στείλουμε δεδομένα από το Arduino στην Python και να δημιουργήσουμε ένα εντυπωσιακό Live Dashboard χρησιμοποιώντας το Streamlit.
Το Project μας
Θα διαβάσουμε τιμές CO2 και θερμοκρασίας και θα τις στείλουμε μέσω της σειριακής θύρας (Serial) στον υπολογιστή μας. Εκεί, ένα script Python θα "ακούει" τη θύρα και θα ενημερώνει ένα δυναμικό γράφημα.
1. Ο Κώδικας του Arduino (.ino)
Αυτός ο κώδικας προετοιμάζει τα δεδομένα σε μορφή CSV (διαχωρισμένα με κόμμα) για να μπορεί η Python να τα διαβάσει εύκολα.
// Unique Tech - Sensor Data Sender
// Project: ACSTAC 2026 Innovation
void setup() {
Serial.begin(9600); // Ξεκινάμε τη σειριακή επικοινωνία
// Εδώ θα αρχικοποιούσατε τους αισθητήρες σας (π.χ. SCD4x ή PMS5003)
}
void loop() {
// Προσομοίωση μετρήσεων (αντικαταστήστε με τις πραγματικές τιμές των αισθητήρων)
float co2 = 400 + random(0, 100);
float temp = 22.0 + (random(0, 50) / 10.0);
// Στέλνουμε τα δεδομένα σε μορφή: CO2,Temperature
Serial.print(co2);
Serial.print(",");
Serial.println(temp);
delay(2000); // Καθυστέρηση 2 δευτερολέπτων μεταξύ των μετρήσεων
}
2. Το Dashboard σε Python & Streamlit (.py)
Για να τρέξετε αυτόν τον κώδικα, θα χρειαστείτε τις βιβλιοθήκες pyserial, pandas και streamlit. Εγκαταστήστε τις με:
pip install pyserial pandas streamlit
import streamlit as st
import serial
import pandas as pd
import time
from datetime import datetime
# Ρύθμιση της σελίδας
st.set_page_config(page_title="Unique Tech Live Dashboard", layout="wide")
st.title("📊 Unique Tech: Live Air Quality Analysis")
st.write("Παρακολούθηση δεδομένων από το Arduino σε πραγματικό χρόνο.")
# Ρυθμίσεις Σειριακής Θύρας (Αλλάξτε το 'COM3' ανάλογα με τη δική σας θύρα)
SERIAL_PORT = 'COM3'
BAUD_RATE = 9600
# Αποθήκευση δεδομένων σε ένα DataFrame στη μνήμη
if 'data' not in st.session_state:
st.session_state.data = pd.DataFrame(columns=['Time', 'CO2', 'Temp'])
# Containers για τα γραφήματα
placeholder = st.empty()
try:
# Σύνδεση με το Arduino
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
time.sleep(2) # Αναμονή για σταθεροποίηση
while True:
line = ser.readline().decode('utf-8').strip()
if line:
values = line.split(',')
if len(values) == 2:
new_row = {
'Time': datetime.now().strftime('%H:%M:%S'),
'CO2': float(values[0]),
'Temp': float(values[1])
}
# Ενημέρωση δεδομένων (κρατάμε τις τελευταίες 20 μετρήσεις)
st.session_state.data = pd.concat([st.session_state.data, pd.DataFrame([new_row])], ignore_index=True)
if len(st.session_state.data) > 20:
st.session_state.data = st.session_state.data.iloc[-20:]
# Σχεδίαση Dashboard
with placeholder.container():
col1, col2 = st.columns(2)
col1.metric("Current CO2", f"{values[0]} ppm")
col2.metric("Current Temp", f"{values[1]} °C")
st.subheader("Μεταβολή CO2")
st.line_chart(st.session_state.data.set_index('Time')['CO2'])
st.subheader("Μεταβολή Θερμοκρασίας")
st.line_chart(st.session_state.data.set_index('Time')['Temp'])
time.sleep(0.1)
except Exception as e:
st.error(f"Σφάλμα σύνδεσης: {e}. Βεβαιωθείτε ότι το Arduino είναι συνδεδεμένο στη θύρα {SERIAL_PORT}.")
Github: Βρες το εδώΠώς να το τρέξετε
Ανεβάστε τον κώδικα
.inoστο Arduino σας.Κλείστε το Serial Monitor του Arduino (σημαντικό!).
Τρέξτε την εντολή:
streamlit run your_script_name.py.Δείτε το Dashboard να ζωντανεύει στον browser σας!
Σχολιάστε παρακάτω: Θα θέλατε να δούμε πώς να ανεβάσουμε αυτά τα δεδομένα στο Cloud για απομακρυσμένη παρακολούθηση;
#UniqueTech #Arduino #Python #Streamlit #Innovation #ACSTAC2026 #DataViz
Σχόλια
Δημοσίευση σχολίου