ΕΝΟΤΗΤΑ 14 Πρωτόκολλα Επικοινωνίας

Σχετικά έγγραφα
Εφαρμογές Σειριακής Επικοινωνίας

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

Σχεδίαση Συστημάτων με τον Arduino Μάθημα 3. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων. Η Έννοια του Global Positioning System

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

Προγραμματισμο ς σε Arduino

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ

Σχεδίαση Συστημάτων με τον Arduino Μάθημα 3. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων. Η Έννοια του Global Positioning System

Το κύκλωμα σε breadboard

ΔΡΑΣΤΗΡΙΟΤΗΤΑ ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO- 01a

Κάντε περισσότερα. Δρομολογητής Smart WiFi Nighthawk X10 AD7200. Μοντέλο R9000

Ενσωματωμένα Συστήματα

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

Φύλλο εργασίας 4 - Αυτόματο φωτάκι νυκτός

ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ARDUINO

Arduino Teachers Workshop

Κάντε περισσότερα Δρομολογητής μόντεμ VDSL/ADSL AC1600 WiFi. Μοντέλο D6400

Internet 1. Ρυθµίσεις ικτύου Η MID διαθέτει ενσωµατωµένο Wi-Fi module. Κάντε κλικ στο, στο µενού ρυθµίσεων θα εµφανιστεί στο MID.

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14

Φύλλο εργασίας 9 - Αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 8. Μετρώντας Επιτάχυνση με το Accelerόμετρο (ADXL 335) Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO. Υποψήφιος Διδάκτωρ

Επικοινωνήστε με την Τράπεζα Πειραιώς

Οδηγός γρήγορης εγκατάστασης. Ασύρματη κάμερα. IP MJPEGγια εξωτερικούς χώρους V3.14

Φύλλο εργασίας 6 - Θερμόμετρο εξωτερικού χώρου. Το κύκλωμα σε breadboard

Απλή Δομή Επιλογής. Ο κώδικας. //με χρήση μεταβλητών. delay (3000);

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD για εξωτερικούς χώρους v3.14

Γνωριμία με το Arduino

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 1. Προγραμματισμός Φυσικών Συστημάτων. Νέα Ψηφιακά Αντικείμενα

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά

Εγκατάσταση. Επέκταση εμβέλειας WiFi N300. Μοντέλο EX2700

Υποστήριξη. Σας ευχαριστούμε που επιλέξατε τα προϊόντα NETGEAR.

Συσκευές Τηλεπικοινωνιών και Δικτύωσης. Επικοινωνίες Δεδομένων Μάθημα 9 ο

Ασύρµατος BroadBand Router της Sweex + switch 4 θυρών + print server

Φύλλο εργασίας 3 - Χριστουγεννιάτικα φωτάκια (σταδιακή αύξηση και μείωση φωτεινότητας ενός LED) Το κύκλωμα σε breadboard

Κορυφαίες λειτουργίες

Γρήγορη έναρξη. Επέκταση εμβέλειας WiFi N300 Μοντέλο EX2700

Μάθημα 2 Δραστηριότητα 2: Δημιουργώντας το Μετεωρολογικό Σταθμό. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού.

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ DVR KTEC

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R209-Z

Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation)

Ασύρµατος BroadBand Router της Sweex + switch 4 θυρών

ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ

Οδηγίες ρύθμισης για σύνδεση των μετατροπέων Fronius στο online portal Fronius Solar.web (με χρήση smartphone/tablet)

Εγκατάσταση. Επέκταση εμβέλειας WiFi N600. Μοντέλο WN3500RP

Δρομολογητής WiFi N150 (N150R)

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης

Κάντε περισσότερα Δρομολογητής μόντεμ VDSL2/ADSL WiFi Nighthawk X4S AC2600. Μοντέλο D7800

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Smart Access Διαδικασία λειτουργίας

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R216-Z

TP-LINK WA850 ΟΔΗΓΙΕΣ ΣΥΝΔΕΣΗΣ

ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ

Περιεχόμενα συσκευασίας

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R207

ρομολογητής WiFi N300 (N300R)

Υποστήριξη. Περιεχόμενα συσκευασίας. Δρομολογητής μόντεμ Wi-Fi DSL D6200 Οδηγός εγκατάστασης

4 Εισαγωγή στο Arduino

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ JustAlert SPOTIT. Οδηγίες για την εγκατάσταση της εφαρμογής στο κινητό σας

Οδηγός εγκατάστασης της επέκτασης εμβέλειας WiFi WN2000RPT

Γρήγορη έναρξη. Επέκταση εμβέλειας WiFi N300. Μοντέλο WN3100RPv2

Συνδέστε την οικιακή συσκευή σας - με το μέλλον.

Οδηγός Γρήγορης Εκκίνησης YOOSEE & YYP2P

Κάντε περισσότερα. Επέκταση εμβέλειας WiFi AC1200. Μοντέλο EX6200

Συνδέστε την οικιακή συσκευή σας - με το μέλλον. Οδηγός γρήγορης εκκίνησης

Interfox.gr. Κωδικοποίηση Κάμερας

Εγκατάσταση. Σημείο ασύρματης πρόσβασης NETGEAR ac WAC120. Περιεχόμενα συσκευασίας. NETGEAR, Inc. 350 East Plumeria Drive San Jose, CA USA

Οδηγίες Προγραμματισμού- Λειτουργίας για το Ολοκληρωμένο WiFi Σύστημα Συναγερμού YL- WS1N

Οδηγίες Προγραμματισμού- Λειτουργίας για το Ολοκληρωμένο WiFi Σύστημα Συναγερμού YL- WP1 Προετοιμασία- Εκκίνηση συσκευής

Εγχειρίδιο Χρήσης V3.0

Κάντε περισσότερα. Nighthawk X6 Δρομολογητής WiFi AC3200 Tri-Band Μοντέλο R8000

ALTEAS X ARISTON NET

BEYOND: Two Souls Εφαρμογή BEYOND Touch

Συνδέστε την οικιακή συσκευή σας - με το μέλλον.

Τα ηλεκτρονικά μέρη του ρομπότ Επιλογή των μονάδων εισόδου εξόδου ανάλογα το μοντέλο που θέλουμε να κατασκευάσουμε

Δρομολογητής Smart WiFi AC1600

Ενσωματωμένα Συστήματα

Ενσωματωμένα Συστήματα

Περιεχόμενα συσκευασίας

Διαδικασία σύνδεσης στην εφαρμογή TAVL

Οδηγός Σύνδεσης (για KeyMission 80)

Οδηγίες Χρήσης Ασύρματης Φορητής WiFi Κάμερας

FOSSCOMM ο Συνέδριο Κοινοτήτων Ανοιχτού Λογισμικού Σάββατο 20 Απριλίου Ομάδα Σχολής Ικάρων Εργαστήριο Arduino

Γρήγορη έναρξη. Επέκταση εμβέλειας WiFi AC750. Μοντέλο EX3700

Μ.Π.Σ. «ΠΡΟΗΓΜΕΝΕΣ ΜΕΘΟΔΟΙ ΚΑΤΑΣΚΕΥΗΣ ΠΡΟΙΟΝΤΩΝ ΑΠΟ ΞΥΛΟ» Μάθημα: Σχεδίαση και Εφαρμογές Διαδραστικών Συστημάτων. Διδάσκοντας: Α.

Δρομολογητής Wifi Smart R6300v2 Οδηγός εγκατάστασης

Οδηγός εγκατάστασης της επέκτασης εμβέλειας Wi-Fi N300RE

2017 Κατασκευάζω και Προγραμματίζω με τον μικροελεγκτή Arduino

Μαθαίνοντας το hardware του αναπτυξιακού

USB_6008_terminal_31. PCI_6023E_terminal_68. PCI_6023E_terminal_67

Περιεχόμενα. - Τι είναι;...σελ 1. - Πώς χρησιμοποιείται;...σελ 1. - Συσκευές momit Bevel...σελ 1. - Εγκατάσταση...σελ 2

Εγκατάσταση. Επέκταση εμβέλειας WiFi N300. Μοντέλο WN3000RPv3

ΕΡΓΑΣΤΗΡΙΟ 6 ΟΔΗΓΗΣΗ ΑΠΕΙΚΟΝΙΣΕΩΝ SSD ΚΑΙ LCD

ΔΙΔΑΚΤΙΚΟ ΣΕΝΑΡΙΟ ΔΗΜΙΟΥΡΓΙΑ ΣΥΣΤΗΜΑΤΟΣ ΔΙΕΞΑΓΩΓΗΣ ΠΑΙΧΝΙΔΙΟΥ ΕΡΩΤΗΣΕΩΝ/ΑΠΑΝΤΗΣΕΩΝ ΜΕ ΧΡΗΣΗ ARDUINO - QUIZ GAME ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 3

ΡΥΘΜΙΣΕΙΣ ΓΙΑ ΔΥΝΑΜΙΚΟ IP

Ενημέρωση σε Windows 8.1 από τα Windows 8

