//Primer programa de control ensayado con exito 28-11-17 /* 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 #include // 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,140); // 192.168.1.XX donde XX es una dirección que no esté utilizada //En Router ProfesorDJB se reservo esta IP a esa MAC 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(""); client.println(""); client.println(""); client.println(""); client.println("

"); client.println("

LED controlado por Servidor Web con Arduino

"); // 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("
"); client.println(""); client.println(""); client.println("

"); client.println("ESTADO DEL LED = "); client.print(estado); client.println("
"); client.println(""); client.println(""); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } // Dar tiempo al navegador para recibir los datos delay(10); client.stop();// Cierra la conexión } }