Page 49 - Linux_7

Basic HTML Version

Linux Inside
49
if (c == ‘\n’) {
// you’re starting a new line
currentLineIsBlank = true;
}
else if (c != ‘\r’) {
// you’ve gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
Δεν θα αναλωθούμε πολύ στην ανάλυση του κώδικα, δεδο-
μένου ότι έχει αρκετά σχόλια και είναι εύκολα κατανοητός, ει-
δικά εφόσον έχετε παρακολουθήσει και τα προηγούμενα άρ-
θρα για το Arduino, θα τονίσω, όμως, τα πιο σημαντικά στοι-
χεία που δεν έχουμε ξαναδεί. Ένα βασικό στοιχείο είναι οι πί-
νακες ip και mac. Στον πρώτο ορίζουμε την IP που θα χρησι-
μοποιεί το Arduino μας και στο δεύτερο τη mac address του.
Τη δεύτερη μπορούμε να την αφήσουμε ως έχει, αφού στις
περισσότερες περιπτώσεις δεν σας ενδιαφέρει καν τι ακρι-
βώς είναι. Η διεύθυνση IP είναι πολύ σημαντική, αφού είναι η
διεύθυνση την οποία θα έχει το Arduino στο τοπικό μας δί-
κτυο. Στις περισσότερες περιπτώσεις θα δουλέψει χωρίς
προβλήματα, αλλά θα πρέπει να ξέρετε ότι απαιτείται να χρη-
σιμοποιήσετε μια διεύθυνση IP συμβατή με το τοπικό σας δί-
κτυο. Εάν στη συνέχεια δεν μπορείτε να συνδεθείτε στο
Arduino, αυτός θα είναι ο πιο πιθανός λόγος. Κατόπιν δημι-
ουργείται ο Web server, ο οποίος τρέχει στη θύρα 80, που εί-
ναι η θύρα στην οποία πρέπει να τρέχουν οι Web servers. Συ-
νεχίζοντας, η συνάρτηση setup() δεν έχει τίποτα το ιδιαίτερο,
οπότε συνεχίζουμε με τη συνάρτηση loop().
Παρατηρήστε ότι έχουμε τη μεταβλητή client, η οποία έχει
διαρκώς ως όρισμα το αποτέλεσμα της server.available(). Το
αποτέλεσμά της είναι false ώσπου να συνδεθεί κάποιος χρή-
στης στον Web server μας. Στη συνέχεια, όσο η σύνδεση είναι
ανοιχτή, λαμβάνουμε συνεχώς δεδομένα από τον client και
κάνουμε τον απαραίτητο έλεγχο. Συγκεκριμένα, διαβάζουμε
τα δεδομένα από τον client μέχρις ότου λάβουμε κενή γραμ-
μή, ώστε να ξέρουμε ότι φτάσαμε στο τέλος της αίτησης του
client. Επιστρέφουμε μία απάντηση HTTP, λέγοντας στον
client ότι πήραμε σωστά την αίτησή του, οπότε, ουσιαστικά,
υλοποιούμε ένα πολύ μικρό υποσύνολο του HTTP πρωτοκόλ-
λου. Στη συνέχεια, στέλνουμε κώδικα HTML στον client (το
<br /> για παράδειγμα σημαίνει νέα γραμμή), στέλνοντας
ουσιαστικά τις τιμές όλων των αναλογικών εισόδων μας. Ο
Web browser του client θα λάβει τα δεδομένα μας, θα τα «δια-
βάσει» ως κώδικα HTML και θα εμφανίσει στο χρήστη το ανά-
λογο αποτέλεσμα. Αν έχετε συνδέσει τους αναλογικούς αι-
σθητήρες σας στο Arduino, θα δείτε τις τιμές να αλλάζουν
σωστά. Αν όχι, απλώς θα δείτε εντελώς τυχαίες τιμές.
Σύνδεση
Για να δοκιμάσετε το πρόγραμμα, συνδέετε το Ethernet
Shield στο Arduino, προγραμματίζετε το Arduino με το γνω-
στό τρόπο και συνδέετε και το Ethernet Shield με τον router ή
το switch σας μέσω ενός απλού καλωδίου δικτύου. Στη συνέ-
χεια πρέπει να συνδέσετε το Arduino στο τοπικό δίκτυο του
σπιτιού σας. Η καλύτερη λύση είναι να συνδέσετε το Arduino
στο modem/router σας (ή σε κάποιο switch, εφόσον χρησιμο-
ποιείτε). Με αυτόν τον τρόπο θα μπορείτε μάλιστα να συνδε-
θείτε στο Arduino από όλους τους υπολογιστές του σπιτιού.
Μπορείτε επίσης να συνδέσετε το Arduino με ένα καλώδιο δι-
κτύου απευθείας στον υπολογιστή σας, αλλά σε αυτήν την πε-
ρίπτωση θα χρειαστεί μάλλον να ρυθμίσετε οι ίδιοι μια στατική
διεύθυνση IP για τον υπολογιστή σας. Στη συνέχεια, ανοίγετε
τον αγαπημένο σας Web browser (Firefox φυσικά) και πηγαί-
νετε στη διεύθυνση “192.168.1.177”, εννοείται χωρίς τα εισα-
γωγικά. Ίσως να παρατηρήσατε πως αυτή ακριβώς είναι και η
IP του Arduino που έχουμε ορίσει στην αρχή του κώδικα μας.
Εάν δεν εμφανίζεται τίποτα, σιγουρευτείτε ότι το Arduino εί-
ναι σωστά συνδεδεμένο στο τοπικό σας δίκτυο, ότι η IP που
ορίσατε στο Arduino είναι στο ίδιο υποδίκτυο με τους υπόλοι-
πους υπολογιστές και πως δεν υπάρχει άλλος υπολογιστής
που χρησιμοποιεί την ίδια IP.
Μπορείτε να δοκιμάσετε να κάνετε ping στην IP του
Arduino, οπότε θα πρέπει να παίρνετε απάντηση. Αν όχι,
υπάρχει κάποιο πρόβλημα με το δίκτυο. Αν όλα αυτά σας
ακούγονται Κινέζικα ή αν δεν καταφέρατε να το λύσετε, καλό
είναι να φωνάξετε το γνωστό (ή το γιο) σας που ασχολείται με
αυτά τα κομπιούτερ.
Ας πάμε τώρα να τσεκάρουμε κάτι. Θα συνδέσουμε ένα
LED στο Arduino, το οποίο θα ελέγξουμε μέσω Internet. Κα-
ταρχάς, εδώ πρέπει να επιστήσουμε την προσοχή σας: το
Ethernet Shield του Arduino χρησιμοποιεί τα pins 4,10,11,12
και 13, άρα δεν μπορούμε να χρησιμοποιήσουμε τα ίδια για
το LED μας (ή για οτιδήποτε άλλο). Σε αυτό το παράδειγμα
συνδέσαμε το LED μας στο pin 5. Επίσης, θα παρατηρήσετε
ότι στην αρχή έχουμε ορίσει gateway και subnet. Η πρώτη δι-
εύθυνση είναι η διεύθυνση του modem/router μας και η δεύ-
τερη είναι η μάσκα του υποδικτύου μας. Πρέπει και τα δύο να
ρυθμιστούν σωστά αν θέλουμε να μπορούμε να ελέγχουμε το
Arduino μας και μέσω Internet, εκτός σπιτιού. Τέλος, θα πρέ-
πει να παρατηρήσετε ότι, αντί για LED, μπορείτε να συνδέσε-
τε το κύκλωμα του ρελέ που φτιάξαμε στα προηγούμενα άρ-
θρα, ώστε να ελέγχουμε ηλεκτρικές συσκευές όπως φώτα,
θερμοσίφωνας κ.ά., ενώ αντίστοιχα μπορούμε να συνδέσου-
με και ένα XBee και να στέλνουμε εντολές ασύρματα σε άλλα
Arduino χρησιμοποιώντας τη βιβλιοθήκη Serial, και πάλι όπως
στα προηγούμενα άρθρα. Αλλά προς το παρόν ας δούμε τι
κάνει ο κώδικάς μας.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192 ,168 ,1 ,177 };
byte gateway[] = { 192 ,168 ,1 ,1 };
byte subnet[] = { 255 ,255 ,255 ,0 };
Server server(80);
String readString = String(30);
int ledPin = 5;
int pinStatus = LOW;
void setup()
{
pinMode(ledPin, OUTPUT);
Project – Arduino Hacks