Transcript:

ΕΝΟΤΗΤΑ 14 Πρωτόκολλα Επικοινωνίας

Στόχος και Περίγραμμα της Ενότητας 14 Στόχος της Παρουσίασης Εξοικείωση των φοιτητών με τα πιο δημοφιλή πρωτόκολλα για τη δημιουργία εφαρμογών «διαδικτύου των αντικειμένων» (IoT), όπως Bluetooth, Ethernet και WiFi. Διασύνδεση του Arduino με μία εφαρμογή κινητής πλατφόρμας (mobile application) μέσω Bluetooth. Διασύνδεση του Arduino με μία web εφαρμογή μέσω Ethernet. Διασύνδεση του Arduino με μία web εφαρμογή μέσω WiFi. Ασκήσεις για εξάσκηση. Σύνοψη 2 2

Εισαγωγή Στόχος αυτής της ενότητας είναι η εξοικείωση των φοιτητών με τα δημοφιλέστερα πρωτόκολλα για την ανάπτυξη εφαρμογών «διαδικτύου των αντικειμένων», όπως Bluetooth, Ethernet και WiFi. Θα εξασκηθούμε πάνω σε αυτά τα πρωτόκολλα μέσα από ένα απλό σενάριο αμφίδρομης επικοινωνίας το οποίο θα περιλαμβάνει μία αναπτυξιακή πλακέτα Arduino, και μία εφαρμογή κινητής (για Bluetooth) ή web εφαρμογή (για Ethernet / WiFi) για την ανταλλαγή δεδομένων από αισθητήρια και τον απομακρυσμένο έλεγχο ενός LED. Λαμβάνοντας υπόψιν το αντικείμενο του OpenIn, η έμφαση σε αυτή την ενότητα θα δωθεί στον προγραμματισμό του Arduino. Ως εκ τούτου, θα παρουσιάσουμε τις web και mobile εφαρμογές χωρίς να εστιάσουμε στην ανάπτυξή τους. 3 3

BLUETOOTH

Bluetooth Το Bluetooth είναι ένα δημοφιλές και εύχρηστο πρωτόκολλο επικοινωνίας, ενώ το περιλαμβάνουν τα περισσότερα smartphone και tablet. Ταυτόχρονα, το Bluetooth είναι επίσης ιδιαίτερα «βολικό» πρωτόκολλο για εφαρμογές βασισμένες σε Arduino, μιας και τα εμπορικά διαθέσιμα modules είναι προσιτά και εύκολα να συνεργαστούν με το Arduino, μέσω σειριακών πρωτοκόλλων (π.χ. UART). Σε αυτό το σενάριο, θα χρησιμοποιήσουμε το ευρέως διαδεδομένο Bluetooth module HC-05 μαζί με μία εφαρμογή σειριακό τερματικού για το λειτουργικό σύστημα Android (διαθέσιμη στο Google Play) για να ανταλλάξουμε δεδομένα ανάμεσα σε ένα Arduino και ένα κινητό τηλέφωνο, ή tablet. 5 5

Άσκηση Bluetooth: Σχηματικό Διάγραμμα Το HC-05 είναι ένα module βασισμένο στο Bluetooth Classic διαθέσιμο από διάφορους κατασκευαστές. Η φωτοευαίσθητη αντίσταση (LDR) μαζί με την R3, σχηματίζουν ένα διαιρέτη τάσης, από τον οποίο θα διαβάζουμε αναλογικές τιμές τάσης. 6 6

Άσκηση Bluetooth: Ράστερ Το ίδιο κύκλωμα παρουσιάζεται στο ράστερ, για ευκολότερη υλοποίηση. 7 7

Άσκηση Bluetooth: Κώδικας (1) #include <SoftwareSerial.h> // Εκκίνηση μίας software θύρας UART στους ακροδέκτες GPIO 10, 11. // Μιας και το hardware UART (GPIO ακροδέκτες 0, 1) θα χρησιμοποιείται από τη θύρα USB για προγραμματισμό // και αποσφαλμάτωση, θα χρειαστούμε μία επιπλέον θύρα. SoftwareSerial bluetooth(10, 11); // 10 = RX, 11 = TX byte bt_input ; double ldr_input; unsigned long prev_time = 0; unsigned long curr_time = 0; void setup() { pinmode(13, OUTPUT); // Ορίζουμε τον ακροδέκτη GPIO 13 (το LED) ως έξοδο. // Εκκινούμε την Bluetooth επικοινωνία με ταχύτητα 9600 bps στη software θύρα UART. bluetooth.begin(9600); // Εκκινούμε την hardware σειριακή επικοινωνία με ταχύτητα 9600 bps. Serial.begin(9600); // Πυροδοτούμε μία μικρή αναμονή ώστε να τακτοποιηθεί κάθε διεργασία. delay(500); 8 8

