Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Control de un LED desde un servidor WEB con el Ethernet Shield W5100.
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: marianodc83@gmail.com
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa vamos a controlar el encendido y apagado de un LED a través de internet, mediante
- el Servidor WEB creado con el Ethernet Shield que conectamos a Arduino, que tenemos comunicado con
- nuestro router WIFI.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
- | 5V/MISO2 [ ][ ] A4/SDA[ ] |
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] |
- | [ ]IOREF MISO/12[ ] |
- | [ ]RST MOSI/11[ ]~|
- | [ ]3V3 +---+ 10[ ]~|
- | [ ]5v -| A |- 9[ ]~|
- | [ ]GND -| R |- 8[ ] | LED(+)
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] |
- | -| I |- 6[ ]~|
- | [ ]A0 -| N |- 5[ ]~|
- | [ ]A1 -| O |- 4[ ] |
- | [ ]A2 +---+ INT1/3[ ]~|
- | [ ]A3 INT0/2[ ] |
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Cátodo(-) del LED (pata más corta) a GND a través de una R=220 omhs.
- - Ethernet Shield colocada sobre Arduino UNO (Los pines coinciden al 100%).
- - Ethernet Shield conectada al router WIFI mediante cable Ethernet standard (conector RJ45)
- - Arduino UNO alimentado a través de una batería externa de Litio-ion de 12V/3000mAh (DC 12300)
- */
- // Librerías
- #include <SPI.h>
- #include <Ethernet.h>
- // Declaración de la direcciones MAC,IP,GATEWAY y SUBNET.
- byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
- // Dentro del cdm de Windows ponemos ipconfig y buscamos en adaptador de LAN inalámbrica
- IPAddress ip(192,168,1,14); // 192.168.1.XX donde XX es una dirección que no esté utilizada
- IPAddress gateway(192, 168, 1, 1);
- IPAddress subnet(255, 255, 255, 0);
- // Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto
- EthernetServer server(80);
- int LED = 8; // Pin digital para el LED
- String estado = "OFF"; // Estado del LED inicialmente "OFF"
- void setup()
- {
- Serial.begin(9600); // Comienzo de la comunicación serie
- // Inicializamos la comunicación Ethernet y el servidor
- Ethernet.begin(mac, ip, gateway, subnet);
- server.begin();
- Serial.print("La IP del servidor local es: ");
- Serial.println(Ethernet.localIP()); // Nos devuelve la IP del Ethernet Shield
- pinMode(LED,OUTPUT); // Pin digital 8 como salida
- }
- void loop()
- {
- EthernetClient client = server.available(); // Creamos un cliente Web
- // Cuando detecte un cliente a través de una petición HTTP
- if (client)
- {
- Serial.println(); // Salto de línea
- Serial.println("Nuevo cliente");
- Serial.println();
- boolean currentLineIsBlank = true; // Una petición HTTP acaba con una línea en blanco
- String cadena=""; // Creamos una cadena de caracteres vacía
- while (client.connected())
- {
- if (client.available())
- {
- char c = client.read();// Leemos la petición HTTP carácter por carácter
- Serial.write(c);// Visualizamos la petición HTTP por el Monitor Serial
- cadena.concat(c);// Unimos el String 'cadena' con la petición HTTP (c).
- // De esta manera convertimos la petición HTTP a un String
- // Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.
- int posicion=cadena.indexOf("LED="); // Guardamos la posición de la instancia "LED=" a la variable 'posicion'
- if(cadena.substring(posicion)=="LED=ON") // Si en la posición 'posicion' hay "LED=ON"
- {
- digitalWrite(LED,HIGH);
- estado="ON";
- }
- if(cadena.substring(posicion)=="LED=OFF") // Si en la posición 'posicion' hay "LED=OFF"
- {
- digitalWrite(LED,LOW);
- estado="OFF";
- }
- // Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo
- // para enviar una respuesta
- if (c == '\n' && currentLineIsBlank)
- {
- // Enviamos al cliente una respuesta HTTP
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println();
- // Página web en formato HTML
- client.println("<html>");
- client.println("<head>");
- client.println("</head>");
- client.println("<body style='background-color: #40E0D0;'>");
- client.println("<br/><br/>");
- client.println("<h1 align='center'>LED controlado por Servidor Web con Arduino</h1>");
- // Creamos los botones.
- // Para enviar parámetros a través de HTML se utiliza el método URL encode.
- // Los parámetros se envían a través del símbolo '?'
- client.println("<div style='text-align:center;'>");
- client.println("<button onClick=location.href='./?LED=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:85px;'>");
- client.println("ON");
- client.println("</button>");
- client.println("<button onClick=location.href='./?LED=OFF\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:85px;'>");
- client.println("OFF");
- client.println("</button>");
- client.println("<br/><br/>");
- client.println("<b>ESTADO DEL LED = ");
- client.print(estado);
- client.println("</b><br/>");
- client.println("</b></body>");
- client.println("</html>");
- break;
- }
- if (c == '\n')
- {
- currentLineIsBlank = true;
- }
- else if (c != '\r')
- {
- currentLineIsBlank = false;
- }
- }
- }
- // Dar tiempo al navegador para recibir los datos
- delay(1);
- client.stop();// Cierra la conexión
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement