Browse Source

Update v1.3

master
Evangelos Oulis 5 years ago
parent
commit
4432a02c7a
  1. 97
      project.html

97
project.html

@ -529,10 +529,10 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div class="sect3"> <div class="sect3">
<h4 id="_υλοποίηση_του_parking_sensor">1.1.2. Υλοποίηση του Parking Sensor</h4> <h4 id="_υλοποίηση_του_parking_sensor">1.1.2. Υλοποίηση του Parking Sensor</h4>
<div class="paragraph"> <div class="paragraph">
<p>Σε κάθε θέση parking υπάρχει ένας κόμβος απότελούμενος από ένα Arduino και έναν αισθητήρα <p>Σε κάθε θέση parking υπάρχει ένας κόμβος που αποτελείται από ένα Arduino Uno και έναν αισθητήρα
απόστασης (ultrasonic) εγκατεστημένος πάνω στο Arduino. Η λειτουργία αυτού βασίζεται στη απόστασης (ultrasonic) εγκατεστημένος πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στη
μέτρηση της απόστασης από τον κόμβο μέχρι κάποιο αντικείμενο (αυτοκίνητο) που εμποδίζει τη θέση του parking μέτρηση της απόστασης από τον κόμβο μέχρι κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίζει τη θέση του parking,
και την εξαγωγή της κατάσταασης της αυτής της θέσης στη σειριακή θύρα του Arduino.</p> καθώς και την εξαγωγή της κατάσταασης αντίστοιχης θέσης στη σειριακή θύρα του Arduino.</p>
</div> </div>
<div class="openblock float-group"> <div class="openblock float-group">
<div class="content"> <div class="content">
@ -573,12 +573,12 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div class="paragraph"> <div class="paragraph">
<p>Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την <p>Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την
μετάδοση της πληροφορίας που αφορά την διαθεσιμότητα της θέσης του parking στο διαδίκτυο. Η πληροφορία αυτή μετάδοση της πληροφορίας που αφορά την διαθεσιμότητα της θέσης του parking στο διαδίκτυο. Η πληροφορία αυτή
λαμβάνεται στον "Gateway" κόμβο οποίος στη συνέχεια την αποκωδικοποιεί και την αποστέλει στον WEB server μέσω του διαδικτύου.</p> λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια την αποκωδικοποιεί και την αποστέλει στον WEB server μέσω του διαδικτύου.</p>
</div> </div>
</div> </div>
</div> </div>
<div class="sect2"> <div class="sect2">
<h3 id="_gateway_node">1.2. Gateway Node</h3> <h3 id="_gateway_node_2ο_μέρος">1.2. Gateway Node (2<sub>ο</sub> μέρος)</h3>
<div class="sect3"> <div class="sect3">
<h4 id="_υλικά_κόμβου_2">1.2.1. Υλικά Κόμβου</h4> <h4 id="_υλικά_κόμβου_2">1.2.1. Υλικά Κόμβου</h4>
<div class="ulist"> <div class="ulist">
@ -605,31 +605,48 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<h4 id="_υλοποίηση_και_προγραμματισμός">1.2.2. Υλοποίηση και Προγραμματισμός</h4> <h4 id="_υλοποίηση_και_προγραμματισμός">1.2.2. Υλοποίηση και Προγραμματισμός</h4>
<div class="paragraph"> <div class="paragraph">
<p>Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS στο Raspberry και τη δημιουργία ενός proccess <p>Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS στο Raspberry και τη δημιουργία ενός proccess
σε γλώσσα python το οποίο διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από το Arduino με σε γλώσσα Python. Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από το αντίστοιχο Arduino Uno με
την μορφή &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;. Ύστερα αποκωδικοποιεί αυτή την πληροφορία η οποία περιγράφει τον κωδικό της θέσης την μορφή &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;. Ύστερα αποκωδικοποιεί αυτή την πληροφορία η οποία περιγράφει τον κωδικό της θέσης
και την διαθεσιμότητα της και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server.</p> και την διαθεσιμότητα της και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Τα δεδομέμα μας σε αυτήν
την επικοινωνία παίρνουν μία μορφή JSON (JavaScript Object Notation).</p>
</div> </div>
</div> </div>
<div class="sect3"> <div class="sect3">
<h4 id="_διασύνδεηση_στο_διαδίκτυο">1.2.3. Διασύνδεηση στο Διαδίκτυο</h4> <h4 id="_διασύνδεηση_στο_διαδίκτυο">1.2.3. Διασύνδεηση στο Διαδίκτυο</h4>
<div class="paragraph"> <div class="paragraph">
<p>Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει <p>Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει
να στείλει την πληροφορία</p> να στείλει την πληροφορία στο διαδίκτυο.</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="sect1"> <div class="sect1">
<h2 id="_server_node_κεντρικός_server_όπου_κρατά_την_κατάσταση_της_κάθε_θέσης_του_parking">2. Server Node (Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)</h2> <h2 id="_server_node_3ο_μέρος_κεντρικός_server_όπου_κρατά_την_κατάσταση_της_κάθε_θέσης_του_parking">2. Server Node (3<sub>ο</sub> μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)</h2>
<div class="sectionbody"> <div class="sectionbody">
<div class="paragraph"> <div class="paragraph">
<p>Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python 3.</p> <p>Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python 3. Αυτό το process εκτελεί ένα
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα πολλοί Gateway κόμβοι. Στην είσοδό του και στην έξοδό του
τα δεδομένα μας έχουν την μορφή JSON.</p>
</div>
<div class="paragraph">
<p>Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία Βάση δεδομένων MySQL, η οποία διαθέτει ένα πίνακα.
Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Τον κωδικό της θέσης parking</p>
</li>
<li>
<p>Την διαθεσιμότητά της αντίστοιχης θέση (0 ή 1)</p>
</li>
</ul>
</div> </div>
<div class="sect2"> <div class="sect2">
<h3 id="_εκτέλεση_του_process_στο_cloud">2.1. Εκτέλεση του Process στο Cloud</h3> <h3 id="_εκτέλεση_του_process_στο_cloud">2.1. Εκτέλεση του Process στο Cloud</h3>
<div class="paragraph"> <div class="paragraph">
<p>Για την εκτέλεση του process χρησιμοποιούμε την πλατφόρμα IAAS (Infrastructure as a Service) <p>Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) ονόματι
<a href="https://www.heroku.com/platform">Heroku</a>, για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο <a href="https://www.heroku.com/platform">Heroku</a>, για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο
παραπάνω.</p> παραπάνω.</p>
</div> </div>
@ -645,23 +662,63 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
</div> </div>
<div class="paragraph"> <div class="paragraph">
<p>Για την διαδικασία του deployment εκτελούμε ένα σύνολο βημάτων τα οποία αποτελούνται από την αντιγραφή του κώδικα <p>Για την διαδικασία του deployment εκτελούμε ένα σύνολο βημάτων τα οποία αποτελούνται από την αντιγραφή του κώδικα
σε ένα reposetory του <a href="https://github.com/">GitHub</a> και την δημιουργία ενός project στην πλατφόρμα για το σε ένα reposetory του <a href="https://github.com/oulievancs/serverNode">GitHub</a> και την δημιουργία ενός project στην πλατφόρμα για το
τρέξιμο του process. <a href="https://stackabuse.com/deploying-a-flask-application-to-heroku/">περισσότερα</a></p> τρέξιμο του process. <a href="https://stackabuse.com/deploying-a-flask-application-to-heroku/">περισσότερα</a>. Ακόμα
εγκαθισούμε στο project που μόλις φτιάξαμε μία MySQL βάση δεδομένων για να μπορούμε να αποθηκεύσουμε τα δεδομένα μας.</p>
</div> </div>
<div class="sect3">
<h4 id="_deployment">2.1.1. Deployment</h4>
<div class="ulist"> <div class="ulist">
<ul> <ul>
<li> <li>
<p>Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι <p>Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι
ώστε να γνωρίζει το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο ώστε να γνωρίζει το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο
ονόματι re</p> ονόματι requirements.txt .</p>
</li>
<li>
<p>Έπειτα την δημιουργία ενός αρχείου που περιγράφει το που βρίσκεται η κύρια συνέρτησή μας (main) για την
έναρξη του process. Αυτό το αρχείο ονομάζεται Procfile . Στο αρχείο αυτό αναφέτεται ένα gunicorn module.
Ο gunicorn είναι ένας Python HTTP WEB server. Αυτό ουσιαστικά είναι ο ο πυρήνας για την εκτέλεση του API μας.</p>
</li>
<li>
<p>Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης γαίνονται στο Heroku,
πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση.</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_rest_api">2.1.2. REST API</h4>
<div class="paragraph">
<p>Το REST API ουσιαστικά σηκώνει δύο υπηρεσίες. Αυτές είναι:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>/ [GET]: που πας επιστρέφει για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1.
Στο response τα δεδομένα μας παίρνουν μορφή JSON. Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων.</p>
</li>
<li>
<p>/parkingStatus [POST]: που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Το POST των δεδομένων
στο body γίνεται με την JSON αναπαράστασή τους έτσι ώστε να μπορέσει ο Server να τα επεξεργαστεί, ο οποίος στη
συνέχεια αποθηκεύει την νέα θέση στη Βάση δεδομένων.</p>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="sect1">
<h2 id="_διεπαφή_χρήστη_4ο_μέρος">3. Διεπαφή Χρήστη (4<sub>ο</sub> μέρος)</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Η διεπαφή του χρήσρη π</p>
</div>
</div>
</div>
<div class="sect1"> <div class="sect1">
<h2 id="_autonomous_parking">3. Autonomous Parking</h2> <h2 id="_autonomous_parking">4. Autonomous Parking</h2>
<div class="sectionbody"> <div class="sectionbody">
<div class="paragraph"> <div class="paragraph">
<p>Το αυτότομο πρκάριμα αποτελείται από το όχημα με εκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές <p>Το αυτότομο πρκάριμα αποτελείται από το όχημα με εκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές
@ -685,9 +742,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
</ul> </ul>
</div> </div>
<div class="sect2"> <div class="sect2">
<h3 id="_microcotroller_and_car">3.1. Microcotroller and Car</h3> <h3 id="_microcotroller_and_car">4.1. Microcotroller and Car</h3>
<div class="sect3"> <div class="sect3">
<h4 id="_υλικά_κόμβου_3">3.1.1. Υλικά Κόμβου</h4> <h4 id="_υλικά_κόμβου_3">4.1.1. Υλικά Κόμβου</h4>
<div class="ulist"> <div class="ulist">
<ul> <ul>
<li> <li>
@ -721,7 +778,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
</div> </div>
</div> </div>
<div class="sect3"> <div class="sect3">
<h4 id="_υλοποίηση_και_προγραμματισμός_2">3.1.2. Υλοποίηση και Προγραμματισμός</h4> <h4 id="_υλοποίηση_και_προγραμματισμός_2">4.1.2. Υλοποίηση και Προγραμματισμός</h4>
<div class="paragraph"> <div class="paragraph">
<p>Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε, <p>Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε,
τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters
@ -760,7 +817,7 @@ SLOW SUCCESS BUILDS CHARACTER, FAST SUCCESS BUILDS EGO.
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2020-01-13 15:00:33 +0200 Last updated 2020-01-15 09:47:53 +0200
</div> </div>
</div> </div>
</body> </body>

Loading…
Cancel
Save