Paso 2: Ethernet Switching - con Arduino - programa
//
Intro:
Esto será swich encendido y apagado a través de salidas de su dispositivo móvil.
Sin imágenes ni enlaces a imágenes. Uso de CSS3 y HTML5.
Aunque funciona con otro navegador web, sugerimos Safari para la mejor experiencia.
//
Versión: Web servidor Ethernet Switching versión 3.05
Autor: Claudio Vella - Malta
Inicial código: http://bildr.org/2011/06/arduino-ethernet-pin-control/
Hizo muchos comentarios para principiantes.
ARDUINO 1.0 + SÓLO
#include < Ethernet.h >
#include < SPI.h >
////////////////////////////////////////////////////////////////////////
CONFIGURAR
////////////////////////////////////////////////////////////////////////
Configuración manual de IP
byte ip [] = {192, 168, 1, 177}; Configuración manual sólo
puerta de entrada de bytes [] = {192, 168, 1, 254}; Configuración manual sólo
subred de bytes [] = {255, 255, 255, 0}; Configuración manual sólo
Si necesita cambiar la dirección MAC (muy raro)
mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
Puerto Ethernet
EthernetServer server = EthernetServer(80); Puerto de html predeterminado 80
El número de salidas que va a cambiar.
int outputQuantity = 8; Cuando se añade a outputLowest resultado no debe exceder 10
El pin de salida más bajo de que estamos empezando
int outputLowest = 2; Debe estar entre 2 a 9
////////////////////////////////////////////////////////////////////////
Declaración de variables
int salida = 0;
Boolean printLastCommandOnce = false;
Boolean printButtonMenuOnce = false;
Boolean initialPrint = true;
Alón de cadena = "";
AllOff de cadena = "";
lectura boolean = false;
Boolean readInput [10]; Crear un array booleano para la cantidad máxima.
Inicio del programa
void setup() {}
Serial.Begin(9600);
Pernos de 10,11,12 y 13 son utilizados por el shield ethernet
Juego pines como salidas
para (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {}
pinMode (var, salida);
}
Configurar la dirección IP. Comente el que no es necesario.
Ethernet.Begin(Mac); Dirección DHCP. (Dirección se imprimirá a la serie).
Ethernet.Begin (mac, ip, puerta de enlace, subred); para la configuración manual. (Dirección es el configurado por encima.)
Server.Begin();
Serial.println(Ethernet.localIP());
}
void loop() {}
escuchar clientes entrantes y procesar las solicitudes.
checkForClient();
}
void checkForClient() {}
Cliente EthernetClient = server.available();
Si {} (cliente)
una solicitud http termina con una línea en blanco
Boolean currentLineIsBlank = true;
Boolean sentHeader = false;
mientras (client.connected()) {}
Si (client.available()) {}
{if(!sentHeader)}
Enviar un encabezado de respuesta http estándar
Client.println ("HTTP/1.1 200 OK");
Client.println ("tipo de contenido: texto/html");
Client.println ("conexión: cerrar");
Client.println();
Client.println ("<! HTML de DOCTYPE > ");
Client.println ("< head >");
Añadir el título de la página
Client.println ("< title > conmutación de Ethernet </título >");
Client.println ("< nombre de meta = \"description\"content = \"Ethernet Switching\"/ >");
Añadir una etiqueta meta de actualización, por lo que el navegador tira otra vez cada 5 segundos:
Client.println ("< meta http-equiv = \"refresh\"content = \" 10; url = / \ ">");
Añadir otra configuración de navegador
Client.println ("< nombre de meta = \" apple-móvil-web-app-capable\ "contenido = \"sí \">");
Client.println ("< meta name=\"apple-mobile-web-app-status-bar-style\ "contenido = \"default\">");
Client.println ("< nombre de meta = \"viewport\"contenido = \" width = anchura de dispositivo, usuario escalable = no\ "/ >");
insertar los datos de estilos, generalmente encontrado en archivos CSS.
Client.println ("< estilo tipo = \" texto/css\ ">");
Client.println("");
Esto ajustará cómo la página se verá gráficamente
Client.println ("html {altura: 100%;}");
Client.println ("cuerpo {");
Client.println ("altura: 100%;");
Client.println ("margen: 0;");
Client.println ("font-family: helvetica, sans-serif;");
Client.println ("- webkit-texto-size-adjust: none;");
Client.println("}");
Client.println("");
Client.println ("cuerpo {");
Client.println ("- webkit-fondo-tamaño: 100% 21px;");
Client.println ("color de fondo: #c5ccd3;");
Client.println ("imagen de fondo:");
Client.println ("- webkit-gradient(linear, left top, right top,");
Client.println ("color-stop(.75, transparent),");
Client.println ("color-stop(.75, rgba(255,255,255,.1)));");
Client.println ("- webkit-fondo-tamaño: 7px;");
Client.println("}");
Client.println("");
Client.println (".ver {");
Client.println ("min-height: 100%;");
Client.println ("overflow: auto;");
Client.println("}");
Client.println("");
Client.println (".header-wrapper {");
Client.println ("altura: 44px;");
Client.println ("font-weight: bold;");
Client.println ("sombra de texto: rgba(0,0,0,0.7) - 0 1px 0;");
Client.println ("frontera-top: 1px solid rgba(255,255,255,0.6);");
Client.println ("frontera-bottom: 1px solid rgba(0,0,0,0.6);");
Client.println ("color: #fff;");
Client.println ("color de fondo: #8195af;");
Client.println ("imagen de fondo:");
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 ("fondo-repeat: no-repeat;");
Client.println ("fondo-posición: parte superior izquierda, inferior izquierda;");
Client.println ("- webkit-fondo-tamaño: 21px de 100%, 100% 22px;");
Client.println ("- webkit-box-sizing: frontera-caja;");
Client.println("}");
Client.println("");
Client.println (".header-wrapper h1 {");
Client.println ("texto-alinee: Centro;");
Client.println ("font-size: 20px;");
Client.println ("line-height: 44px;");
Client.println ("margen: 0;");
Client.println("}");
Client.println("");
Client.println (".group-wrapper {");
Client.println ("margen: 9px;");
Client.println("}");
Client.println("");
Client.println (".group-wrapper h2 {");
Client.println ("color: #4c566c;");
Client.println ("tamaño de fuente: 17px;");
Client.println ("line-height: 0.8;");
Client.println ("font-weight: bold;");
Client.println ("texto sombra: #fff 0 1px 0;");
Client.println ("margen: 20px 10px 12px;");
Client.println("}");
Client.println("");
Client.println ("h3 .group-wrapper {");
Client.println ("color: #4c566c;");
Client.println ("font-size: 12px;");
Client.println ("line-height: 1;");
Client.println ("font-weight: bold;");
Client.println ("texto sombra: #fff 0 1px 0;");
Client.println ("margen: 20px 10px 12px;");
Client.println("}");
Client.println("");
Client.println ("tabla .group-wrapper {");
Client.println ("fondo-color: #fff;");
Client.println ("- webkit-border-radius: 10px;");
Client.println ("- moz-border-radius: 10px;");
Client.println ("- khtml-border-radius: 10px;");
Client.println ("frontera-radius: 10px;");
Client.println ("tamaño de fuente: 17px;");
Client.println ("line-height: 20px;");
Client.println ("margen: 9px 20px 0;");
Client.println ("frontera: 1px solid #a9abae;");
Client.println ("padding: 11px 3px 3px de 12px;");
Client.println ("margen-izquierdo: auto;");
Client.println ("margen-derecho: auto;");
Client.println ("- moz-transform: scale(1);"); Código para Mozilla Firefox
Client.println ("- moz-transform-origin: 0 0;");
Client.println("}");
Client.println("");
Cómo se verá el LED verde (en)
Client.println ("círculo de .green {");
Client.println ("display: block;");
Client.println ("altura: 23px;");
Client.println ("ancho: 23px;");
Client.println ("color de fondo: #0f0;");
Client.println ("color de fondo: 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 ("radio de frontera: 11px;");
Client.println ("margen-izquierdo: 1px;");
Client.println ("imagen de fondo: - webkit-gradiente (lineal, 0% 0%, 0% 90%, de (rgba (46, 184, 0, 0, 8)), a (rgba (148, 255, 112,. 9)));
Client.println ("frontera: 2px solid #ccc;");
Client.println ("- webkit-box-shadow: rgba (11, 140, 27, 0.5) 0px 10px 16px;");
Client.println ("- moz-box-shadow: 16px de 10px 0px rgba (11, 140, 27, 0.5); / * FF 3.5 + * / ");
Client.println ("box-shadow: 16px de 10px 0px rgba (11, 140, 27, 0.5); / * FF 3.5 + * / ");
Client.println("}");
Client.println("");
Cómo se verá el negro (off) LED
Client.println ("círculo de .black {");
Client.println ("display: block;");
Client.println ("altura: 23px;");
Client.println ("ancho: 23px;");
Client.println ("color de fondo: #040;");
Client.println ("- moz-border-radius: 11px;");
Client.println ("- webkit-border-radius: 11px;");
Client.println ("- khtml-border-radius: 11px;");
Client.println ("radio de frontera: 11px;");
Client.println ("margen-izquierdo: 1px;");
Client.println ("- webkit-box-shadow: rgba (11, 140, 27, 0.5) 0px 10px 16px;");
Client.println ("- moz-box-shadow: 16px de 10px 0px rgba (11, 140, 27, 0.5); / * FF 3.5 + * / ");
Client.println ("box-shadow: 16px de 10px 0px rgba (11, 140, 27, 0.5); / * FF 3.5 + * / ");
Client.println("}");
Client.println("");
Esto agregará el deslumbramiento tanto de los LEDs
Client.println (".glare {");
Client.println ("posición: pariente;");
Client.println ("parte superior: 1;");
Client.println ("izquierda: 5px;");
Client.println ("- webkit-border-radius: 10px;");
Client.println ("- moz-border-radius: 10px;");
Client.println ("- khtml-border-radius: 10px;");
Client.println ("frontera-radius: 10px;");
Client.println ("altura: 1px;");
Client.println ("ancho: 13px;");
Client.println ("padding: 5px 0;");
Client.println ("color de fondo: rgba (200, 200, 200, 0. 25);");
Client.println ("imagen de fondo: - webkit-gradiente (lineal, 0% 0%, 0% 95%, de (rgba (255, 255, 255, 0.7)), a (rgba (255, 255, 255, 0)));");
Client.println("}");
Client.println("");
y finalmente este es el final de los datos de estilo y cabecera
Client.println ("</estilo >");
Client.println ("< /HEAD >");
ahora la propia página de la impresión
Client.println ("< body >");
Client.println ("< div clase = \"view\">");
Client.println ("< div clase = \" jefe wrapper\ ">");
Client.println ("conmutación de Ethernet < h1 > </h1 >");
Client.println ("</div >");
Client.println ("< div clase = \" grupo wrapper\ ">");
Client.println ("< h2 > interruptor la salida requerida. </h2 >");
Client.println();
Esto es para el arduino para construir la página sobre la marcha.
sentHeader = true;
}
char c = client.read();
Si (lectura & & c == ' ') {}
lectura = false;
}
Serial.Print(c);
Si (c == '?') {
lectura = true; encontrado el?, comience leyendo la información
}
{if(Reading)}
Si (c == 'H') {outp = 1;}
Si (c == 'L') {salida = 0;}
Serial.Print(c); imprimir el valor de c para comunicaciones en serie
Serial.Print(OUTP);
Serial.Print('\n');
interruptor (c) {}
caso '2':
agregar código aquí para activar 2
triggerPin (2, cliente, salida);
rotura;
Case '3':
agregar código aquí para activar el 3
triggerPin (3, cliente, salida);
rotura;
caso '4':
agregar código aquí para activar el 4
triggerPin (4, cliente, salida);
rotura;
caso '5':
agregar código aquí para activar el 5
triggerPin (5, cliente, salida);
printHtml(client);
rotura;
caso '6':
agregar código aquí para activar 6
triggerPin (6, cliente, salida);
rotura;
caso '7':
agregar código aquí para activar el 7
triggerPin (7, cliente, salida);
rotura;
caso '8':
agregar código aquí para activar el 8
triggerPin (8, cliente, salida);
rotura;
caso '9':
agregar código aquí para activar el 9
triggerPin (9, de cliente, salida);
rotura;
}
}
Si (c == '\n' & & currentLineIsBlank) {}
printLastCommandOnce = true;
printButtonMenuOnce = true;
triggerPin (777, cliente, salida); Llamada para leer el menú de entrada y de la impresión. 777 se utiliza no para actualizar cualquier salidas
rotura;
}
}
}
Conjunto de Variables antes de salir
printLastCommandOnce = false;
printButtonMenuOnce = false;
allOn = "";
allOff = "";
Client.println ("\n < h3 align = \"técnico\"> & copia; Autor - Claudio Vella < br > Malta - octubre - 2012 < / h3 > ");
Client.println ("</div > \n </div > \n < /body > \n </html >");
Delay(1); darle tiempo al navegador de web para recibir los datos
Client.STOP(); cerrar la conexión:
}
}
void triggerPin (int pin, EthernetClient cliente, int outp) {}
Cambiar o desactivar salidas, Lee los resultados e imprime los botones
Configuración de salidas
Si (pin! = 777) {}
if(OUTP == 1) {}
digitalWrite (pin, HIGH);
}
if(OUTP == 0) {}
digitalWrite (pin, LOW);
}
}
Actualizar la lectura de los resultados
readOutputStatuses();
Imprime los botones
Si (printButtonMenuOnce == true) {}
printHtmlButtons(client);
printButtonMenuOnce = false;
}
}
los botones de html para activar/desactivar los canales de impresión
void printHtmlButtons (EthernetClient cliente) {}
Empezar a crear la tabla html
Client.println("");
Client.println ("< p >");
Client.println ("< FORM >");
Client.println ("< borde tabla = \"0\"align = \"técnico\">");
Comience a imprimir botón por botón
para (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {}
comando SET para todos encendido
allOn += "H";
allOn += var;
allOff += "L";
allOff += var;
Principio de fila de impresión
Client.Print ("< tr > \n");
Botones grabados en
Client.Print ("< td >< INPUT TYPE = \"button\"valor = \" interruptor de encendido - Pin ");
Client.Print(var);
¿Client.Print ("\" onClick=\"parent.location='/? H");
Client.Print(var);
Client.Print («' \ ">< /td > \n");
Imprime los botones de apagado
Client.Print ("< td >< INPUT TYPE = \"button\"valor = \" apagado - Pin ");
Client.Print(var);
¿Client.Print ("\" onClick=\"parent.location='/? L");
Client.Print(var);
Client.Print («' \ ">< /td > \n");
Imprimir la primera parte de los círculos o los LEDs
Si (readInput [var] == true) {}
Client.Print ("< td >< div clase =' círculo verde ' >< div clase = 'fulgor' >< / div >< / div >< /td > \n");
} else
{
Client.Print ("< td >< div clase =" círculo negro ' >< div clase = 'fulgor' >< / div >< / div >< /td > \n ");
}
Impresión final de fila
Client.Print ("< /tr > \n");
}
Imprime el botón pines
Client.Print ("\n < tr > < td >< INPUT TYPE = \"button\"valor = \" encender los pernos");
Client.Print ("\" onClick=\"parent.location='/"?);
Client.Print(allOn);
Client.Print («' \ ">< /td > \n");
Imprime todo apagado botón de los pernos
Client.Print ("< td >< INPUT TYPE = \"button\"valor = \" apagar todos los pines");
Client.Print ("\" onClick=\"parent.location='/"?);
Client.Print(allOff);
Client.Print («' \ ">< \n /td > < td >< /td > < /tr > de \n \n");
Cierre la tabla y la forma
Client.println ("</table >");
Client.println ("</FORM >");
Client.println ("< /p >");
}
Lectura de los Estados de salida
void readOutputStatuses() {}
para (int var = outputLowest; var < outputLowest + outputQuantity; var ++) {}
readInput [var] = digitalRead(var);
Serial.Print(readInput[var]);
}
}