Από τα 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: Βρες το εδώ

Πώς να το τρέξετε

  1. Ανεβάστε τον κώδικα .ino στο Arduino σας.

  2. Κλείστε το Serial Monitor του Arduino (σημαντικό!).

  3. Τρέξτε την εντολή: streamlit run your_script_name.py.

  4. Δείτε το Dashboard να ζωντανεύει στον browser σας!

Σχολιάστε παρακάτω: Θα θέλατε να δούμε πώς να ανεβάσουμε αυτά τα δεδομένα στο Cloud για απομακρυσμένη παρακολούθηση;

#UniqueTech #Arduino #Python #Streamlit #Innovation #ACSTAC2026 #DataViz

Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Πώς να "διαβάζεις" τον αέρα: Σύνδεση αισθητήρων μέσω I2C με Arduino

Γιατί νυστάζουμε στην τάξη; Η αλήθεια πίσω από το CO2 και η λύση της Unique Tech

Καλωσορίσατε στο Unique Tech Blog!