diff --git a/iot.adoc b/iot.adoc index a1a6a54..6bf43ed 100644 --- a/iot.adoc +++ b/iot.adoc @@ -27,25 +27,30 @@ toc::[] == Σκοπός εργασίας [.text-justify] -Ο σκοπός της εργασίας μας είναι η η ανάγνωση δεδομένων απο έναν αισθητήρα κίνησης η αποθήκευση ή και αποστολή τους σε έναν 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} Η Εγκατάσταση θα ξεκινήσει και μετά απο την ολοκλήρωση κάποιων πρώτων εγκαταστάσεων θα γίνει η πρώτη διακοπή για να μας ρωτήσει τι θα χρειαστούμε να εγκαταστήσουμε [.text-center] @@ -289,7 +306,7 @@ image::./script_install_photos/8th_stop_smb.conf.png[750,750,title="SMB Conf"] === Ρύθμιση InfluxDB [.text-justify] -Αφού ολοκληρωθέι η επανεκκίνηση του συστήματος μας χρειάζονται 2 αλλαγές στο αρχείο ρυθμίσεων της InfluxDB. + +{nbsp}{nbsp}{nbsp}{nbsp} Αφού ολοκληρωθέι η επανεκκίνηση του συστήματος μας χρειάζονται 2 αλλαγές στο αρχείο ρυθμίσεων της InfluxDB. + Με καποιον editor της επιλογης μας ανοίγουμε το αρχείο infuxdb.conf με δικαιώματα sudo. [.text-center] sudo nano /etc/influxldb/influxdb.conf @@ -331,7 +348,7 @@ pi true === Ρύθμιση Graphana [.text-justify] -Ανοίγουμε έναν browser και πληκτρολογούμε την διευθυνση του υπολογιστή που εγκαταστήσαμε το grafana και βάζουμε την port 3000 +{nbsp}{nbsp}{nbsp}{nbsp} Ανοίγουμε έναν browser και πληκτρολογούμε την διευθυνση του υπολογιστή που εγκαταστήσαμε το grafana και βάζουμε την port 3000 πχ http://127.0.0.1:3000 . Θα μας ζητηθεί να εισαγουμε username και password και τα δύο είναι admin, αφού γίνει η σύνδεση θα μας ζητηθέι να αλλάξουμε το αρχικό password βάζουμε ένα της επιλογής μας και συνεχίζουμε. @@ -369,7 +386,7 @@ image::./script_install_photos/13th_graphana_import_menu.png[750,750,title="Json και ανεβάζουμε το αρχείο 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 λαμβάνει τα δεδομένα, τα γράφει σε ένα αρχείο τοπικά, τα εμφανίζει στην οθόνη μας και τα στέλνει προς την βάση δεδομένων για αποθήκευση. \ No newline at end of file +[.text-justify] +{nbsp}{nbsp}{nbsp}{nbsp} Με τις προσθήκες αυτές πλέον ο κώδικας της Python λαμβάνει τα δεδομένα, τα γράφει σε ένα αρχείο τοπικά, τα εμφανίζει στην οθόνη μας και τα στέλνει προς την βάση δεδομένων για αποθήκευση. \ No newline at end of file