Advertisement
Villalba2006

POST_54

Nov 28th, 2016
8,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.15 KB | None | 0 0
  1. /*  TITULO: Control de un LED desde un servidor WEB con el Ethernet Shield W5100.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa vamos a controlar el encendido y apagado de un LED a través de internet, mediante
  14.     el Servidor WEB creado con el Ethernet Shield que conectamos a Arduino, que tenemos comunicado con
  15.     nuestro router WIFI.
  16.    
  17.    
  18.     ESQUEMA DE CONEXION
  19.    
  20.                                       +-----+
  21.          +----[PWR]-------------------| USB |--+
  22.          |                            +-----+  |
  23.          |         GND/RST2  [ ][ ]            |
  24.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |
  25.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  26.          |                             AREF[ ] |
  27.          |                              GND[ ] |
  28.          | [ ]N/C                    SCK/13[ ] |  
  29.          | [ ]IOREF                 MISO/12[ ] |  
  30.          | [ ]RST                   MOSI/11[ ]~|  
  31.          | [ ]3V3    +---+               10[ ]~|  
  32.          | [ ]5v    -| A |-               9[ ]~|  
  33.          | [ ]GND   -| R |-               8[ ] |   LED(+)
  34.          | [ ]GND   -| D |-                    |
  35.          | [ ]Vin   -| U |-               7[ ] |  
  36.          |          -| I |-               6[ ]~|  
  37.          | [ ]A0    -| N |-               5[ ]~|  
  38.          | [ ]A1    -| O |-               4[ ] |  
  39.          | [ ]A2     +---+           INT1/3[ ]~|  
  40.          | [ ]A3                     INT0/2[ ] |  
  41.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  42.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  43.          |            [ ] [ ] [ ]              |
  44.          |  UNO_R3    GND MOSI 5V  ____________/
  45.           \_______________________/
  46.  
  47.   NOTAS:
  48.  
  49.    - Cátodo(-) del LED (pata más corta) a GND a través de una R=220 omhs.
  50.    - Ethernet Shield colocada sobre Arduino UNO (Los pines coinciden al 100%).
  51.    - Ethernet Shield conectada al router WIFI mediante cable Ethernet standard (conector RJ45)
  52.    - Arduino UNO alimentado a través de una batería externa de Litio-ion de 12V/3000mAh (DC 12300)
  53. */
  54.  
  55.   // Librerías
  56.   #include <SPI.h>
  57.   #include <Ethernet.h>
  58.  
  59.   // Declaración de la direcciones MAC,IP,GATEWAY y SUBNET.
  60.   byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
  61.   // Dentro del cdm de Windows ponemos ipconfig y buscamos en adaptador de LAN inalámbrica
  62.   IPAddress ip(192,168,1,14); // 192.168.1.XX donde XX es una dirección que no esté utilizada
  63.   IPAddress gateway(192, 168, 1, 1);
  64.   IPAddress subnet(255, 255, 255, 0);
  65.    
  66.   // Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto
  67.   EthernetServer server(80);
  68.  
  69.   int LED = 8; // Pin digital para el LED
  70.  
  71.   String estado = "OFF"; // Estado del LED inicialmente "OFF"
  72.    
  73.   void setup()
  74.   {
  75.     Serial.begin(9600); // Comienzo de la comunicación serie
  76.    
  77.     // Inicializamos la comunicación Ethernet y el servidor
  78.     Ethernet.begin(mac, ip, gateway, subnet);
  79.     server.begin();
  80.     Serial.print("La IP del servidor local es:  ");
  81.     Serial.println(Ethernet.localIP()); // Nos devuelve la IP del Ethernet Shield
  82.    
  83.     pinMode(LED,OUTPUT); // Pin digital 8 como salida
  84.   }
  85.    
  86.   void loop()
  87.   {
  88.     EthernetClient client = server.available(); // Creamos un cliente Web
  89.     // Cuando detecte un cliente a través de una petición HTTP
  90.     if (client)
  91.     {
  92.       Serial.println(); // Salto de línea
  93.       Serial.println("Nuevo cliente");
  94.       Serial.println();
  95.       boolean currentLineIsBlank = true; // Una petición HTTP acaba con una línea en blanco
  96.       String cadena=""; // Creamos una cadena de caracteres vacía
  97.       while (client.connected())
  98.       {
  99.         if (client.available())
  100.         {
  101.           char c = client.read();// Leemos la petición HTTP carácter por carácter
  102.           Serial.write(c);// Visualizamos la petición HTTP por el Monitor Serial
  103.           cadena.concat(c);// Unimos el String 'cadena' con la petición HTTP (c).
  104.           // De esta manera convertimos la petición HTTP a un String
  105.    
  106.            // Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.
  107.            int posicion=cadena.indexOf("LED="); // Guardamos la posición de la instancia "LED=" a la variable 'posicion'
  108.    
  109.             if(cadena.substring(posicion)=="LED=ON") // Si en la posición 'posicion' hay "LED=ON"
  110.             {
  111.               digitalWrite(LED,HIGH);
  112.               estado="ON";
  113.             }
  114.             if(cadena.substring(posicion)=="LED=OFF") // Si en la posición 'posicion' hay "LED=OFF"
  115.             {
  116.               digitalWrite(LED,LOW);
  117.               estado="OFF";
  118.             }
  119.    
  120.           // Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo
  121.           // para enviar una respuesta
  122.           if (c == '\n' && currentLineIsBlank)
  123.           {
  124.               // Enviamos al cliente una respuesta HTTP
  125.               client.println("HTTP/1.1 200 OK");
  126.               client.println("Content-Type: text/html");
  127.               client.println();
  128.    
  129.               // Página web en formato HTML
  130.               client.println("<html>");
  131.               client.println("<head>");
  132.               client.println("</head>");
  133.               client.println("<body style='background-color: #40E0D0;'>");
  134.               client.println("<br/><br/>");
  135.               client.println("<h1 align='center'>LED controlado por Servidor Web con Arduino</h1>");
  136.               // Creamos los botones.
  137.               // Para enviar parámetros a través de HTML se utiliza el método URL encode.
  138.               // Los parámetros se envían a través del símbolo '?'
  139.               client.println("<div style='text-align:center;'>");
  140.               client.println("<button onClick=location.href='./?LED=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:85px;'>");
  141.               client.println("ON");
  142.               client.println("</button>");
  143.               client.println("<button onClick=location.href='./?LED=OFF\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:85px;'>");
  144.               client.println("OFF");
  145.               client.println("</button>");
  146.               client.println("<br/><br/>");
  147.               client.println("<b>ESTADO DEL LED = ");
  148.               client.print(estado);
  149.               client.println("</b><br/>");
  150.               client.println("</b></body>");
  151.               client.println("</html>");
  152.               break;
  153.           }
  154.           if (c == '\n')
  155.           {
  156.             currentLineIsBlank = true;
  157.           }
  158.           else if (c != '\r')
  159.           {
  160.             currentLineIsBlank = false;
  161.           }
  162.         }
  163.       }
  164.       // Dar tiempo al navegador para recibir los datos
  165.       delay(1);
  166.       client.stop();// Cierra la conexión
  167.     }
  168.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement