CLASE 06
Ethernet Shield
ETHERNET SHIELD

Modulo PoE
Permite obtener la energía para nuestro Arduino desde el mismo cable de Ehternet, sin necesidad de contar con una fuente externa o puerto USB.


Dirección MAC
La dirección MAC (Media Access Control) es un identificador de 48 bits (6 caracteres Hex) que se corresponde de forma biunívoca con un dispositivo de Red.
Se lo suele llamar dirección física, y es única para cada dispositivo.
De los 6 caracteres Hex que la componen, los 3 primeros son regulados por la IEEE, y los 3 últimos identifican al fabricante.
No se puede modificar, pero en Arduino como son placas para desarrollo, nos permite cambiar su valor.
Dirección IP
La dirección IP es una etiqueta numérica para identificar la interfaz de un dispositivo dentro de una red que utilice el protocolo IP (Internet Protocol).
Esta dirección puede variar por cambios en la red o porque el dispositivo encargado de asignarlas decida asignarle otra direccion IP (DHCP en un Router). Cuando las IP se asignan de esta forma, se dice que son dinámicas.
En cambios los sitios web, que necesitan que su IP sea siempre la misma para poder acceder a ellos, se dice que tienen IP estática o fija.
DNS
A los humanos nos resulta más sencillo recordar nombres que números. Por eso es que se puede hacer una asociación entre los identificadores IP y un nombre de dominio, a través de un DNS (Domain Name Server).
Por ejemplo, cuando hacemos una solicitud www.google.com el servidor de DNS resuelve el nombre de dominio (google.com) como su IP estática y es ahí a donde nos redirecciona.
Desde el simbolo de sistema hacer un ping a Google y ver cual es su IP
CABLE ETHERNET

Ya no se necesita que el cable sea cruzada, porque los nuevos dispositivos son auto MDI o MDI-X y resuelven ellos mismos la conexión
Servidor Web con ARDUINO
Servidor Web
Primero, necesitamos incluir las librerías de SPI y Ethernet, que son las que nos van a resolver la comunicación y el manejo del protocolo IP. Todo esto, a través del chipset Wiznet 5100 en el shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 80);
EthernetServer server(80);
Luego definimos nuestra MAC, IP y puerto de comunicación (Algunos shield traen su MAC en un sticker):
#include <SPI.h>
#include <Ethernet.h>
Servidor Web
Luego inicializamos las librerías de Ethernet, y damos arranque a nuestro servidor:
Haciendole un ping, ya vamos a tener una respuesta
Ethernet.begin(mac, ip); // Inicializamos dispositivo Ethernet
server.begin(); // A la espera de clientes
Servir una Pagina Web
HTML
Es el lenguaje en el que se escriben las páginas web. Su estructura básica es:
<! DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
Pagina Web Simple
<! DOCTYPE html>
<html>
<head>
<title>Pagina de Arduino</title>
</head>
<body>
<h1>Bienvenido a Arduino Ethernet</h1>
<p>Esta pagina web esta siendo servida por el Ethernet Shield</p>
</body>
</html>
Pagina Web Simple
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
Pagina Web Simple
// send web page
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>Pagina de Arduino</title>");
client.println("</head>");
client.println("<body>");
client.println("<h1>Bienvenido a Arduino Ethernet</h1>");
client.println("<p>Esta pagina web esta siendo servida por el Ethernet Shield</p>");
client.println("</body>");
client.println("</html>");
Refresco Automatico
En la respuesta le decimos que se auto-refresque cada X segundos.
client.println("Refresh: 5");
Por ejemplo, podemos mostrar el valor de una entrada Analógica.
int sensorReading = analogRead(0);
client.print("En A0 leímos:");
client.print(sensorReading);
client.println("<a href=\"/?ledON\"\">Encender LED</a>");
client.println("<a href=\"/?ledOFF\"\">Apagar LED</a>");
Manejar un LED
Agregamos los controles a la pagina web
if (readString.length() < 100) {
readString += c;
}
Leemos la HTTP Request (luego del client.read())
if (readString.indexOf("?ledON") >0){
digitalWrite(led, HIGH);
}
if (readString.indexOf("?ledOFF") >0){
digitalWrite(led, LOW);
}
readString="";
Procesamos la Request (luego del client.stop())
http://randomnerdtutorials.com/arduino-webserver-with-an-arduino-ethernet-shield/
client.println("<link rel='stylesheet' type='text/css'
href='http://randomnerdtutorials.com/ethernetcss.css' />");
Estilizar
Para estilizar la pagina, podemos agregar un codigo
CSS externo:
Gracias!
No dejen de consultar cualquier duda que surja
sebasira@gmail.com
Arduino - Clase 06
By Ing. Sebastian M. Irazabal
Arduino - Clase 06
- 651