Linux Inside
50
Ethernet.begin(mac, ip, gateway, subnet);
delay(1000);
}
void loop(){
Client client = server.available();
if (client)
{
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 30)
{
readString = readString + c;
}
if (c == ‘\n’)
{
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
client.println(“<h1>”);
client.println(“Pimp my House!”);
client.println(“</h1>”);
if(readString.startsWith(“GET “))
{
if(readString.indexOf(“LAMP”) != -1)
{
if(readString.indexOf(“ON”) != -1)
pinStatus = HIGH;
else if(readString.indexOf(“OFF”) != -1)
pinStatus = LOW;
else if(readString.indexOf(“VALUE”) != -1)
showStatus(client);
else
{
client.println(“Usage:<br
/>192.168.1.177/LAMP/ON or 192.168.1.177/LAMP/OFF or
192.168.1.177/LAMP/VALUE”);
}
}
else
{
showStatus(client);
client.println(“<br />”);
client.println(“<a href=’LAMP/ON’>Turn
on</a>”);
client.println(“<br />”);
client.println(“<a href=’LAMP/OFF’>Turn
off’</a>”);
}
}
readString=”“;
client.stop();
}
}
}
}
digitalWrite(ledPin, pinStatus);
}
void showStatus(Client client)
{
client.print(“The LAMP is “);
if(pinStatus)
client.println(“ON”);
else
client.println(“OFF”);
}
Η αρχή είναι παρόμοια με τον προηγούμενο κώδικα, μόνο
που χρησιμοποιούμε κάποιες μεταβλητές για να ορίσουμε
το pin που χρησιμοποιούμε και να αποθηκεύουμε την κατά-
σταση του LED μας. Στη loop, πλέον, ελέγχουμε το URL που
έδωσε ο χρήστης. Έτσι, αν δώσει 192.168.1.177/LAMP/ON
θα ανοίξουμε το LED, ενώ με 192.168.1.177/LAMP/OFF θα
το κλείσουμε. Αν δώσει 192.168.1.177/LAMP/VALUE, θα δεί-
ξουμε την τρέχουσα κατάσταση του LED. Αν δώσει
192.168.1.177/LAMP αλλά κανένα από τα τρία παραπάνω,
θα τον ενημερώσουμε για το πώς πρέπει να χρησιμοποιήσει
το «site» μας.
Τέλος, αν απλώς γράψει την IP, του δείχνουμε την κατά-
σταση του LED και του δείχνουμε και δύο links, ένα για το
άνοιγμα και ένα για το κλείσιμο του LED
.
Για τον έλεγχο πε-
ρισσότερων του ενός LED/φώτων, μπορούμε πολύ απλά
αντί για LAMP, να χρησιμοποιήσουμε LAMP1, LAMP2,
LAMP3 κλπ. και να προσθέσουμε τον αντίστοιχο κώδικα για
τον έλεγχό τους.
Αντίστοιχα, όπως αναφέραμε και προηγουμένως, μπο-
ρούμε να προσθέσουμε ένα XBee στο Arduino μας και να
ελέγχουμε έτσι ασύρματα ένα ή περισσότερα Arduino, με
τον τρόπο που κάναμε στα προηγούμενα άρθρα.
Το μόνο που χρειάζεται είναι να καλούμε τη Serial.print()
αντί να αλλάζουμε την κατάσταση του pin, όπως δείξαμε στα
προηγούμενα άρθρα.
Extreme Makeover!
Για το τέλος αφήσαμε το πιο σημαντικό. Πλέον μπορούμε
να ελέγχουμε το Arduino μας μέσω Web, αλλά σημασία έχει
να μπορούμε να το κάνουμε και εκτός σπιτιού, απ’ οποιονδή-
ποτε υπολογιστή ή Smartphone, όπου και να βρισκόμαστε.
Για να το καταφέρουμε αυτό, πρέπει να ρυθμίσουμε το port
forwarding του modem/router μας να προωθεί τη θύρα (port)
80 στην IP του Arduino, και τέλος να ρυθμίσουμε DynDNS,
ώστε να έχουμε μία διεύθυνση που να αντιστοιχεί πάντα στην
IP του σπιτιού μας.
Αυτό βέβαια ξεφεύγει πολύ από τα όρια του άρθρου, αφού
κάθε modem/router ρυθμίζεται με διαφορετικό τρόπο, οπότε
σας προτείνουμε να πειραματιστείτε μόνοι σας ή, στη χειρό-
τερη περίπτωση, φωνάξτε και πάλι τον «κομπιουτεράκια» φίλο
σας. Βέβαια, για να διαβάζετε αυτό το περιοδικό, ξέρετε (ή
θα έπρεπε να ξέρετε!) ότι αυτός είστε εσείς, οπότε δεν χρειά-
ζεστε βοήθεια.
Προσοχή! Τελειώνοντας το άρθρο, ίσως να παρατηρήσατε
πως λείπει κάτι πολύ σημαντικό. Κυρίες και κύριοι, αυτή τη
φορά δεν έχει σοκολάτα!
Όχι ότι δεν θέλω να σας γλυκάνω ή δεν το αξίζετε, αλλά
πρέπει να προσέχουμε και το ζάχαρό μας.
Και στο κάτω κάτω, χίλιες φορές καλύτερο ένα μελομακά-
ρονο (τη στιγμή που γράφεται αυτό το άρθρο είμαστε κοντά
στα Χριστούγεννα).
•
Project – Arduino Hacks