Ο σκοπός της εργασίας μας είναι η η ανάγνωση δεδομένων απο έναν αισθητήρα κίνησης η αποθήκευση ή και αποστολή τους σε έναν server σε ένα σμήνος.
{nbsp}{nbsp}{nbsp}{nbsp} Ο σκοπός της εργασίας μας είναι η η ανάγνωση δεδομένων απο έναν αισθητήρα κίνησης η αποθήκευση ή και αποστολή τους σε έναν server σε ένα σμήνος.
=== Ανάγνωση δεδομένων και αποστολή τους
[.text-justify]
Ο τρόπος που επιλέχθηκε για την πραγματοποίησει της εργασίας είναι :
[square]
* Χρήση του Arduino nano για την ανάγνωση των δεδομένων του αισθητήρα.
* Χρήση του Raspberry PI Zero W για την επεξεργασία και την αποστολή των δεδομένων μας στον server.
== Συνδεσμολογία και επικοινωνία.
[.text-center]
image::./photos/raspbduino.png[150,150]
== Συνδεσμολογία και επικοινωνία
[.text-justify]
Για την επικοινωνία μεταξύ raspberry και arduino, επιλέχθηκε να γίνει χρήση του πρωτόκολλου I2C και όχι του πρωτόκολλου σειριακής επικοινωνίας.
{nbsp}{nbsp}{nbsp}{nbsp} Για την επικοινωνία μεταξύ raspberry και arduino, επιλέχθηκε να γίνει χρήση του πρωτόκολλου I2C και όχι του πρωτόκολλου σειριακής επικοινωνίας.
Αυτη η επιλογή μας δίνει το πλεονέκτημα, να μπορούμε να χρησιμοποιήσουμε το Serial Monitor του arduino, ταυτοχρονα με την επικοινωνία του με το
raspberry για χρήση debugging ή για οτιδήποτε άλλο. Το μειονέκτημα της επιλογής είναι άυξηση της πολυπλοκότητας του κωδικα μας αλλά και την
ανάγκη ειδικών διατάξεων για την πραγματοποιήσει της επικοινωνίας (Logic level converter).
{empty} +
[.text-center]
image::./photos/i2clogo.png[200,200]
{empty} +
Το arduino χρησιμοποιεί λογική των 5V στις εισόδους/εξόδους του ενώ το raspberry 3,3V, αυτό έχει ως αποτέλεσμα ενώ μπορέι το arduino να διαβάσει τα δεδομένα
{nbsp}{nbsp}{nbsp}{nbsp} Το arduino χρησιμοποιεί λογική των 5V στις εισόδους/εξόδους του ενώ το raspberry 3,3V, αυτό έχει ως αποτέλεσμα ενώ μπορέι το arduino να διαβάσει τα δεδομένα
που του αποστέλλονται απο το raspberry στην αποστολή των δεδομένων απο το arduino προς το raspberry υπάρχει μεγάλος κίνδυνος να δημιουργήσουμε μόνιμη καταστροφή
στις εισόδους του ή και ολοκληρωτική καταστροφή του μικροεπεξεργαστη του raspberry. Για την αποφυγή οποιουδήποτε προβλήματος και την ακεραιότητα των δεδομένων μας
παρεμβάλλουμε στην μεταξύ τους σύνδεση εναν logic level converter.
@ -204,17 +209,29 @@ while True:
{empty} +
== Graphana & influxDB
[.text-center]
image::./photos/influxgraph.png[350,350]
[.text-justify]
Για την πραγματοποίηση της εργασίας μας χρησιμοποιήθηκε το εργαλέιο Graphana για την εικονικοποίηση των δεδομένων σε γραφήματα
{nbsp}{nbsp}{nbsp}{nbsp} Για την πραγματοποίηση της εργασίας μας χρησιμοποιήθηκε το εργαλέιο Graphana για την εικονικοποίηση των δεδομένων σε γραφήματα
και η για την αποθήκευση των δεδομένων επιλέχθηκε η βάση δεδομένων InfluxDB.
[.text-justify]
{empty} +
[.text-left]
image::./photos/graphana.png[100,100]
=== Graphana
Το Graphana είναι μία δικτυακή εφαρμογή που με τις κατάλληλες ρυθμίσεις μπορέι να παρέχει διαγράμματα,
[.text-justify]
{nbsp}{nbsp}{nbsp}{nbsp} Το Graphana είναι μία δικτυακή εφαρμογή που με τις κατάλληλες ρυθμίσεις μπορέι να παρέχει διαγράμματα,
γραφήματα η ακόμα και ειδοποιήσεις με τα δεδομένα που διαβάζει απο τα data sources της. https://grafana.com/
{empty} +
[.text-left]
image::./photos/influx.png[100,100]
=== InfluxDb
Η βάση δεδομένων InfluxDB είναι παρομοια με μία βάση τύπου SQL αλλά με αρκετές διαφορές.
{nbsp}{nbsp}{nbsp}{nbsp} Η βάση δεδομένων InfluxDB είναι παρομοια με μία βάση τύπου SQL αλλά με αρκετές διαφορές.
Η InfluxDB είναι σχεδιασμένη ειδικα για να διαχειρίζεται δεδομένα προσανατολισμένα προς τον χρόνο.
Ενώ και οι κλασσικές SQL βάσεις έχουν την ικανοτητα να διαχειριστούν τέτοιου τύπου δεδομένα δεν έχουν
την ικανότητα να διαχειριστούν μεγάλο όγκο και υψηλής συχνότητα τέτοιου τύπου δεδομένα.
@ -223,12 +240,12 @@ while True:
=== Εγκατάσταση Graphana & influxDB
[WARNING]
[.text-justify]
Ο οδηγός αυτός απευθύνεται για Εγκατάσταση είτε σε Raspberry Pi 3 και νεότερο, είτε σε υπολογιστές που έχουν εγκαταστήσει το Raspberry Pi OS
{nbsp}{nbsp}{nbsp}{nbsp} Ο οδηγός αυτός απευθύνεται για Εγκατάσταση είτε σε Raspberry Pi 3 και νεότερο, είτε σε υπολογιστές που έχουν εγκαταστήσει το Raspberry Pi OS
για οποιαδήποτε, άλλη χρήση θα δημιουργηθούν μικροπροβλήματα που θα πρέπει να αντιμετωπιστούν απο εσάς ανάλογα το σύστημα σας. +
[.text-center]
Η Εγκατάσταση καθώς και η χρήση των παραπάνω εργαλέιων έγινε σε Raspberry Pi 4
[.text-justify]
To script εγκαθιστά και περαιτερω εργαλέια που ίσως να μην είναι χρήσιμα για όλους όπως Node RED, Log2ram, Mosquitto MQTT Broker etc. Δίνεται όμως η επιλογή για μη εγκατάσταση τους
{nbsp}{nbsp}{nbsp}{nbsp} To script εγκαθιστά και περαιτερω εργαλέια που ίσως να μην είναι χρήσιμα για όλους όπως Node RED, Log2ram, Mosquitto MQTT Broker etc. Δίνεται όμως η επιλογή για μη εγκατάσταση τους
==== Κατέβασμα και εκτέλεση του αυτοματοποιημένου script
Κατεβάζουμε το script με την εντολή:
@ -239,7 +256,7 @@ To script εγκαθιστά και περαιτερω εργαλέια που
[.text-center]
bash ./script.sh
[.text-justify]
Η Εγκατάσταση θα ξεκινήσει και μετά απο την ολοκλήρωση κάποιων πρώτων εγκαταστάσεων θα γίνει η πρώτη διακοπή για να μας ρωτήσει τι θα χρειαστούμε
{nbsp}{nbsp}{nbsp}{nbsp} Η Εγκατάσταση θα ξεκινήσει και μετά απο την ολοκλήρωση κάποιων πρώτων εγκαταστάσεων θα γίνει η πρώτη διακοπή για να μας ρωτήσει τι θα χρειαστούμε
και ανεβάζουμε το αρχείο link:json{ext-relative}[JSON]
== Προσθήκες στον κώδικα της Python
Για να μπορέσουμε να τοποθετήσουμε τα δεδομένα στην βάση που μόλις δημιουργήσαμε θα πρέπει να γίνουν κάποιες προσθήκες στον κώδικα μας έτσι ώστε να στέλνονται τα δεδομένα ταυτόχρονα με τις άλλες λειτουργίες.
{nbsp}{nbsp}{nbsp}{nbsp} Για να μπορέσουμε να τοποθετήσουμε τα δεδομένα στην βάση που μόλις δημιουργήσαμε θα πρέπει να γίνουν κάποιες προσθήκες στον κώδικα μας έτσι ώστε να στέλνονται τα δεδομένα ταυτόχρονα με τις άλλες λειτουργίες.
[source, python]
--------------------------
@ -418,4 +435,5 @@ while True:
<1> Δημιουργία Σύνδεσης με την βάση (IP που βρίσκεται η βάση δεδομένων μας, Port που βρίσκεται η βάση δεδομένων μας, username του χρήστη για την βάση, password του χρήστη για την βάση, επιλογή βάσης)
<2> Αποστολή δεδομένων με την βάση (δημιουργία entry στην βάση sensor με τα δεδομένα που στάλθηκαν απο το Arduino)
Με τις προσθήκες αυτές πλέον ο κώδικας της Python λαμβάνει τα δεδομένα, τα γράφει σε ένα αρχείο τοπικά, τα εμφανίζει στην οθόνη μας και τα στέλνει προς την βάση δεδομένων για αποθήκευση.
[.text-justify]
{nbsp}{nbsp}{nbsp}{nbsp} Με τις προσθήκες αυτές πλέον ο κώδικας της Python λαμβάνει τα δεδομένα, τα γράφει σε ένα αρχείο τοπικά, τα εμφανίζει στην οθόνη μας και τα στέλνει προς την βάση δεδομένων για αποθήκευση.