Stap 2: Ethernet schakelen - met Arduino - programma
//
Intro:
Dit zal swich in- en uitschakelen uitgangen via uw mobiele apparaat.
Geen afbeeldingen of koppelingen naar afbeeldingen. CSS3 en HTML5 gebruik.
Hoewel het werken met andere webbrowser, suggereren we Safari voor de beste ervaring.
//
Versie: Web Server Ethernet schakelen versie 3,05
Auteur: Claudio Vella - Malta
Eerste code uit: http://bildr.org/2011/06/arduino-ethernet-pin-control/
Veel opmerkingen gemaakt voor beginners.
ARDUINO 1.0 + ALLEEN
#include < Ethernet.h >
#include < SPI.h >
////////////////////////////////////////////////////////////////////////
CONFIGUREREN
////////////////////////////////////////////////////////////////////////
Handmatige IP-instellingen
byte ip [] = {192, 168, 1, 177}; Handmatige installatie alleen
byte gateway [] = {192, 168, 1, 254}; Handmatige installatie alleen
byte subnet [] = {255, 255, 255, 0}; Handmatige installatie alleen
Als wilt wijzigen het MAC-adres (zeer zeldzaam)
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
Ethernet-poort
EthernetServer server = EthernetServer(80); HTML-standaardpoort 80
Het aantal uitgangen gonna worden geschakeld.
int outputQuantity = 8; Wanneer toegevoegd aan outputLowest resultaat mag niet hoger zijn dan 10
De laagste uitvoer pin die wij vanaf
int outputLowest = 2; Moet tussen 2 tot en met 9
////////////////////////////////////////////////////////////////////////
Variabelen declareren
int outp = 0;
Boole printLastCommandOnce = false;
Boole printButtonMenuOnce = false;
Boole initialPrint = waar;
AllOn string = "";
AllOff koord = "";
lezing van Boole = vals;
Booleaanse readInput [10]; Een Boole-array voor de maximale ammount maken.
Begin van het programma
VOID Setup {}
Serial.begin(9600);
Pinnen 10,11,12 en 13 worden gebruikt door de ethernet-shield
Set pinnen als uitgang
voor (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {}
pinMode (var, OUTPUT);
}
Instellen van het IP-adres. Commentaar uit de die je niet nodig.
Ethernet.begin(Mac); voor DHCP-adres. (Adres zal worden afgedrukt op seriële.)
Ethernet.begin (mac, IP-gateway, subnet); voor handmatige installatie. (Adres is enerzijds boven geconfigureerd.)
server.begin();
Serial.println(Ethernet.localIP());
}
void loop {}
luisteren voor clients voor inkomende en verwerken van de aanvragen.
checkForClient();
}
ongeldig checkForClient() {}
EthernetClient client = server.available();
Als (client) {}
een http-verzoek eindigt met een lege regel
Boole currentLineIsBlank = waar;
Boole sentHeader = false;
terwijl (client.connected()) {}
Als (client.available()) {}
if(!sentHeader) {}
verzenden van een standaard http-antwoordheader
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println ("Connnection: sluiten");
client.println();
client.println ("<! HTML DOCTYPE > ");
client.println ("< head >");
paginatitel toevoegen
client.println ("< titel > Ethernet-Switching op </title >");
client.println ("< metanaam = \"beschrijving\"content = \"Ethernet Switching\"/ >");
een meta-tag vernieuwen, zodat de browser opnieuw om de 5 seconden trekt toevoegen
client.println ("< meta http-equiv = \"refresh\"content = \" 10; url = / \ ">");
andere browserconfiguratie toevoegen
client.println ("< metanaam = \" apple-mobiele-web-app-capable\ "inhoud = \"yes\">");
client.println ("< meta name=\"apple-mobile-web-app-status-bar-style\ "inhoud = \"default\">");
client.println ("< metanaam = \"viewport\"content = \" Breedte = apparaat-breedte, gebruiker-scalable = no\ "/ >");
invoegen van de gegevens van de stijlen, meestal te vinden in de CSS-bestanden.
client.println ("< stijl type = \" tekst/css\ ">");
client.println("");
Hierdoor wordt ingesteld hoe de pagina eruit ziet grafisch
client.println ("html {hoogte: 100%;}");
client.println ("lichaam {");
client.println ("hoogte: 100%;");
client.println ("marge: 0;");
client.println ("lettertype-familie: helvetica, sans-serif;");
client.println ("- webkit-tekst-size-adjust: none;");
client.println("}");
client.println("");
client.println ("lichaam {");
client.println ("- webkit-achtergrond-size: 100% 21px;");
client.println ("background-color: #c5ccd3;");
client.println ("achtergrond-afbeelding:");
client.println ("- webkit-gradient(linear, left top, right top,");
client.println ("kleur-stop(.75, transparent),");
client.println ("kleur-stop(.75, rgba(255,255,255,.1)));");
client.println ("- webkit-achtergrond-size: 7px;");
client.println("}");
client.println("");
client.println (".view {");
client.println ("min-hoogte: 100%;");
client.println ("overloop: Automobiel;");
client.println("}");
client.println("");
client.println (".header-wrapper {");
client.println ("hoogte: 44px;");
client.println ("font-weight: bold;");
client.println ("tekst-schaduw: rgba(0,0,0,0.7) 0 - 1px 0;");
client.println ("border-top: 1px solid rgba(255,255,255,0.6);");
client.println ("border-bottom: 1px solid rgba(0,0,0,0.6);");
client.println ("kleur: #fff;");
client.println ("background-color: #8195af;");
client.println ("achtergrond-afbeelding:");
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 ("achtergrond-herhaling: geen-herhaling;");
client.println ("achtergrond-positie: linksboven, linksonder;");
client.println ("- webkit-achtergrond-size: 100% 21px, 100% 22px;");
client.println ("- webkit-vak-sizing: grens-vak;");
client.println("}");
client.println("");
client.println (".header-wrapper h1 {");
client.println ("text-align: midden;");
client.println ("tekengrootte: 20px;");
client.println ("regelafstand: 44px;");
client.println ("marge: 0;");
client.println("}");
client.println("");
client.println (".group-wrapper {");
client.println ("marge: 9px;");
client.println("}");
client.println("");
client.println (".group-wrapper h2 {");
client.println ("color: #4c566c;");
client.println ("tekengrootte: 17px;");
client.println ("regelafstand: 0.8;");
client.println ("font-weight: bold;");
client.println ("tekst-schaduw: 1px #fff 0 0;");
client.println ("marge: 20px 10px 12px;");
client.println("}");
client.println("");
client.println (".group-wrapper h3 {");
client.println ("color: #4c566c;");
client.println ("tekengrootte: 12px;");
client.println ("regelafstand: 1;");
client.println ("font-weight: bold;");
client.println ("tekst-schaduw: 1px #fff 0 0;");
client.println ("marge: 20px 10px 12px;");
client.println("}");
client.println("");
client.println (".group-wrapper tabel {");
client.println ("background-color: #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 ("tekengrootte: 17px;");
client.println ("regelafstand: 20px;");
client.println ("marge: 9px 0 20px;");
client.println ("rand: 1px solid #a9abae;");
client.println ("padding: 11px 3px 12px 3px;");
client.println ("marge-linkerzijde: auto;");
client.println ("marge-rechts: auto;");
client.println ("- moz-transformatie: scale(1);"); Code voor Mozilla Firefox
client.println ("- moz-transformatie-oorsprong: 0 0;");
client.println("}");
client.println("");
hoe de groene (ON) LED eruit zal zien
client.println (".green-cirkel {");
client.println ("display: block;");
client.println ("hoogte: 23px;");
client.println ("breedte: 23px;");
client.println ("background-color: #0f0;");
client.println ("achtergrondkleur: 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 ("margin-left: 1px;");
client.println ("achtergrondafbeelding: - webkit-gradiënt (lineair, 0 tot 0%, 0% 90%, van (rgba (46, 184, 0, 0.8)), en (rgba (148, 255, 112,. 9)));
client.println ("rand: 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("");
hoe de zwarte (uit) LED eruit zal zien
client.println (".black-cirkel {");
client.println ("display: block;");
client.println ("hoogte: 23px;");
client.println ("breedte: 23px;");
client.println ("background-color: #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 ("margin-left: 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("");
Dit zal de schittering aan beide van de LED's toevoegen
client.println (".glare {");
client.println ("positie: relatief;");
client.println ("top: 1;");
client.println ("links: 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 ("hoogte: 1px;");
client.println ("breedte: 13px;");
client.println ("opvulling: 5px 0;");
client.println ("achtergrondkleur: rgba (200 200 200, 0,25);");
client.println ("achtergrondafbeelding: - webkit-gradiënt (lineair, 0 tot 0%, 0% 95%, van (rgba (255, 255, 255, 0.7)), en (rgba (255, 255, 255, 0)));");
client.println("}");
client.println("");
en ten slotte is dit het einde van de stijl gegevens als een header
client.println ("</style >");
client.println ("</head >");
nu het afdrukken van de pagina zelf
client.println ("< body >");
client.println ("< div class = \"weergave\">");
client.println ("< div class = \" kop-wrapper\ ">");
client.println ("< h1 > Ethernet-Switching op </h1 >");
client.println ("</div >");
client.println ("< div class = \" groep-wrapper\ ">");
client.println ("< h2 > Switch de vereiste output. </h2 >");
client.println();
Dit is voor de arduino voor de bouw van de pagina op de vlieg.
sentHeader = true;
}
char c = client.read();
Als (lezen & & c == ' ') {}
lezen = false;
}
Serial.Print(c);
Als (c == '?') {
lezen = true; vond de?, beginnen met het lezen van de info
}
if(Reading) {}
Als (c == 'H') {outp = 1;}
Als (c == 'L') {outp = 0;}
Serial.Print(c); afdrukken van de waarde van c bij seriële communicatie
Serial.Print(outp);
Serial.Print('\n');
schakelen (c) {}
Case '2':
Voeg code hier om te starten op 2
triggerPin (2, client, outp);
breken;
Case '3':
Voeg code hier te activeren op 3
triggerPin (3, client, outp);
breken;
Case '4':
Voeg code hier om te starten op 4
triggerPin (4, client, outp);
breken;
Case '5':
Voeg code hier om te starten op 5
triggerPin (5, client, outp);
printHtml(client);
breken;
Case "6":
Voeg code hier om te starten op 6
triggerPin (6, client, outp);
breken;
Case '7':
Voeg code hier om te starten op 7
triggerPin (7, client, outp);
breken;
zaak '8':
Voeg code hier om te starten op 8
triggerPin (8, client, outp);
breken;
Case '9':
Voeg code hier om te starten op 9
triggerPin (9, client, outp);
breken;
}
}
Als (c == '\n' & & currentLineIsBlank) {}
printLastCommandOnce = true;
printButtonMenuOnce = true;
triggerPin (777, client, outp); Oproep om te lezen van input- en print menu. 777 wordt gebruikt niet worden bijgewerkt van alle uitgangen
breken;
}
}
}
Ingestelde variabelen voordat u afsluit
printLastCommandOnce = false;
printButtonMenuOnce = false;
allOn = "";
allOff = "";
client.println ("\n < h3 align = \"center\"> & kopiëren; Auteur - Claudio Vella < br > Malta - oktober - 2012 < / h3 > ");
client.println ("</div > \n </div > \n </body > \n </html >");
delay(1); de web browser tijd geven om te ontvangen van de gegevens
client.stop(); de verbinding sluiten:
}
}
VOID triggerPin (int pin, EthernetClient client, int outp) {}
Op of afschakelen uitgangen, leest de output en de knoppen afdrukken
Uitgangen van de instelling
Als (pin! = 777) {}
if(outp == 1) {}
digitalWrite (pin, hoge);
}
if(outp == 0) {}
digitalWrite (pin, laag);
}
}
Vernieuwen van de lezing van uitgangen
readOutputStatuses();
De knoppen afdrukken
Als (printButtonMenuOnce == true) {}
printHtmlButtons(client);
printButtonMenuOnce = false;
}
}
afdrukken van de HTML-knoppen om over te schakelen aan/uit-kanalen
VOID printHtmlButtons (EthernetClient-client) {}
Start de html-tabel maken
client.println("");
client.println ("< p >");
client.println ("< FORM >");
client.println ("< tabelrand = \"0\"align = \"center\">");
Beginnen met afdrukken knop door de knop
voor (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {}
opdracht set voor alle in-/ uitschakelen
allOn += "H";
allOn += var;
allOff += "L";
allOff += var;
Drukken begin van rij
client.Print ("< tr > \n");
Afdrukken de ON-knoppen
client.Print ("< td >< INPUT TYPE = \"button\"waarde = \" Inschakel - Pin ");
client.Print(var);
client.Print ("\" onClick=\"parent.location='/? H");
client.Print(var);
client.Print ("'\" >< /td > \n ");
Wordt de uit knoppen afgedrukt
client.Print ("< td >< INPUT TYPE = \"button\"waarde = \" Switch OFF - Pin ");
client.Print(var);
client.Print ("\" onClick=\"parent.location='/? L");
client.Print(var);
client.Print ("'\" >< /td > \n ");
Eerste deel van de cirkels of de LED's afdrukken
Als (readInput [var] == true) {}
client.Print ("< td >< div class =" groene-cirkel ' >< div class = 'glare' >< / div >< / div >< /td > \n ");
} else
{
client.Print ("< td >< div class =" zwart-cirkel ' >< div class = 'glare' >< / div >< / div >< /td > \n ");
}
Einde van rij afdrukken
client.Print ("< /tr > \n");
}
Drukt de op alle pinnen knop
client.Print ("< tr > \n < td >< INPUT TYPE = \"button\"waarde = \" zet alle pinnen");
client.Print ("\" onClick=\"parent.location='/?");
client.Print(allOn);
client.Print ("'\" >< /td > \n ");
Drukt de OFF All knop pinnen
client.Print ("< td >< INPUT TYPE = \"button\"waarde = \" Schakel alle pinnen");
client.Print ("\" onClick=\"parent.location='/?");
client.Print(allOff);
client.Print ("'\" >< /td > \n < td >< /td > \n < /tr > \n ");
Sluiten van de tabel en het formulier
client.println ("</table >");
client.println ("</FORM >");
client.println ("< /p >');
}
Het lezen van de Output-statussen
ongeldig readOutputStatuses() {}
voor (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {}
readInput [var] = digitalRead(var);
Serial.Print(readInput[var]);
}
}