parent
commit
6ba12299d1
  1. 52
      iot.adoc

52
iot.adoc

@ -27,25 +27,30 @@
toc::[] toc::[]
== Σκοπός εργασίας == Σκοπός εργασίας
[.text-justify] [.text-justify]
Ο σκοπός της εργασίας μας είναι η η ανάγνωση δεδομένων απο έναν αισθητήρα κίνησης η αποθήκευση ή και αποστολή τους σε έναν server σε ένα σμήνος. {nbsp}{nbsp}{nbsp}{nbsp} Ο σκοπός της εργασίας μας είναι η η ανάγνωση δεδομένων απο έναν αισθητήρα κίνησης η αποθήκευση ή και αποστολή τους σε έναν server σε ένα σμήνος.
=== Ανάγνωση δεδομένων και αποστολή τους === Ανάγνωση δεδομένων και αποστολή τους
[.text-justify] [.text-justify]
Ο τρόπος που επιλέχθηκε για την πραγματοποίησει της εργασίας είναι : Ο τρόπος που επιλέχθηκε για την πραγματοποίησει της εργασίας είναι :
[square]
* Χρήση του Arduino nano για την ανάγνωση των δεδομένων του αισθητήρα. * Χρήση του Arduino nano για την ανάγνωση των δεδομένων του αισθητήρα.
* Χρήση του Raspberry PI Zero W για την επεξεργασία και την αποστολή των δεδομένων μας στον server. * Χρήση του Raspberry PI Zero W για την επεξεργασία και την αποστολή των δεδομένων μας στον server.
== Συνδεσμολογία και επικοινωνία. [.text-center]
image::./photos/raspbduino.png[150,150]
== Συνδεσμολογία και επικοινωνία
[.text-justify] [.text-justify]
Για την επικοινωνία μεταξύ raspberry και arduino, επιλέχθηκε να γίνει χρήση του πρωτόκολλου I2C και όχι του πρωτόκολλου σειριακής επικοινωνίας. {nbsp}{nbsp}{nbsp}{nbsp} Για την επικοινωνία μεταξύ raspberry και arduino, επιλέχθηκε να γίνει χρήση του πρωτόκολλου I2C και όχι του πρωτόκολλου σειριακής επικοινωνίας.
Αυτη η επιλογή μας δίνει το πλεονέκτημα, να μπορούμε να χρησιμοποιήσουμε το Serial Monitor του arduino, ταυτοχρονα με την επικοινωνία του με το Αυτη η επιλογή μας δίνει το πλεονέκτημα, να μπορούμε να χρησιμοποιήσουμε το Serial Monitor του arduino, ταυτοχρονα με την επικοινωνία του με το
raspberry για χρήση debugging ή για οτιδήποτε άλλο. Το μειονέκτημα της επιλογής είναι άυξηση της πολυπλοκότητας του κωδικα μας αλλά και την raspberry για χρήση debugging ή για οτιδήποτε άλλο. Το μειονέκτημα της επιλογής είναι άυξηση της πολυπλοκότητας του κωδικα μας αλλά και την
ανάγκη ειδικών διατάξεων για την πραγματοποιήσει της επικοινωνίας (Logic level converter). ανάγκη ειδικών διατάξεων για την πραγματοποιήσει της επικοινωνίας (Logic level converter).
{empty} + {empty} +
[.text-center]
image::./photos/i2clogo.png[200,200]
{empty} + {empty} +
Το arduino χρησιμοποιεί λογική των 5V στις εισόδους/εξόδους του ενώ το raspberry 3,3V, αυτό έχει ως αποτέλεσμα ενώ μπορέι το arduino να διαβάσει τα δεδομένα {nbsp}{nbsp}{nbsp}{nbsp} Το arduino χρησιμοποιεί λογική των 5V στις εισόδους/εξόδους του ενώ το raspberry 3,3V, αυτό έχει ως αποτέλεσμα ενώ μπορέι το arduino να διαβάσει τα δεδομένα
που του αποστέλλονται απο το raspberry στην αποστολή των δεδομένων απο το arduino προς το raspberry υπάρχει μεγάλος κίνδυνος να δημιουργήσουμε μόνιμη καταστροφή που του αποστέλλονται απο το raspberry στην αποστολή των δεδομένων απο το arduino προς το raspberry υπάρχει μεγάλος κίνδυνος να δημιουργήσουμε μόνιμη καταστροφή
στις εισόδους του ή και ολοκληρωτική καταστροφή του μικροεπεξεργαστη του raspberry. Για την αποφυγή οποιουδήποτε προβλήματος και την ακεραιότητα των δεδομένων μας στις εισόδους του ή και ολοκληρωτική καταστροφή του μικροεπεξεργαστη του raspberry. Για την αποφυγή οποιουδήποτε προβλήματος και την ακεραιότητα των δεδομένων μας
παρεμβάλλουμε στην μεταξύ τους σύνδεση εναν logic level converter. παρεμβάλλουμε στην μεταξύ τους σύνδεση εναν logic level converter.
@ -204,17 +209,29 @@ while True:
{empty} + {empty} +
== Graphana & influxDB == Graphana & influxDB
[.text-center]
image::./photos/influxgraph.png[350,350]
[.text-justify] [.text-justify]
Για την πραγματοποίηση της εργασίας μας χρησιμοποιήθηκε το εργαλέιο Graphana για την εικονικοποίηση των δεδομένων σε γραφήματα {nbsp}{nbsp}{nbsp}{nbsp} Για την πραγματοποίηση της εργασίας μας χρησιμοποιήθηκε το εργαλέιο Graphana για την εικονικοποίηση των δεδομένων σε γραφήματα
και η για την αποθήκευση των δεδομένων επιλέχθηκε η βάση δεδομένων InfluxDB. και η για την αποθήκευση των δεδομένων επιλέχθηκε η βάση δεδομένων InfluxDB.
[.text-justify] {empty} +
[.text-left]
image::./photos/graphana.png[100,100]
=== Graphana === Graphana
Το Graphana είναι μία δικτυακή εφαρμογή που με τις κατάλληλες ρυθμίσεις μπορέι να παρέχει διαγράμματα, [.text-justify]
{nbsp}{nbsp}{nbsp}{nbsp} Το Graphana είναι μία δικτυακή εφαρμογή που με τις κατάλληλες ρυθμίσεις μπορέι να παρέχει διαγράμματα,
γραφήματα η ακόμα και ειδοποιήσεις με τα δεδομένα που διαβάζει απο τα data sources της. https://grafana.com/ γραφήματα η ακόμα και ειδοποιήσεις με τα δεδομένα που διαβάζει απο τα data sources της. https://grafana.com/
{empty} +
[.text-left]
image::./photos/influx.png[100,100]
=== InfluxDb === InfluxDb
Η βάση δεδομένων InfluxDB είναι παρομοια με μία βάση τύπου SQL αλλά με αρκετές διαφορές. {nbsp}{nbsp}{nbsp}{nbsp} Η βάση δεδομένων InfluxDB είναι παρομοια με μία βάση τύπου SQL αλλά με αρκετές διαφορές.
Η InfluxDB είναι σχεδιασμένη ειδικα για να διαχειρίζεται δεδομένα προσανατολισμένα προς τον χρόνο. Η InfluxDB είναι σχεδιασμένη ειδικα για να διαχειρίζεται δεδομένα προσανατολισμένα προς τον χρόνο.
Ενώ και οι κλασσικές SQL βάσεις έχουν την ικανοτητα να διαχειριστούν τέτοιου τύπου δεδομένα δεν έχουν Ενώ και οι κλασσικές SQL βάσεις έχουν την ικανοτητα να διαχειριστούν τέτοιου τύπου δεδομένα δεν έχουν
την ικανότητα να διαχειριστούν μεγάλο όγκο και υψηλής συχνότητα τέτοιου τύπου δεδομένα. την ικανότητα να διαχειριστούν μεγάλο όγκο και υψηλής συχνότητα τέτοιου τύπου δεδομένα.
@ -223,12 +240,12 @@ while True:
=== Εγκατάσταση Graphana & influxDB === Εγκατάσταση Graphana & influxDB
[WARNING] [WARNING]
[.text-justify] [.text-justify]
Ο οδηγός αυτός απευθύνεται για Εγκατάσταση είτε σε Raspberry Pi 3 και νεότερο, είτε σε υπολογιστές που έχουν εγκαταστήσει το Raspberry Pi OS {nbsp}{nbsp}{nbsp}{nbsp} Ο οδηγός αυτός απευθύνεται για Εγκατάσταση είτε σε Raspberry Pi 3 και νεότερο, είτε σε υπολογιστές που έχουν εγκαταστήσει το Raspberry Pi OS
για οποιαδήποτε, άλλη χρήση θα δημιουργηθούν μικροπροβλήματα που θα πρέπει να αντιμετωπιστούν απο εσάς ανάλογα το σύστημα σας. + για οποιαδήποτε, άλλη χρήση θα δημιουργηθούν μικροπροβλήματα που θα πρέπει να αντιμετωπιστούν απο εσάς ανάλογα το σύστημα σας. +
[.text-center] [.text-center]
Η Εγκατάσταση καθώς και η χρήση των παραπάνω εργαλέιων έγινε σε Raspberry Pi 4 Η Εγκατάσταση καθώς και η χρήση των παραπάνω εργαλέιων έγινε σε Raspberry Pi 4
[.text-justify] [.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
Κατεβάζουμε το script με την εντολή: Κατεβάζουμε το script με την εντολή:
@ -239,7 +256,7 @@ To script εγκαθιστά και περαιτερω εργαλέια που
[.text-center] [.text-center]
bash ./script.sh bash ./script.sh
[.text-justify] [.text-justify]
Η Εγκατάσταση θα ξεκινήσει και μετά απο την ολοκλήρωση κάποιων πρώτων εγκαταστάσεων θα γίνει η πρώτη διακοπή για να μας ρωτήσει τι θα χρειαστούμε {nbsp}{nbsp}{nbsp}{nbsp} Η Εγκατάσταση θα ξεκινήσει και μετά απο την ολοκλήρωση κάποιων πρώτων εγκαταστάσεων θα γίνει η πρώτη διακοπή για να μας ρωτήσει τι θα χρειαστούμε
να εγκαταστήσουμε να εγκαταστήσουμε
[.text-center] [.text-center]
@ -289,7 +306,7 @@ image::./script_install_photos/8th_stop_smb.conf.png[750,750,title="SMB Conf"]
=== Ρύθμιση InfluxDB === Ρύθμιση InfluxDB
[.text-justify] [.text-justify]
Αφού ολοκληρωθέι η επανεκκίνηση του συστήματος μας χρειάζονται 2 αλλαγές στο αρχείο ρυθμίσεων της InfluxDB. + {nbsp}{nbsp}{nbsp}{nbsp} Αφού ολοκληρωθέι η επανεκκίνηση του συστήματος μας χρειάζονται 2 αλλαγές στο αρχείο ρυθμίσεων της InfluxDB. +
Με καποιον editor της επιλογης μας ανοίγουμε το αρχείο infuxdb.conf με δικαιώματα sudo. Με καποιον editor της επιλογης μας ανοίγουμε το αρχείο infuxdb.conf με δικαιώματα sudo.
[.text-center] [.text-center]
sudo nano /etc/influxldb/influxdb.conf sudo nano /etc/influxldb/influxdb.conf
@ -331,7 +348,7 @@ pi true
=== Ρύθμιση Graphana === Ρύθμιση Graphana
[.text-justify] [.text-justify]
Ανοίγουμε έναν browser και πληκτρολογούμε την διευθυνση του υπολογιστή που εγκαταστήσαμε το grafana και βάζουμε την port 3000 {nbsp}{nbsp}{nbsp}{nbsp} Ανοίγουμε έναν browser και πληκτρολογούμε την διευθυνση του υπολογιστή που εγκαταστήσαμε το grafana και βάζουμε την port 3000
πχ http://127.0.0.1:3000 . Θα μας ζητηθεί να εισαγουμε username και password και τα δύο είναι admin, πχ http://127.0.0.1:3000 . Θα μας ζητηθεί να εισαγουμε username και password και τα δύο είναι admin,
αφού γίνει η σύνδεση θα μας ζητηθέι να αλλάξουμε το αρχικό password βάζουμε ένα της επιλογής μας και συνεχίζουμε. αφού γίνει η σύνδεση θα μας ζητηθέι να αλλάξουμε το αρχικό password βάζουμε ένα της επιλογής μας και συνεχίζουμε.
@ -369,7 +386,7 @@ image::./script_install_photos/13th_graphana_import_menu.png[750,750,title="Json
και ανεβάζουμε το αρχείο link:json{ext-relative}[JSON] και ανεβάζουμε το αρχείο link:json{ext-relative}[JSON]
== Προσθήκες στον κώδικα της Python == Προσθήκες στον κώδικα της Python
Για να μπορέσουμε να τοποθετήσουμε τα δεδομένα στην βάση που μόλις δημιουργήσαμε θα πρέπει να γίνουν κάποιες προσθήκες στον κώδικα μας έτσι ώστε να στέλνονται τα δεδομένα ταυτόχρονα με τις άλλες λειτουργίες. {nbsp}{nbsp}{nbsp}{nbsp} Για να μπορέσουμε να τοποθετήσουμε τα δεδομένα στην βάση που μόλις δημιουργήσαμε θα πρέπει να γίνουν κάποιες προσθήκες στον κώδικα μας έτσι ώστε να στέλνονται τα δεδομένα ταυτόχρονα με τις άλλες λειτουργίες.
[source, python] [source, python]
-------------------------- --------------------------
@ -418,4 +435,5 @@ while True:
<1> Δημιουργία Σύνδεσης με την βάση (IP που βρίσκεται η βάση δεδομένων μας, Port που βρίσκεται η βάση δεδομένων μας, username του χρήστη για την βάση, password του χρήστη για την βάση, επιλογή βάσης) <1> Δημιουργία Σύνδεσης με την βάση (IP που βρίσκεται η βάση δεδομένων μας, Port που βρίσκεται η βάση δεδομένων μας, username του χρήστη για την βάση, password του χρήστη για την βάση, επιλογή βάσης)
<2> Αποστολή δεδομένων με την βάση (δημιουργία entry στην βάση sensor με τα δεδομένα που στάλθηκαν απο το Arduino) <2> Αποστολή δεδομένων με την βάση (δημιουργία entry στην βάση sensor με τα δεδομένα που στάλθηκαν απο το Arduino)
Με τις προσθήκες αυτές πλέον ο κώδικας της Python λαμβάνει τα δεδομένα, τα γράφει σε ένα αρχείο τοπικά, τα εμφανίζει στην οθόνη μας και τα στέλνει προς την βάση δεδομένων για αποθήκευση. [.text-justify]
{nbsp}{nbsp}{nbsp}{nbsp} Με τις προσθήκες αυτές πλέον ο κώδικας της Python λαμβάνει τα δεδομένα, τα γράφει σε ένα αρχείο τοπικά, τα εμφανίζει στην οθόνη μας και τα στέλνει προς την βάση δεδομένων για αποθήκευση.
Loading…
Cancel
Save