Browse Source

Update v1.3

master
Evangelos Oulis 5 years ago
parent
commit
99fb8eeb13
  1. 143
      project.html

143
project.html

@ -472,8 +472,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<h2 id="_smart_parking">1. Smart Parking</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Το "Smart Parking" Έξυπνο πάρκινγκ βασίζεται στη διαδικασία όπου η κατάσταση του πάρκινγκ κοινοποιείται
μέσω ενός συνόλου hardware και software στο διαδίκτυο έτσι ώστε να πετυχουμε η κατάσταση του να είναι διαθέσιμη
<p>Το "Smart Parking" Έξυπνο πάρκινγκ βασίζεται στη ιδέα όπου η κατάσταση του πάρκινγκ κοινοποιείται
μέσω ενός συνόλου hardware και software στο διαδίκτυο έτσι ώστε να πετύχουμε η κατάσταση του να είναι διαθέσιμη
"accesable" από το διαδίκτυο. Αυτό το χαρακτηριστικό κάνει αυτό το αντικειμένο μέρος του διαδικτύου και του κόσμου του IoT.</p>
</div>
<div class="paragraph">
@ -486,22 +486,94 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
έναν μικροελεγκτή (Arduino Uno), έτσι ώστε να ανιχνεύει και να κωδικοποιεί για μία συγκεκριμένη θέση έαν υπάρχει
κάποιο όχημα ή όχι.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/sensorNode/sensorNode.ino" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/sensorNode/sensorNode.ino</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
<li>
<p>Το 2<sub>ο</sub> μέρος αποτελείται από τον συσκευή gateway σε Raspberry Pi1, η οποία διαβάζει στη σειριακή του
τη πληροφορία από το Arduino Uno, που κάνει "sense" μία θέση parking, και στέλνει αυτή την πληροφορία
σε έναν web server με χρήση REST API.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/gatewayNode" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/gatewayNode</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
<li>
<p>To 3<sub>o</sub> μέρος αποτελείται από τον WEB Server ο οποίος αποτελείται από ένα process γραμμένο σε python. Το proccess αυτό υλοποιεί
έναν REST API WEB Server έτσι ώστε να μπορεί να αποθηκεύει την κατάσταση κάθε θέσης parking σε μία δομή λίστας με χαρακτηριστικό
κλειδί τον κωδικό κάθε θέσης parking.</p>
<p>To 3<sub>o</sub> μέρος αποτελείται από τον WEB Server ο οποίος αποτελείται από ένα process υλοποιημένο σε γλώσσα προγραμματιμού python.
Το proccess αυτό υλοποιεί έναν REST API WEB Server έτσι ώστε να μπορεί να αποθηκεύει την κατάσταση κάθε θέσης parking σε μία βάση
δεδομένων δύο δομή λίστας με χαρακτηριστικό κλειδί τον κωδικό κάθε θέσης parking.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/serverNode" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/serverNode</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
<li>
<p>Το 4<sub>o</sub> μέρος αποτελείται από την διεπαφή χρήστη (Interface), η οποία μέσω WEB σελίδας βλέπει κανείς την κατάσταση
του parking, δηλαδή πόσες και ποιές θέσεις μέσα στον χώρο είναι ελεύθερες.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/webInterface" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/webInterface</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="_parking_sensor_node_1ο_μέρος">1.1. Parking Sensor Node (1<sub>ο</sub> μέρος)</h3>
<div class="sect3">
@ -530,9 +602,10 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<h4 id="_υλοποίηση_του_parking_sensor">1.1.2. Υλοποίηση του Parking Sensor</h4>
<div class="paragraph">
<p>Σε κάθε θέση parking υπάρχει ένας κόμβος που αποτελείται από ένα Arduino Uno και έναν αισθητήρα
απόστασης (ultrasonic) εγκατεστημένος πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στη
μέτρηση της απόστασης από τον κόμβο μέχρι κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίζει τη θέση του parking,
καθώς και την εξαγωγή της κατάσταασης αντίστοιχης θέσης στη σειριακή θύρα του Arduino.</p>
απόστασης (ultrasonic) εγκατεστημένο πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στην
ανίχνευση ύπαρξης οχήματος στην αντίστοιχη θέση μέσω μέτρησης της απόστασης από τον αισθητήρα μέχρι
κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίσει τη θέση του parking, καθώς και την εξαγωγή της
κατάσταασης αντίστοιχης θέσης στη σειριακή θύρα του Arduino.</p>
</div>
<div class="openblock float-group">
<div class="content">
@ -562,7 +635,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<p>Κάθε κόμβος στέλνει στην σειριακή του τον κωδικό της θέσης, με τον οποίο έχει προγραμματιστεί το Arduino,
και την κατάσταση του parking, κωδικοποιημένα με τον διαχωριστή "#". Για την κατάσταση του parking ορίζουμε
με "1" ότι η θέση είναι ελεύθεση και με "0" ότι η θέση είναι δεσμευμένη. Ο έλεγχος του sensor γίνεται κάθε
500ms. Η έξοδος στη σειριακή γίνεται με την μορφή ενός string.</p>
500ms. Η έξοδος στη σειριακή γίνεται με την μορφή μίας συμβολοσειράς "string".</p>
</div>
<div class="paragraph">
<p>&lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;</p>
@ -572,8 +645,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<h4 id="_διασύνδεση_κόμβου">1.1.4. Διασύνδεση Κόμβου</h4>
<div class="paragraph">
<p>Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την
μετάδοση της πληροφορίας που αφορά την διαθεσιμότητα της θέσης του parking στο διαδίκτυο. Η πληροφορία αυτή
λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια την αποκωδικοποιεί και την αποστέλει στον WEB server μέσω του διαδικτύου.</p>
μετάδοση της πληροφορίας στο διαδίκτυο. Η πληροφορία αυτή λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια
την αποκωδικοποιεί με βάση το πρότυπο &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα&gt; και την αποστέλει σε έναν WEB server μέσω του διαδικτύου.</p>
</div>
</div>
</div>
@ -596,7 +669,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<p>1 x micro SD (Loaded with Raspbian OS)</p>
</li>
<li>
<p>1 x Ethernet Link (Connects to nearest Network)</p>
<p>1 x Ethernet Link (Connects to nearest Network) or WiFi adapter</p>
</li>
</ul>
</div>
@ -604,18 +677,36 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div class="sect3">
<h4 id="_υλοποίηση_και_προγραμματισμός">1.2.2. Υλοποίηση και Προγραμματισμός</h4>
<div class="paragraph">
<p>Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS στο Raspberry και τη δημιουργία ενός proccess
σε γλώσσα Python. Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από το αντίστοιχο Arduino Uno με
την μορφή &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;. Ύστερα αποκωδικοποιεί αυτή την πληροφορία η οποία περιγράφει τον κωδικό της θέσης
και την διαθεσιμότητα της και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Τα δεδομέμα μας σε αυτήν
την επικοινωνία παίρνουν μία μορφή JSON (JavaScript Object Notation).</p>
<p>Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS (light version) στο Raspberry και τη δημιουργία ενός proccess
σε γλώσσα Python (v3). Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από ένα Arduino Uno με
την μορφή &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;. Ύστερα αποκωδικοποιεί την πληροφορία η οποία περιγράφει τον κωδικό της θέσης
και την διαθεσιμότητα της, και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Για να αποσταλεί η πληροφορία
στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation).</p>
</div>
<div class="paragraph">
<p>Η μέθοδος του POST γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται.</p>
</div>
<div class="paragraph">
<p>Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει ένα JSON με την μορφή:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-JSON" data-lang="JSON">{
"ip": "iot-smart-parking.herokuapp.com",
"port": "443"
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Το αρχείο αυτό περιέχει ρυθμίσεις που αφορά τη σύνδεσή του με τον WEB Server την διευθυνδή του δηλαδή και την πόρτα
που ακούει.</p>
</div>
</div>
<div class="sect3">
<h4 id="_διασύνδεηση_στο_διαδίκτυο">1.2.3. Διασύνδεηση στο Διαδίκτυο</h4>
<div class="paragraph">
<p>Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει
να στείλει την πληροφορία στο διαδίκτυο.</p>
να στείλει την πληροφορία στο διαδίκτυο, δηλαδή στον WEB Server.</p>
</div>
</div>
</div>
@ -625,12 +716,12 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<h2 id="_server_node_3ο_μέρος_κεντρικός_server_όπου_κρατά_την_κατάσταση_της_κάθε_θέσης_του_parking">2. Server Node (3<sub>ο</sub> μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python 3. Αυτό το process εκτελεί ένα
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα πολλοί Gateway κόμβοι. Στην είσοδό του και στην έξοδό του
τα δεδομένα μας έχουν την μορφή JSON.</p>
<p>Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python (v3). Αυτό το process υλοποιεί ένα
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα οι Gateway κόμβοι μας με αυτόν. Στην είσοδό του και στην έξοδό του
η πληροφορία έχει την μορφή JSON.</p>
</div>
<div class="paragraph">
<p>Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία Βάση δεδομένων MySQL, η οποία διαθέτει ένα πίνακα.
<p>Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα.
Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι:</p>
</div>
<div class="ulist">
@ -646,10 +737,14 @@ REST API έτσι ώστε να μπορούν να επικοινωνούν ε
<div class="sect2">
<h3 id="_εκτέλεση_του_process_στο_cloud">2.1. Εκτέλεση του Process στο Cloud</h3>
<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>, για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο
παραπάνω.</p>
</div>
<div class="paragraph">
<p>Στην δωρεάν έκδοσή του δεν έχουμε περιορισμούς στο τμήμα του HTTP service που εκτελούμε, ενώ στη βάση δεδομένων
υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα).</p>
</div>
<div class="openblock float-group">
<div class="content">
<div class="imageblock center">
@ -822,7 +917,7 @@ SLOW SUCCESS BUILDS CHARACTER, FAST SUCCESS BUILDS EGO.
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-01-20 14:20:43 +0200
Last updated 2020-01-21 09:12:33 +0200
</div>
</div>
</body>

Loading…
Cancel
Save