Άσκηση Bluetooth: Κώδικας (2) void loop() { // Έλεγχος για εισερχόμενα δεδομένα. if (bluetooth.available()) { // Διάβασμα εισερχόμενων δεδομένων. bt_input = bluetooth.read(); // Εάν ο εισερχόμενος χαρακτήρας είναι 1, θέτουμε το GPIO 13 (LED) HIGH. if ((char)bt_input == '1') { digitalwrite(13, HIGH); // Εάν ο εισερχόμενος χαρακτήρας είναι 0, θέτουμε το GPIO 13 (LED) LOW. if ((char)bt_input == '0') { digitalwrite(13, LOW); // Εκτυπώνουμε το χαρακτήρα που διαβάστηκε στη hardware σειριακή θύρα για λόγους //αποσφαλμάτωσης Serial.println(bt_input); 9 9

Άσκηση Bluetooth: Η Εφαρμογή Υπάρχουν διάφορες εφαρμογές για την επικοινωνία μέσω μίας ζεύξης Bluetooth. Είναι διαθέσιμες για τις περισσότερες πλατφόρμες, συμπεριλαμβανομένων των Android και ios. Μιας και θα ανταλλάσσουμε σειριακά δεδομένων και θέλουμε λίγο παραπάνω έλεγχο στη διαδικασία, επιλέξαμε την εφαρμογή Serial Bluetooth Terminal για το λειτουργικό σύστημα Android από τον Kai Morich (διαθέσιμη στο Google Play). Όπως δηλώνει και το όνομά της, είναι μία εφαρμογή τερματικού για σειριακές συσκευές. 10 10

Άσκηση Bluetooth: Η Εφαρμογή Η εφαρμογή θα μας καλωσορίσει με μία άδεια οθόνη κατά την εκκίνησή της. Θα χρειαστεί να συνδέσουμε μία συσκευή Bluetooth πριν να μπορέσουμε να ανταλλάξουμε σειριακά δεδομένα. Πατήστε στο εικονίδιο δίπλα στο κείμενο Label, ώστε να ανοίξει το μενού της εφαρμογής. 11 11

Άσκηση Bluetooth: Η Εφαρμογή Μόλις το μενού ανοίξει, επιλέξτε το Devices. 12 12

Άσκηση Bluetooth: Η Εφαρμογή (1) Διαλέξτε ανάμεσα σε Bluetooth Classic ή BLE (αναλόγως το module που χρησιμοποιείτε) και έπειτα (2) πατήστε πάνω στο όνομά του. Τέλος, (3) πατήστε ξανά το εικονίδιο του μενού και επιλέξτε Terminal ώστε να μεταβείτε ξανά στην κύρια οθόνη του προγράμματος. 13 13

Άσκηση Bluetooth: Η Εφαρμογή Το τελευταίο βήμα είναι να πατήσετε πάνω Στο εικονίδιο Connect. Αυτό θα εγκαθιδρύσει την επικοινωνία ανάμεσα στη συσκευή σας και το Bluetooth module που επιλέξατε. Αυτό ήταν! Τώρα η εφαρμογή είναι έτοιμη να ανταλλάξει δεδομένα με το Bluetooth module. 14 14

Άσκηση Bluetooth: Κατακλείδα Εφόσον μεταγλωττίσατε και ανεβάσατε τον παρεχόμενο κώδικα στο Arduino σας, θα πρέπει να βλέπετε τα εισερχόμενα δεδομένα στην οθόνη της εφαρμογής. ΠΛΗΚΤΡΟ ΑΠΟΣΤΟΛΗΣ Πέραν τούτου, θα πρέπει να είστε σε θέση να αλλάξετε την κατάσταση του συνδεδεμένου LED, στέλνοντας απλά ένα αλφαριθμητικό ενός χαρακτήρα 1 ή 0. 15 15

ETHERNET

ETHERNET - Εισαγωγή Το Ethernet είναι ένα ακόμα δημοφιλές και εύχρηστο πρωτόκολλα επικοινωνίας που μας επιτρέπει την μέσω καλωδίου επικοινωνία με τον κόσμο του internet. Χρησιμοποιώντας το Ethernet, μία εφαρμογή Arduino μπορεί να επικοινωνήσει με οποιαδήποτε TCP/IP εφαρμογή, συμπεριλαμβανομένων και RIAs. Η ευρέως διαθέσιμη πλακέτα Ethernet (Ethernet Shield) είναι μία προσιτή, αξιόπιστη και εύκολα προγραμματιζόμενη λύση για να εμπλουτίσουμε μία εφαρμογή Arduino με δυνατότητες Ethernet. Θα χρησιμοποιήσουμε το Ethernet Shield έτσι ώστε να επιτύχουμε αμφίδρομη επικοινωνία με την ειδική web εφαρμογή που έχουμε κατασκευάσει γι αυτό το σκοπό. 17 17

Άσκηση ETHERNET: Περιγραφή Σε αυτή την άσκηση θα συνδυάσουμε ένα Arduino με ένα Ethernet Shield. Το Arduino, με το πάτημα ενός πλήκτρου, θα διαβάζει αναλογικές τιμές τάσης από μία φωτοευαίσθητη αντίσταση οι οποίες θα αντιστοιχούν στη φωτεινότητα του χώρου. Τα δεδομένα θα αποστέλλονται μέσω SPI στο Ethernet Shield, το οποίο με τη σειρά του, θα τα στέλνει σε έναν HTTP server που φιλοξενεί μία ιστοσελίδα ειδικά διαμορφωμένη γι αυτό το σκοπό. Ο χρήστης θα έχει την επιλογή να ελέγξει ένα LED συνδεδεμένο στο Arduino, πατώντας στο αντίστοιχο link στην ιστοσελίδα. 18 18

Άσκηση ETHERNET: Σχηματικό Διάγραμμα Η φωτοευαίσθητη αντίσταση (LDR) μαζί με την R2, σχηματίζουν ένα διαιρέτη τάσης, από τον οποίο θα διαβάζουμε αναλογικές τιμές τάσης. Το πλήκτρο (S1) θα πυροδοτεί μία διακοπή (interrupt) στον ακροδέκτη GPIO 2 κάθε φορά που αυτό πατιέται. 19 19

Άσκηση ETHERNET: Ράστερ Το ίδιο κύκλωμα στο ράστερ για ευκολότερη υλοποίηση. 20 20

Άσκηση ETHERNET: Κώδικας (1) // Το Ethernet Shield χρησιμοποιεί SPI για να // επικοινωνήσει με το Arduino. #include <SPI.h> #include <String.h> #include <Ethernet.h> // Το buffer θα αποθηκεύει την απάντηση του // server. char buffer; // Μεταβλητή τύπου «flag». bool button; // Οι ακροδέκτες για το κουμπί και το LED. const byte GPIO_led = 8; const byte GPIO_btn = 2; // Διάστημα ανάμεσα στα αιτήματα. unsigned long request_timer; // Χρονικός περιορισμός αιτημάτων. unsigned long timeout_timer; // Η MAC Address του Ethernet Shield. Συνήθως τη βρίσκουμε σε // αυτοκόλλητο από κάτω. Εάν δεν υπάρχει, βάλτε μία δική σας. byte mac[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ; // Το όνομα χώρου ή ο server που θα συνδεθούμε, και η θύρα. const char host[] = "spyrosrallis.com"; const byte port = 80; // Μοναδικός αριθμός συσκευής. Για τους σκοπούς της άσκησης, ένας // αριθμός 0-255 είναι επαρκής. const byte device = 1; // Η IP διεύθυνση που θα ζητήσουμε απ το router. Εάν έχουμε // ενεργό DHCP, πιθανώς να μην χρειάζεται. IPAddress ip ( xxx, xxx, xxx, xxx ); // Δημιουργία του αντικειμένου EthernetClient. Απαιτείται για τη // σύνδεση με το δίκτυο. EthernetClient client; 21 21

Άσκηση ETHERNET: Κώδικας (2) void setup() { // Ορίζουμε τον ακροδέκτη GPIO_btn σαν είσοδο και αναθέτουμε ένα interrupt // να τρέχει στη μετάβαση από LOW σε HIGH (rising edge). pinmode(gpio_btn, INPUT); attachinterrupt(digitalpintointerrupt(2), button_click, RISING); // Ορίζουμε τον ακροδέκτη GPIO_led σαν έξοδο. pinmode(gpio_led, OUTPUT); // Εκκινούμε τη σειριακή πόρτα με ταχύτητα 115200 bps. Serial.begin(115200); // Συνδεόμαστε στο δίκτυο. Ethernet.begin(mac, ip); Serial.print("Your IP Address is: "); // Εμφανίζουμε την τοπική IP. Αν ήμαστε πίσω από ΝΑΤ router, θα δούμε την NAT IP, όχι την εξωτερική. Serial.print(Ethernet.localIP()); Serial.print("\r\n"); 22 22

Άσκηση ETHERNET: Κώδικας (3) void loop() { else { // Σταματάμε τυχόν προηγούμενη ενεργή σύνδεση. client.stop(); Serial.println("Client not connected."); return; // Συνδεόμαστε στο server. client.connect(host, port); // Εφόσον συνδεθούμε επιτυχώς, στέλνουμε το αίτημα. if ( client.connected() ) { // Για όσο ο server δεν απαντάει while (!client.available()) { if ( millis() > timeout_timer + 5000 ) client.print((string)"get / { arduino/getdata.php?deviceid=" + String(device) + " HTTP/1.0\r\n" + "User-Agent: Arduino\r\n" + Host: " + host + "\r\n" // Πέρας της επιτρεπτής ώρας που // περιμένουμε για το αίτημα να // ολοκληρωθεί. return; + "Connection: close\r\n\r\n"); // Αποθηκεύουμε το χρόνο του αιτήματος. timeout_timer = millis(); // περιμένουμε. delay(10); 23 23

Άσκηση ETHERNET: Κώδικας (4) // Εάν ο server απάντησε, διαβάζουμε την απάντηση if ( button ) { // χαρακτήρα-προς-χαρακτήρας. Στη μεταβλητή buffer, // Σταματάμε τυχόν προηγούμενη ενεργή σύνδεση. // αποθηκεύεται μόνο ο τελευταίος χαρακτήρας. client.stop(); while ( client.available() ) { // Συνδεόμαστε στον server. buffer = client.read(); client.connect(host, port); // Εφόσον συνδεθούμε επιτυχώς, στέλνουμε το αίτημα. // Εάν ο χαρακτήρας στο buffer είναι 1, ανάβουμε το LED. if ( client.connected() ) { // Αλλιώς, το σβήνουμε. client.print((string)"get if (buffer == '1 ) { /arduino/setdata.php?deviceid=" + digitalwrite(gpio_led, HIGH); String(device) + "&data=" + String(analogRead(A0)) + " HTTP/1.0\r\n" else { + "User-Agent: Arduino\r\n" digitalwrite(gpio_led, LOW); + Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); 24

Άσκηση ETHERNET: Κώδικας (5) else { void button_click(void) Serial.println("Client not connected."); return; { // Εάν έχουν περάσει περισσότερα από 0.5s από // το προηγούμενο αίτημα, ορίζουμε το flag σε // true και αποθηκεύουμε τον τρέχοντα χρόνο button = false; // if ( button ) Ethernet.maintain(); delay(500); // του αιτήματος. if (millis() > request_timer + 500) { request_timer = millis(); // loop() button = true; 25

Άσκηση Ethernet: Κατακλείδα Με την ολοκλήρωση της άσκησης, θα πρέπει να βλέπετε τις τιμές από το LDR να εμφανίζονται στην ιστοσελίδα κάθε φορά που θα πατάτε το κουμπί. Σημειώστε πως, καθώς η ιστοσελίδα δεν ανανεώνεται δυναμικά, θα πρέπει να την ανανεώνετε χειροκίνητα. Επιπλέον, θα πρέπει να μπορείτε να αλλάξετε την κατάσταση του LED κάνοντας κλικ στα links ON / OFF στη σελίδα, που εμφανίζονται δίπλα στη μονάδα Arduino σας. 26

WiFi

WiFi - Εισαγωγή Το WiFi είναι το δημοφιλέστερο πρωτόκολλο ασύρματης επικοινωνίας μιας και επιτρέπει πρόσβαση στον κόσμο του internet, είναι δωρεάν και διαθέσιμο σχεδόν σε κάθε δημόσιο ή ιδιωτικό χώρο. Παρ όλα αυτά, δεν είναι ιδιαίτερα αποδοτικό ενεργειακά για εφαρμογές διαδικτύου των αντικειμένων (IoT) που βασίζονται σε μπαταρίες. Για τη διασύνδεση του Arduino με κάποιο δίκτυο WiFi δεν υπάρχει κάποια στάνταρ επιλογή, με δεδομένο ότι το διαθέσιμο WiFi Shield είναι κάπως ακριβό για να γίνει δημοφιλές. Η πιο δημοφιλής εναλλακτική επιλογή, βασίζεται στον ελεγκτή ESP8266 ο οποίος είναι προσιτός και αξιόπιστος. Αλλά ο ESP8266 είναι μικροελεγκτής από μόνος του, και όχι κάποιο περιφερειακό. Χρησιμοποιώντας τον σαν περιφερειακό του Arduino, είναι εφικτό, αλλά αρκετά περίπλοκο. 28 28

WiFi - Εισαγωγή Διάφορες αναπτυξιακές πλατφόρμες έχουν αναπτυχθεί βασισμένες στο ESP8266. Οι περισσότερες από αυτές, είναι «φιλικές» προς το Arduino, πράγμα το οποίο τις κάνει εύκολα προγραμματιζόμενες από το Arduino IDE, εφόσον φυσικά, εγκατασταθούν οι απαραίτητες επεκτάσεις και βιβλιοθήκες. Θα χρησιμοποιήσουμε μία αναπτυξιακή πλατφόρμα που ονομάζεται ESP32 (η οποία είναι η νεότερη και περισσότερα υποσχόμενη έκδοση του ESP8266). Χάρη σε αυτήν, θα επιτύχουμε αμφίδρομη επικοινωνία με τη web εφαρμογή που χρησιμοποιήσαμε και για το κομμάτι του Ethernet. 29 29

Άσκηση WiFi: Περιγραφή Αυτή η άσκηση, αν και δε χρησιμοποιεί κάποιο Arduino, είναι παρόμοια με την προηγούμενη (11(b)). Θα χρησιμοποιήσουμε το ESP32-DEVKIT, μία αναπτυξιακή πλακέτα με δυνατότητες WiFi, από την doit.am. Η άσκηση ακολουθεί το ίδιο σενάριο: με το πάτημα ενός κουμπιού, θα μετράμε τη φωτεινότητα του χώρου με τη βοήθεια μίας φωτοευαίσθητης αντίστασης. Τα δεδομένα θα αποστέλλονται μέσω WiFi σε έναν HTTP server ο οποίος θα φιλοξενεί μία ειδικά διαμορφωμένη γι αυτό το σκοπό ιστοσελίδα. Ο χρήστης θα έχει τη δυνατότητα να ελέγξει ένα LED συνδεδεμένο στο ESP32-DEVKIT από την ιστοσελίδα, πατώντας στο κατάλληλο link. 30 30

Άσκηση WiFi : Σχηματικό Διάγραμμα Η φωτοευαίσθητη αντίσταση (LDR - R1) μαζί με την R2 σχηματίζουν έναν διαιρέτη τάσης από τον οποίο θα μετράμε αναλογική τάση. Το πλήκτρο (S1) θα πυροδοτεί ένα interrupt στο GPIO ακροδέκτη 25 όταν πατιέται. 31 31

Άσκηση WiFi : Ράστερ Το ίδιο κύκλωμα παρουσιάζεται στο ράστερ για ευκολότερη υλοποίηση. Σημειώστε πως, μιας και το ESP32-DEVKIT χρησιμοποιεί αρσενικές ακίδες, θα χρειαστούμε μερικά καλώδιααντάπτορες θηλυκό-σε-αρσενικό, έτσι ώστε να το συνδέσουμε στο ράστερ. 32 32

Άσκηση WiFi : Κώδικας (1) #include <WiFi.h> // Το buffer θα αποθηκεύει την απάντηση του // server. char buffer; // Μεταβλητή τύπου «flag». bool button; // Οι ακροδέκτες για το κουμπί και το LED. const byte GPIO_led = 2; const byte GPIO_btn = 25; // Διάστημα ανάμεσα στα αιτήματα. unsigned long request_timer; // Χρονικός περιορισμός αιτημάτων. unsigned long timeout_timer; // Το όνομα του δικτύου (SSID) και ο κωδικός. const char ssid[] = "ssid"; const char pass[] = "pass"; // Το όνομα χώρου ή ο server που θα συνδεθούμε // και η θύρα. const char host[] = "spyrosrallis.com"; const byte port = 80; // Μοναδικός αριθμός συσκευής. Για τους σκοπούς της // άσκησης, ένας αριθμός 0-255 είναι επαρκής. const byte device = 1; // Δημιουργία του αντικειμένου WiFiClient. Απαιτείται // για τη σύνδεση με το δίκτυο. WiFiClient client; 33 33

Άσκηση WiFi : Κώδικας (2) void setup() // Προσπαθούμε να συνδεθούμε στο δίκτυο. { WiFi.begin(ssid, pass); // Ορίζουμε τον ακροδέκτη GPIO_btn σαν είσοδο και αναθέτουμε // Όσο δεν έχουμε συνδεθεί, περιμένουμε. // ένα interrupt να τρέχει στη μετάβαση από LOW σε HIGH // Ελέγχουμε κάθε 0.5s. // (rising edge). while ( WiFi.status()!= WL_CONNECTED ) pinmode(gpio_btn, INPUT); { attachinterrupt(digitalpintointerrupt(gpio_btn), button_click, delay(500); RISING); Serial.print("."); // Ορίζουμε τον ακροδέκτη GPIO_led σαν έξοδο. pinmode(gpio_led, OUTPUT); // Μόλις συνδεθούμε, εμφανίζουμε ένα μήνυμα. // Εκκινούμε τη σειριακή πόρτα με ταχύτητα 115200 bps. Serial.print("\r\n"); Serial.begin(115200); Serial.print("Connected succesfully! Your IP // Εμφανίζουμε διαγνωστικές πληροφορίες. Address is: "); Serial.print("Connecting to "); // Εμφανίζουμε την τοπική IP. Αν ήμαστε πίσω Serial.print(ssid); // από ΝΑΤ router, θα δούμε την NAT IP, όχι την Serial.print("."); // εξωτερική. Serial.print(WiFi.localIP()); Serial.print("\r\n"); 34 34

Άσκηση WiFi : Κώδικας (3) void loop() { // Σταματάμε τυχόν προηγούμενη ενεργή // σύνδεση. client.stop(); // Συνδεόμαστε στο server. client.connect(host, port); // Εφόσον συνδεθούμε επιτυχώς, στέλνουμε // το αίτημα. if ( client.connected() ) { client.print(string("get ") + "/arduino/getdata.php?deviceid=" + String(device) + " HTTP/1.0\r\n" + "User-Agent: ESP32\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); // Αποθηκεύουμε το χρόνο // του αιτήματος. timeout_timer = millis(); // Για όσο ο server δεν απαντάει while (!client.available()) { if (millis() > timeout_timer + 5000) { // Πέρας της επιτρεπτής ώρας που // περιμένουμε για το αίτημα να // ολοκληρωθεί. return; // περιμένουμε. delay(10); // Εάν ο server απάντησε, διαβάζουμε την απάντηση // χαρακτήρα-προς-χαρακτήρας. Στη μεταβλητή buffer, // αποθηκεύεται μόνο ο τελευταίος χαρακτήρας. while ( client.available() ) { buffer = client.read(); 35 35

Άσκηση WiFi : Κώδικας (4) // Εάν ο χαρακτήρας στο buffer είναι 1, // ανάβουμε το LED. // Αλλιώς, το σβήνουμε. if (buffer == 1 ) { digitalwrite(gpio_led, HIGH); else { digitalwrite(gpio_led, LOW); else { Serial.println("Connection failed."); return; // if ( client.connected() if ( button ) { // Σταματάμε τυχόν προηγούμενη ενεργή // σύνδεση. client.stop(); // Συνδεόμαστε στο server. client.connect(host, port); // Εφόσον συνδεθούμε επιτυχώς, στέλνουμε // το αίτημα. if ( client.connected() ) { client.print(string("get ") + "/arduino/setdata.php?deviceid=" + String(device) + "&data=" + analogread(35) + " HTTP/1.0\r\n" + "User-Agent: ESP32\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); 36 36

Άσκηση WiFi : Κώδικας (5) else { Serial.println("Connection failed."); return; button = false; // if ( button ) delay(500); // loop() void button_click(void) { // Εάν έχουν περάσει περισσότερα από 0.5s από το προηγούμενο αίτημα, ορίζουμε το flag σε true και // αποθηκεύουμε τον τρέχοντα χρόνο του αιτήματος. if (millis() > request_timer + 500) { request_timer = millis(); button = true; 37 37

Άσκηση WiFi : Κατακλείδα Με την ολοκλήρωση της άσκησης, θα πρέπει να βλέπετε τις τιμές από το LDR να εμφανίζονται στην ιστοσελίδα κάθε φορά που θα πατάτε το κουμπί. Σημειώστε πως, καθώς η ιστοσελίδα δεν ανανεώνεται δυναμικά, θα πρέπει να την ανανεώνετε χειροκίνητα. Επιπλέον, θα πρέπει να μπορείτε να αλλάξετε την κατάσταση του LED κάνοντας κλικ στα links ON / OFF στη σελίδα, που εμφανίζονται δίπλα στη μονάδα Arduino σας. 38 38

ΕΝΟΤΗΤΑ 14 Πρωτόκολλα Επικοινωνίας Σας ευχαριστώ!