Ethernet-switchar - med Arduino (2 / 5 steg)
Steg 2: Ethernet - med Arduino - Program
//
Intro:
Detta kommer swich på och av utgångar via din mobila enhet.
Inga bilder eller länkar till bilder. CSS3 och HTML5 användning.
Om det fungerar med andra webbläsare, föreslår vi att Safari för bästa upplevelse.
//
Version: Web Server Ethernet byta Version 3,05
Författare: Claudio Vella - Malta
Ursprungliga koden från: http://bildr.org/2011/06/arduino-ethernet-pin-control/
Gjorde massa kommentarer för nybörjare.
ARDUINO 1.0 + ENDAST
#include < Ethernet.h >
#include < SPI.h >
////////////////////////////////////////////////////////////////////////
KONFIGURERA
////////////////////////////////////////////////////////////////////////
IP-manuella inställningar
byte ip [] = {192, 168, 1, 177}; Manuell inställning bara
byte gateway [] = {192, 168, 1, 254}; Manuell inställning bara
byte undernät [] = {255, 255, 255, 0}; Manuell inställning bara
om behöver ändra MAC-adressen (mycket sällsynt)
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
Ethernet-Port
EthernetServer server = EthernetServer(80); HTML-standardporten 80
Antal utgångar kommer för att stängas.
int outputQuantity = 8; När den läggs till bör outputLowest resultat inte överstiga 10
Den lägsta utgångsstiftet börjar vi från
int outputLowest = 2; Bör vara mellan 2 till 9
////////////////////////////////////////////////////////////////////////
Variabeldeklaration
int ljudut = 0;
booleska printLastCommandOnce = false;
booleska printButtonMenuOnce = false;
booleska initialPrint = sant;
Sträng allOn = "";
String allOff = "";
booleska läsning = false;
booleska readInput [10]. Skapa en boolesk matris för den maximala beloppet.
Början av programmet
void setup() {
Serial.BEGIN(9600);
Pins 10,11,12 & 13 används av ethernet shield
Ställ in stift som resultat
för (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {
pinMode (varians, produktionen);
}
Ställa in IP-adressen. Kommentera bort det du inte behöver.
Ethernet.BEGIN(Mac); för DHCP-adress. (Adress ska skrivas till seriell.)
Ethernet.BEGIN (mac, ip, gateway, undernät); för manuell inställning. (Adress är den konfigurerade ovan.)
Server.BEGIN();
Serial.println(Ethernet.localIP());
}
void loop() {
lyssnar efter inkommande klienter, och bearbeta begäranden.
checkForClient();
}
void checkForClient() {
EthernetClient klient = server.available();
om (klient) {
en http-förfrågan avslutas med en tom rad
booleska currentLineIsBlank = sant;
booleska sentHeader = false;
samtidigt (client.connected()) {
om (client.available()) {
IF(!sentHeader) {
Skicka ett standard http-svarshuvud
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println ("Connnection: Stäng");
client.println();
client.println ("<! DOCTYPE HTML > ");
client.println ("< head >");
Lägg till sida titel
client.println ("< title > Ethernet-switchar </title >");
client.println ("< meta namn = \"description\"innehåll = \"Ethernet Switching\"/ >");
lägga till en meta refresh-taggen, så webbläsaren drar igen var femte sekund:
client.println ("< meta http-equiv = \"refresh\"innehåll = \" 10; url = / \ ">");
Lägg till andra webbläsarkonfiguration
client.println ("< meta namn = \" apple-mobil-web-app-capable\ "innehåll = \"yes\">");
client.println ("< meta name=\"apple-mobile-web-app-status-bar-style\ "innehåll = \"default\">");
client.println ("< meta namn = \"viewport\"innehåll = \" bredd = enhet-bredd, användare-scalable = no\ "/ >");
att sätta in stilar data, vanligtvis finns i CSS-filer.
client.println ("< stil typ = \" text/css\ ">");
client.println("");
Detta anger hur sidan ska se ut grafiskt
client.println ("html {höjd: 100%;}");
client.println ("kroppen {");
client.println ("höjd: 100%;");
client.println ("marginal: 0;");
client.println ("font-family: helvetica, sans-serif;");
client.println ("- webkit-text-size-adjust: none;");
client.println("}");
client.println("");
client.println ("kroppen {");
client.println ("- webkit-bakgrund-storlek: 100% 21px;");
client.println ("bakgrundsfärg: #c5ccd3;");
client.println ("bakgrunden-bild:");
client.println ("- webkit-gradient(linear, left top, right top,");
client.println ("färg-stop(.75, transparent),");
client.println ("färg-stop(.75, rgba(255,255,255,.1)));");
client.println ("- webkit-bakgrund-storlek: 7px;");
client.println("}");
client.println("");
client.println (".Visa {");
client.println ("min-höjd: 100%;");
client.println ("overflow: auto;");
client.println("}");
client.println("");
client.println (".header-wrapper {");
client.println ("höjd: 44px;");
client.println ("font-weight: bold;");
client.println ("text-shadow: rgba(0,0,0,0.7) 0 - 1px 0;");
client.println ("border-top: solid 1px rgba(255,255,255,0.6);");
client.println ("border-bottom: solid 1px rgba(0,0,0,0.6);");
client.println ("färg: #fff;");
client.println ("bakgrunden-cologne: #8195af;");
client.println ("bakgrunden-bild:");
client.println ("- webkit-gradient(linear, left top, left bottom,");
client.println ("from(rgba(255,255,255,.4)),");
client.println("to(RGBA(255,255,255,.05))),");
client.println ("- webkit-gradient(linear, left top, left bottom,");
client.println ("from(transparent),");
client.println("to(RGBA(0,0,64,.1)));");
client.println ("bakgrund-repeat: Upprepa inte;");
client.println ("bakgrund-position: högst upp till vänster, nederst till vänster,");
client.println ("- webkit-bakgrund-storlek: 100% 21px, 100% 22px;");
client.println ("- webkit-box-dimensionering: border-box;");
client.println("}");
client.println("");
client.println (".header-wrapper h1 {");
client.println ("text-align: center;");
client.println ("font-size: 20px;");
client.println ("line-height: 44px;");
client.println ("marginal: 0;");
client.println("}");
client.println("");
client.println (".group-wrapper {");
client.println ("marginal: 9px;");
client.println("}");
client.println("");
client.println (".group-wrapper h2 {");
client.println ("color: #4c566c;");
client.println ("font-size: 17px;");
client.println ("line-height: 0,8;");
client.println ("font-weight: bold;");
client.println ("text-shadow: #fff 0 1px 0;");
client.println ("marginal: 20px 10px 12px;");
client.println("}");
client.println("");
client.println (".group-wrapper h3 {");
client.println ("color: #4c566c;");
client.println ("font-size: 12px;");
client.println ("line-height: 1.");
client.println ("font-weight: bold;");
client.println ("text-shadow: #fff 0 1px 0;");
client.println ("marginal: 20px 10px 12px;");
client.println("}");
client.println("");
client.println (".group-wrapper tabell {");
client.println ("bakgrundsfärg: #fff;");
client.println ("- webkit-border-radius: 10px;");
client.println ("- moz-border-radius: 10px;");
client.println ("- khtml-border-radius: 10px;");
client.println ("border-radius: 10px;");
client.println ("font-size: 17px;");
client.println ("line-height: 20px;");
client.println ("marginal: 9px 0 20px;");
client.println ("border: 1px solid #a9abae;");
client.println ("stoppning: 11px 3px 12px 3px;");
client.println ("marginal-vänster: auto;");
client.println ("marginal-rätt: auto;");
client.println ("- moz-transform: scale(1);"); Kod för Mozilla Firefox
client.println ("- moz-transform-ursprung: 0 0;");
client.println("}");
client.println("");
Hur grön (på) LED ser ut
client.println (".green-cirkel {");
client.println ("display: block;");
client.println ("höjd: 23px;");
client.println ("bredd: 23px;");
client.println ("bakgrunden-cologne: #0f0;");
client.println ("bakgrundsfärg: rgba (60, 132, 198, 0,8);");
client.println ("- moz-border-radius: 11px;");
client.println ("- webkit-border-radius: 11px;");
client.println ("- khtml-border-radius: 11px;");
client.println ("border-radius: 11px;");
client.println ("marginal-vänster: 1px;");
client.println ("bakgrunden-bild: - webkit-gradient (linjär, 0% 0%, 0% 90%, från (rgba (46 184, 0, 0,8)), till (rgba (148, 255, 112,. 9)));
client.println ("gränsen: 2px solid #ccc;");
client.println ("- webkit-box-shadow: rgba (11 140, 27, 0,5) 0px 10px 16px;");
client.println ("- moz-box-shadow: rgba (11 140, 27, 0,5) 0px 10px 16px; / * FF 3.5 + * / ");
client.println ("box-shadow: rgba (11 140, 27, 0,5) 0px 10px 16px; / * FF 3.5 + * / ");
client.println("}");
client.println("");
Hur svarten (off) LED ser ut
client.println (".black-cirkel {");
client.println ("display: block;");
client.println ("höjd: 23px;");
client.println ("bredd: 23px;");
client.println ("bakgrunden-cologne: #040;");
client.println ("- moz-border-radius: 11px;");
client.println ("- webkit-border-radius: 11px;");
client.println ("- khtml-border-radius: 11px;");
client.println ("border-radius: 11px;");
client.println ("marginal-vänster: 1px;");
client.println ("- webkit-box-shadow: rgba (11 140, 27, 0,5) 0px 10px 16px;");
client.println ("- moz-box-shadow: rgba (11 140, 27, 0,5) 0px 10px 16px; / * FF 3.5 + * / ");
client.println ("box-shadow: rgba (11 140, 27, 0,5) 0px 10px 16px; / * FF 3.5 + * / ");
client.println("}");
client.println("");
Detta kommer att lägga bländning i båda lysdioderna
client.println (".glare {");
client.println ("position: släkting;");
client.println ("top: 1.");
client.println ("vänster: 5px;");
client.println ("- webkit-border-radius: 10px;");
client.println ("- moz-border-radius: 10px;");
client.println ("- khtml-border-radius: 10px;");
client.println ("border-radius: 10px;");
client.println ("höjd: 1px;");
client.println ("bredd: 13px;");
client.println ("stoppning: 5px 0;");
client.println ("bakgrundsfärg: rgba (200, 200, 200, 0,25);");
client.println ("bakgrunden-bild: - webkit-gradient (linjär, 0% 0%, 0% 95%, från (rgba (255, 255, 255, 0,7)), till (rgba (255, 255, 255, 0)));");
client.println("}");
client.println("");
Slutligen detta är slutet av stil data och rubrik
client.println ("</stil >");
client.println ("</head >");
nu skriver ut själva sidan
client.println ("< body >");
client.println ("< div class = \"view\">");
client.println ("< div class = \" huvud-wrapper\ ">");
client.println ("Ethernet-switchar på < h1 > </h1 >");
client.println ("</div >");
client.println ("< div class = \" grupp-wrapper\ ">");
client.println ("< h2 > Switch krävs utdata. </h2 >");
client.println();
Detta är för arduino att bygga sidan i farten.
sentHeader = sant;
}
char c = client.read();
om (reading & & c == "") {
läsning = false;
}
Serial.Print(c);
om (c == "?") {
läsning = sant; hittade den?, börja läsa info
}
IF(Reading) {
om (c == "H") {ljudut = 1;}
om (c == "L") {ljudut = 0;}
Serial.Print(c); skriva ut värdet av c för seriell kommunikation
Serial.Print(outp);
Serial.Print('\n');
Växla (c) {
fallet "2":
Lägg till kod här för att utlösa den 2
triggerPin (2, klient, ljudut);
bryta;
fallet "3":
Lägg till kod här för att utlösa på 3
triggerPin (3, klient, ljudut);
bryta;
fallet "4":
Lägg till kod här för att utlösa den 4
triggerPin (4, klient, ljudut);
bryta;
fallet "5":
Lägg till kod här för att utlösa den 5
triggerPin (5, klient, ljudut);
printHtml(client);
bryta;
fallet "6":
Lägg till kod här för att utlösa den 6
triggerPin (6, klient, ljudut);
bryta;
fallet "7":
Lägg till kod här för att utlösa den 7
triggerPin (7, klient, ljudut);
bryta;
fallet "8":
Lägg till kod här för att utlösa den 8
triggerPin (8, klient, ljudut);
bryta;
fall '9':
Lägg till kod här för att utlösa den 9
triggerPin (9, klient, ljudut);
bryta;
}
}
om (c == '\n' & & currentLineIsBlank) {
printLastCommandOnce = sant;
printButtonMenuOnce = sant;
triggerPin (777, klient, ljudut); Uppmaning att läsa in och skriva ut menyn. 777 används inte att uppdatera alla utgångar
bryta;
}
}
}
Ställ in variabler innan spännande
printLastCommandOnce = false;
printButtonMenuOnce = false;
allOn = "";
allOff = "";
client.println ("\n < h3 align = \"center\"> & Kopiera; Författare - Claudio Vella < br > Malta - oktober - 2012 < / h3 > ");
client.println ("</div > \n </div > \n </kropp > \n </html >");
Delay(1); de web webbläsare möjlighet att ta emot data
client.stop(); stänga anslutningen:
}
}
void triggerPin (int pin, EthernetClient klient, int ljudut) {
Slå på och av utgångar, läser utgångarna och skriver ut knapparna
Inställningen utgångar
om (pin! = 777) {
IF(outp == 1) {
digitalWrite (pin, hög);
}
IF(outp == 0) {
digitalWrite (pin, låg);
}
}
Uppdatera läsningen av utgångar
readOutputStatuses();
Tryck på knapparna
om (printButtonMenuOnce == true) {
printHtmlButtons(client);
printButtonMenuOnce = false;
}
}
skriver ut HTML-knapparna för att växla på/av kanaler
void printHtmlButtons (EthernetClient klient) {
Börja skapa HTML-tabellen
client.println("");
client.println ("< p >");
client.println ("< FORM >").
client.println ("< tabellkantlinjen = \"0\"align = \"center\">");
Starta utskriften knapp av knapp
för (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {
SET-kommandot för alla på/av
allOn += "H".
allOn += var;
allOff += "L".
allOff += var;
Skriva ut början av rad
client.Print ("< tr > \n");
Tryck på knapparna
client.Print ("< td >< INPUT TYPE = \"button\"värde = \" Switch ON - Pin ");
client.Print(var);
client.Print ("\" onClick=\"parent.location='/? H").
client.Print(var);
client.Print ("" \ ">< /td > \n");
Utskrifter av knapparna
client.Print ("< td >< INPUT TYPE = \"button\"värde = \" Switch OFF - Pin ");
client.Print(var);
client.Print ("\" onClick=\"parent.location='/? L").
client.Print(var);
client.Print ("" \ ">< /td > \n");
Skriva ut första delen av cirklar eller lysdioder
om (readInput [var] == true) {
client.Print ("< td >< div class =" grön cirkel ' >< div class = "bländande" >< / div >< / div >< /td > \n ");
} annat
{
client.Print ("< td >< div class =" svart cirkel ' >< div class = "bländande" >< / div >< / div >< /td > \n ");
}
Skriva ut slutet av raden
client.Print ("< /tr > \n");
}
Skrivs ut på alla stift knappen
client.Print ("< tr > \n < td >< INPUT TYPE = \"button\"värde = \" slå på alla stift");
client.Print ("\" onClick=\"parent.location='/?");
client.Print(allOn);
client.Print ("" \ ">< /td > \n");
Utskrifter av alla stift knappen
client.Print ("< td >< INPUT TYPE = \"button\"värde = \" Stäng av alla stift");
client.Print ("\" onClick=\"parent.location='/?");
client.Print(allOff);
client.Print ("" \ ">< /td > \n < td >< /td > < /tr > \n \n");
Stänga den tabellen och form
client.println ("</table >");
client.println ("</FORM >");
client.println ("< /p >");
}
Läsa utdata status
void readOutputStatuses() {
för (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {
readInput [var] = digitalRead(var);
Serial.Print(readInput[var]);
}
}