Étape 2: Ethernet commutation - avec Arduino - programme
//
Intro :
Cette volonté swich sur et en dehors des sorties fosse de votre appareil mobile.
Aucune images ou liens vers des images. Utilisation de CSS3 et HTML5.
Bien que cela fonctionne avec les autre navigateur web, nous vous suggérons de Safari pour une meilleure expérience.
//
Version : Web serveur Ethernet commutation Version 3.05
Auteur : Claudio Vella - Malte
Code de initial : http://bildr.org/2011/06/arduino-ethernet-pin-control/
Fait beaucoup de commentaires pour les débutants.
ARDUINO 1.0 + SEULEMENT
#include < Ethernet.h >
#include < SPI.h >
////////////////////////////////////////////////////////////////////////
CONFIGURER
////////////////////////////////////////////////////////////////////////
Réglages manuels IP
la propriété intellectuelle de Byte [] = {192, 168, 1, 177} ; Installation manuelle uniquement
la passerelle de Byte [] = {192, 168, 1, 254} ; Installation manuelle uniquement
sous-réseau Byte = {255, 255, 255, 0} ; Installation manuelle uniquement
Si besoin de changer l’adresse MAC (très Rare)
la mac de Byte [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED} ;
Port Ethernet
Serveur EthernetServer = EthernetServer(80) ; port 80 du html par défaut
Le nombre de sorties va être changé.
int outputQuantity = 8 ; Lorsqu’on ajoute outputLowest résultat ne doit pas dépasser 10
La broche de sortie plus bas, de que nous ne partons pas
int outputLowest = 2 ; Devrait se situer entre 2 à 9
////////////////////////////////////////////////////////////////////////
Déclaration de variable
sortie int = 0 ;
printLastCommandOnce booléen = false ;
printButtonMenuOnce booléen = false ;
Boolean initialPrint = true ;
String allOn = "" ;
String allOff = "" ;
lecture booléen = false ;
readInput booléen [10] ; Créer une matrice booléenne pour la quantité maximale.
Début du programme
void setup() {}
Serial.Begin(9600) ;
Broches 10,11,12 et 13 sont utilisés par le shield ethernet
Ensemble de broches comme sorties
pour (int var = outputLowest ; var < outputLowest + outputQuantity ; var ++) {}
pinMode (var, sortie) ;
}
Configurer l’adresse IP. Commentez, celui que vous n’avez pas besoin.
Ethernet.Begin(Mac) ; pour adresse DHCP. (Adresse sera imprimé dans la série.)
Ethernet.Begin (mac, ip, passerelle, sous-réseau) ; pour une configuration manuelle. (L’adresse est celui configuré plus haut.)
Server.Begin() ;
Serial.println(Ethernet.localIP()) ;
}
void loop() {}
écoute des clients entrants et traiter les demandes.
checkForClient() ;
}
void checkForClient() {}
EthernetClient client = server.available() ;
Si {(client)
une requête http se termine par une ligne vide
Boolean currentLineIsBlank = true ;
sentHeader booléen = false ;
tandis que (client.connected()) {}
Si (client.available()) {}
{if(!sentHeader)}
Envoyer un en-tête de réponse http standard
client.println ("HTTP/1.1 200 OK") ;
client.println ("Content-Type : text/html") ;
client.println ("connexion : fermer") ;
client.println() ;
client.println ("< ! DOCTYPE HTML > ") ;
client.println ("< head >") ;
Ajouter un titre de page
client.println ("< titre > commutation Ethernet < /title >") ;
client.println ("< nom meta = \ « description\ » content = \ « Ethernet Switching\ » / >") ;
Ajoutez une balise refresh meta, pour que le navigateur tire encore une fois toutes les 5 secondes :
client.println ("< meta http-equiv = \ « refresh\ » content = \" 10 ; url = / \ ">") ;
Ajouter les autre configuration du navigateur
client.println ("< nom meta = \" apple-mobile-web-app-capable\ "contenu = \ « yes\ » >") ;
client.println ("< meta name=\"apple-mobile-web-app-status-bar-style\ "contenu = \ « default\ » >") ;
client.println ("< nom meta = \ « viewport\ » content = \" largeur = dispositif-largeur, utilisateur évolutive = no\ "/ >") ;
Insérer les données de styles, se trouve habituellement dans les fichiers CSS.
client.println ("< style type = \" texte/css\ ">") ;
client.println("") ;
Celle-ci définira comment la page va s’afficher graphiquement
client.println ("html {height : 100 %;}") ;
client.println ("body {") ;
client.println ("height : 100 %;") ;
client.println ("marge: 0;") ;
client.println ("font-family : helvetica, sans-serif;") ;
client.println ("- webkit-text-size-adjust : none;") ;
client.println("}") ;
client.println("") ;
client.println ("body {") ;
client.println ("- webkit-background-size : 100 % 21px;") ;
client.println ("background-color : #c5ccd3;") ;
client.println ("background-image:") ;
client.println ("- webkit-gradient(linear, left top, right top,") ;
client.println ("couleur-stop(.75, transparent),") ;
client.println ("couleur-stop(.75, rgba(255,255,255,.1)));") ;
client.println ("- webkit-fond-taille : 7px;") ;
client.println("}") ;
client.println("") ;
client.println (".Voir {") ;
client.println (« min-height : 100 %; ") ;
client.println ("overflow : auto; ») ;
client.println("}") ;
client.println("") ;
client.println (".header-wrapper {") ;
client.println ("hauteur : 44px;") ;
client.println ("font-weight : bold;") ;
client.println ("text-shadow : 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 ("couleur : #fff;") ;
client.println ("background-color: #8195af;") ;
client.println ("background-image:") ;
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 ("background-repeat : repeat-non;") ;
client.println ("background-position : haut, gauche, bas gauche;") ;
client.println ("- webkit-fond-taille : 21px 100 %, 100 % 22px;") ;
client.println ("- webkit-box-sizing : frontière-boîte;") ;
client.println("}") ;
client.println("") ;
client.println (".header-wrapper h1 {") ;
client.println ("text-align : center;") ;
client.println ("taille de la police : 20px;") ;
client.println ("line-height : 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 ("taille de la police : 17px;") ;
client.println ("line-height : 0,8;") ;
client.println ("font-weight : bold;") ;
client.println ("text-shadow : #fff 0 1px 0;") ;
client.println ("marge : 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 ("marge : 20px 10px 12px;") ;
client.println("}") ;
client.println("") ;
client.println ("table .group-wrapper {") ;
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 ("taille de la police : 17px;") ;
client.println ("line-height : 20px;") ;
client.println ("marge : 9px 0 20px;") ;
client.println ("border : 1px solid #a9abae;") ;
client.println ("padding : 11px 3px 3px de 12px;") ;
client.println ("marge-left : auto; ») ;
client.println ("marge-droit : auto; ») ;
client.println ("- moz-transform : scale(1);") ; Code pour Mozilla Firefox
client.println ("- moz-transform-origin: 0 0;") ;
client.println("}") ;
client.println("") ;
aspect de la LED verte (ON)
client.println (".green-cercle {") ;
client.println ("display : block;") ;
client.println ("hauteur : 23px;") ;
client.println ("width : 23px;") ;
client.println ("background-color: #0f0;") ;
client.println ("background-color : 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 ("marge-left : 1px;") ;
client.println ("background-image: - webkit-gradient (linéaire, 0 % 0 %, 0 % 90 %, de (rgba (46, 184, 0, 0,8)), à (RVBA (148, 255, 112,. 9))) ;
client.println ("border : 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("") ;
aspect noir (off) LED
client.println (".black-cercle {") ;
client.println ("display : block;") ;
client.println ("hauteur : 23px;") ;
client.println ("width : 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 ("marge-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("") ;
Cela va ajouter de l’éclat à la fois des LEDs
client.println (".glare {") ;
client.println (« position : relative; ») ;
client.println ("haut: 1;") ;
client.println ("left : 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 ("height : 1px;") ;
client.println ("largeur : 13px;") ;
client.println (« padding : 5px 0; ") ;
client.println ("background-color : rgba (200, 200, 200, 0,25);") ;
client.println ("background-image: - webkit-gradient (linéaire, 0 % 0 %, 0 % 95 %, de (rgba (255, 255, 255, 0,7)), à (rgba (255, 255, 255, 0)));") ;
client.println("}") ;
client.println("") ;
et enfin, c’est la fin des données de style et en-tête
client.println ("</style >") ;
client.println ("</head >") ;
maintenant imprimer la page elle-même
client.println ("< body >") ;
client.println ("< div class = \ « view\ » >") ;
client.println ("< div class = \" en-tête-wrapper\ ">") ;
client.println ("< h1 > Ethernet commutation </h1 >") ;
client.println ("</div >") ;
client.println ("< div class = \" groupe-wrapper\ ">") ;
client.println ("< h2 > interrupteur la sortie requise. </h2 >") ;
client.println() ;
C’est pour l’arduino pour construire la page à la volée.
sentHeader = true ;
}
char c = client.read() ;
Si (lecture & & c == "") {}
lecture = false ;
}
Serial.Print(c) ;
Si (c == '?') {
lecture = true ; trouvé le?, commencer à lire les infos
}
{if(Reading)}
Si (c == « H ») {sortie = 1;}
Si (c == « L ») {sortie = 0;}
Serial.Print(c) ; imprimer la valeur de c pour communication série
Serial.Print(outp) ;
Serial.Print('\n') ;
Switch (c) {}
affaire « 2 » :
Ajoutez le code ici pour déclencher sur 2
triggerPin (2, client, sortie) ;
rupture ;
affaire « 3 » :
Ajoutez le code ici pour déclencher sur 3
triggerPin (3, client, sortie) ;
rupture ;
affaire « 4 » :
Ajoutez le code ici pour déclencher sur 4
triggerPin (4, client, sortie) ;
rupture ;
affaire « 5 » :
Ajoutez le code ici pour déclencher sur 5
triggerPin (5, client, sortie) ;
printHtml(client) ;
rupture ;
affaire « 6 » :
Ajoutez le code ici pour déclencher sur 6
triggerPin (6, client, sortie) ;
rupture ;
affaire « 7 » :
Ajoutez le code ici pour déclencher sur 7
triggerPin (7, client, sortie) ;
rupture ;
affaire « 8 » :
Ajoutez le code ici pour déclencher sur 8
triggerPin (8, client, sortie) ;
rupture ;
cas « 9 » :
Ajoutez le code ici pour déclencher sur 9
triggerPin (9, client, sortie) ;
rupture ;
}
}
Si (c == « \n » & & currentLineIsBlank) {}
printLastCommandOnce = true ;
printButtonMenuOnce = true ;
triggerPin (777, client, sortie) ; Appel pour lire le menu saisie et impression. 777 sert ne pas à mettre à jour des sorties
rupture ;
}
}
}
Set Variables avant de repartir
printLastCommandOnce = false ;
printButtonMenuOnce = false ;
allOn = "" ;
allOff = "" ;
client.println ("\n < h3 align = \ « center\ » > & copie ; Auteur - Claudio Vella < br > Malte - octobre - 2012 < / h3 > ") ;
client.println ("</div > \n </div > \n </body > \n </html >") ;
Delay(1) ; donner le temps de navigateur web pour recevoir les données
client.Stop() ; fermer la connexion :
}
}
void triggerPin (int code pin, EthernetClient client, sortie int) {}
Mise en marche ou arrêt sorties, lit les sorties et les imprime les boutons
Définition de sorties
Si (broche! = 777) {}
if(outp == 1) {}
digitalWrite (tige, haute) ;
}
if(outp == 0) {}
digitalWrite (broches, faible) ;
}
}
Actualiser la lecture des résultats
readOutputStatuses() ;
Imprime les boutons
Si (printButtonMenuOnce == true) {}
printHtmlButtons(client) ;
printButtonMenuOnce = false ;
}
}
imprimer les boutons html pour la mise en marche/arrêt des canaux
void printHtmlButtons (EthernetClient client) {}
Commencez à créer la table html
client.println("") ;
client.println ("< p >") ;
client.println ("< FORM >") ;
client.println ("< table frontière = \ « 0\ » align = \ « center\ » >") ;
Lancer l’impression par bouton
pour (int var = outputLowest ; var < outputLowest + outputQuantity ; var ++) {}
commande Set pour tous marche/arrêt
allOn += « H » ;
allOn += var ;
allOff += « L » ;
allOff += var ;
Imprimer le début du rang
client.Print ("< tr > \n") ;
Imprime la ON boutons
client.Print ("< td >< INPUT TYPE = \ « button\ » VALUE = \" Switch ON - Pin ") ;
client.Print(var) ;
client.Print ("\" onClick=\"parent.location='/ ? H") ;
client.Print(var) ;
client.Print (« ' \ ">< /td > \n") ;
Imprime les boutons OFF
client.Print ("< td >< INPUT TYPE = \ « button\ » VALUE = \" Switch OFF - Pin ") ;
client.Print(var) ;
client.Print ("\" onClick=\"parent.location='/ ? « « « L ») ;
client.Print(var) ;
client.Print (« ' \ ">< /td > \n") ;
Imprimer la première partie des cercles ou les LEDs
Si (readInput [var] == true) {}
client.Print ("< td >< div class =' cercle vert ' >< div class = « lueur » >< / div >< / div >< /td > \n") ;
} else
{
client.Print ("< td >< div class =' noir-circle' >< div class = « lueur » >< / div >< / div >< /td > \n") ;
}
Impression de fin de ligne
client.Print ("< /tr > \n") ;
}
Imprime le ON tous les Pins bouton
client.Print ("\n < tr > < td >< INPUT TYPE = \ « button\ » VALUE = \" allumer toutes les broches") ;
client.Print ("\" onClick=\"parent.location='/?") ;
client.Print(allOn) ;
client.Print (« ' \ ">< /td > \n") ;
Imprime le OFF All Pins bouton
client.Print ("< td >< INPUT TYPE = \ « button\ » VALUE = \" éteins toutes les quilles ») ;
client.Print ("\" onClick=\"parent.location='/?") ;
client.Print(allOff) ;
client.Print (« ' \ ">< \n /td > < td >< /td > \n < /tr > \n") ;
Fermeture de la table et la forme
client.println ("< /table >") ;
client.println ("</font >") ;
client.println ("< /p >") ;
}
Lire les statuts de sortie
void readOutputStatuses() {}
pour (int var = outputLowest ; var < outputLowest + outputQuantity ; var ++) {}
readInput [var] = digitalRead(var) ;
Serial.Print(readInput[var]) ;
}
}