You are on page 1of 29

Estás aquí: Inicio >> Tutoriales de Arduino >> Arduino Ethernet Shield – Controla Tu Casa Por

Internet

Arduino Ethernet Shield – Controla Tu Casa Por Internet

16 NOVIEMBRE, 2014 POR ENRIQUE355 COMENTARIOS

… ¿Y si te dijera que con Arduino Ethernet Shield puedes crearte tu propio web server y utilizarlo
para domotizar tu casa? Ya sea para controlar tu vivienda o cualquier otro elemento a través de
Internet, este shield de Arduino es una gran elección.

En este post te voy a enseñar todos los pasos que debes seguir para configurar tu Arduino
Ethernet Shield y crear tu propia página web con la que podrás controlar tu casa desde cualquier
parte del mundo. Además incluiré un código pensado para que puedas pegarlo fácilmente a tu
sketch de Arduino y adaptarlo a tu proyecto con unos pocos cambios.

Haz click para ir a lo que más te interese.

 1 Tutorial Arduino Ethernet


o 1.1 El Problema de las IP

o 1.2 Conexión Arduino Ethernet Shield – Router

 1.2.1 Acceder a tu Router

 1.2.2 Configurar Área Local

o 1.3 Puertos del Router

o 1.4 Conexión Router – Internet

 1.4.1 Contratar Una IP Estática

 1.4.2 Dejar Tu IP Dinámica

 1.4.3 Utilizar Un Servicio de DDNS

 1.4.4 Actualizar DDNS Con Arduino

o 1.5 Código

o 1.6 Material Necesario

o 1.7 Información Adicional

Tutorial Arduino Ethernet

Como te puedes imaginar, para este proyecto van a ser necesarios algunos conocimientos
de HTML y configuración de redes, así como la librería Ethernet de Arduino. No te preocupes por
eso porque te lo voy a explicar todo paso a paso para que te resulte lo más simple posible.

El Problema de las IP

Cuando conectas tu Arduino Ethernet Shield con tu Router, éste le asigna una dirección IP, es
decir, una identificación que le permite diferenciar a tu Arduino del resto de ordenadores y demás
elementos que tengas conectados a la red local de tu casa, así que esa dirección que va a utilizar
tu Arduino tienes que introducirla en tu sketch. El problema es que esa IP es cambiante y cada vez
que su valor cambie, tu sistema dejará de funcionar.

Del mismo modo, la dirección de tu Router cambia salvo que tengas contratado un sistema con IP
estática. Esto no es lo más habitual ya que estos sistemas son más caros y a la compañía que “te
proporciona el Internet” le interesa que tú tengas una IP dinámica.

Como lo que tú quieres es implementar tu sistema sobre tu Arduino Ethernet Shield, poder
controlarlo desde cualquier parte del mundo (y no solo desde tu red de área local) y que este siga
funcionando sin tener que modificar tu código (sketch) con independencia de lo que pase en tu
red. Tienes que
amenazar de muerte a tu proveedor de Internet solucionar varios problemas:

1. Conseguir que conexión IP entre tu Arduino Ethernet Shield y tu Router (área local) no
cambie.
2. Abrir los puertos de tu Router para permitir que entre y salga información.

3. Conseguir que la conexión entre tu Router e Internet no cambie (para que puedas
acceder siempre desde la misma dirección).

Si te ha entrado el miedo en el cuerpo por aquello de “romper Internet”, tranquilo. Lo primero que
debes saber es que desde la era de Internet todos los que somos un poco curiosos y hemos
encontrado algo en Google que hemos intentado probar, hemos causado (ya sea por
desconocimiento o intención) tantos problemas que ya todos los sistemas están hechos “anti-
cafres”. Lo segundo es que, como siempre te digo, Arduino está pensado para ser fácil (y esto no
iba a ser menos). Y lo tercero es que desde EducaChip estamos para ayudarte. Vamos a ello.

Conexión Arduino Ethernet Shield – Router

Te voy a decir algo que no te va a gustar: Cada Router se configura de una manera distinta. Como
supongo te estarás imaginando, eso quiere decir que en este apartado no puedo ayudarte mucho.
No desesperes, aunque todos son distintos, todos son similares y con un poco de paciencia no te
costará realizar este paso.

Acceder a tu Router

Lo primero que debes hacer es acceder a tu Router desde tu navegador favorito. Para ello
necesitas saber cuál es su puerta de enlace (o gateway en inglés). Te voy a poner cómo se haría
desde Windows. Si estás utilizando un sistema operativo diferente, el funcionamiento es similar.
En caso de que tengas dudas puedes dejar un comentario al final de este post o buscarlo en
Google (no te costará encontrarlo).

1. Pulsa el botón de inicio.

2. En la barra de búsquedas, escribe ejecutar y pulsa la tecla intro.

3. En la ventana que te acaba de aparecer escribe “cmd” y vuelve a pulsar intro.

4. Te habrá salido otra ventana de fondo negro. Escribe en ella “ipconfig”.

5. Dentro del texto que se acaba de escribir en la ventana hay una sección llamada
Adaptador de Ethernet (o similar). Busca en ella la “puerta de enlace predeterminada” o
“gateway” y apunta la dirección asociada (suele ser algo del tipo 192.168.1.1).
6.

Ahora que ya tienes la dirección con la que acceder a tu Router, basta con que la escribas en tu
navegador (en la zona donde normalmente escribes las URL). Seguramente te pedirá una
contraseña. Si es la primera vez que accedes a tu Router será la contraseña por defecto. Suele ser
algo tipo:

 usuario: admin

 contraseña: 1234

Si tienes no eres capaz de encontrar tu contraseña, aquí te dejo un enlace con contraseñas por
defecto de Routers.

Configurar Área Local


Ahora que estás dentro de tu Router, debes decirle que siempre le de la misma IP a tu Arduino
Ethernet Shield.

Por defecto, la mayor parte de los Routers utilizan un sistema denominado DHCP según el cuál van
asignando IP locales a todos los elementos que se conectan a la red. Cada cierto tiempo esas IP
cambian (también pueden cambiar si conectas y desconectas algún elemento) por lo que si inicias
el programa Arduino Ethernet Shield sin modificar esto, funcionará al principio, pero cuando esa
dirección cambie se perderá la comunicación y tendrás que modificar tu sketch. Para que esto no
suceda tienes que decirle al protocolo DHCP que te parece fantástico que juguetee con las IP pero
que no toque la de tu Arduino.

Todas las máquinas que conectas a tu red tienen un número identificativo denominado MAC que,
de cara a la red, es como un DNI o pasaporte. El MAC de tu Arduino puedes fijarlo tú (basta con
que no haya varias máquinas con el mismo MAC) y por defecto es:

byte mac[] = {

0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

Salvo que tengas especial interés por utilizar un MAC concreto puedes utilizar este.

Una vez tienes tu MAC, debes decirle a tu Router que a ese MAC le de siempre la misma IP. Los
pasos son los siguientes:
 Accede a las propiedades de tu DHCP a través de los menús de tu Router, es decir, busca
por los menús la palabra DHCP o DHCP Settings (suele estar en: Configuración >> LAN >>
DHCP).

 En este menú podrás ver cosas interesantes como el rango de IP que asigna tu DHCP
(puede que te venga como “IP Pool Range” o como direcciones IP inicial y final). Lo que
debes buscar es algo tipo “Reserva de direcciones IP” o “MAC-Base Assignment” que es
donde vas a enlazar la MAC de tu Arduino Ethernet Shield con una IP concreta.
 Abre el menú de para asignar la IP. Seguramente te aparecerá un recuadro para enlazar un
MAC a una IP. Rellena los datos utilizando el MAC de tu Arduino Ethernet Shield y la IP
que desees (por ejemplo 192.168.1.177) y asegúrate de guardar los cambios.

Si has conseguido llegar a este punto, mi más sincera enhorabuena. Entiendo que todos estos
datos son realmente abstractos y puede resultar complicado para alguien sin experiencia. En caso
de que estés teniendo algún tipo de problema, aquí estamos para ayudarte, así que relájate, toma
aire y deja tu comentario. Intentaremos ayudarte.

Puertos del Router

Si has completado los pasos anteriores no deberías tener ningún problema en crear tu propia red
de área local, es decir, si el proyecto que vas a implementar con tu Arduino Ethernet Shield
únicamente necesita conexión entre los elementos de tu casa (del Router hacia dentro) no
necesitas tocar nada más. Ahora bien, si tu idea es utilizar tu sistema desde cualquier parte del
mundo debes permitir el acceso a tu sistema.

Gracias a que en el paso anterior conseguiste darle una IP fija a tu Arduino Ethernet Shield, ahora
será muy fácil abrir únicamente el puerto que va a utilizar tu shield de Arduino.

De nuevo todo esto lo tienes que hacer desde tu Router. Los pasos a seguir son los siguientes
(todo esto te sonará si, en su día, ya abriste los puertos del eMule):

 Debes buscar en los menús de tu Router algo tipo NAT, Virtual Servers o Port Forwarding.
El nombre varía en función del Router pero vas buscando modificar los puertos así que
puedes guiarte por la palabra “Port”. Si no terminas de encontrar la manera de llegar a ese
menú, no te costará mucho dar con él con una rápida búsqueda en Google (poniendo el
modelo de tu Router).
 Una vez estés en menú de puertos de tu Router, activa la opción de Port Forwarding y,
para la IP local que le diste a tu Arduino Ethernet Shield, abre un puerto (típicamente el
puerto 80 aunque puedes abrir otros como el puerto 5400). De nuevo no te olvides de
guardar los cambios.

Conexión Router – Internet

Hasta ahora has conseguido que tu Router siempre le de la misma IP a tu Arduino Ethernet
Shield y que este tenga acceso a Internet. En realidad ya está todo hecho. El único problema es
que a la hora de acceder desde fuera de tu red local a tu shield de Arduino desconoces qué
dirección tiene, es decir, no sabes qué IP tiene tu Router. Para solucionar este problema tienes
varias opciones:

Contratar Una IP Estática

Como ya te he dicho antes, si contratas una IP estática no tendrías que preocuparte por saber en
cada momento cuál es la dirección de tu Arduino Ethernet Shield. Puedes hablar con tu proveedor
de Internet y, por un poco más de dinero al mes (depende del proveedor pero no suele ser
excesivamente caro, entorno a 1€), bastaría con que recordases esa dirección para acceder en
cualquier momento y desde cualquier sitio a tu sistema domótico.

Dejar Tu IP Dinámica

Si acostumbras a mantener tu Router siempre encendido debes saber que tu IP no cambia cada
cinco minutos. De nuevo, depende del proveedor. Normalmente cambiará una vez por semana
por lo que si estás frecuentemente en casa y consultas tu IP con regularidad (puedes ver cuál es tu
IP pública en este link), puedes ahorrarte dinero y esfuerzo y utilizar este método. Ten en cuenta,
eso sí, que si tu IP cambia y no estás en casa para consultarla, no podrás acceder al sistema.

Utilizar Un Servicio de DDNS


Este es mi método favorito. El sistema de las DDNS consiste básicamente en un dominio (como lo
es en esta página www.educachip.com) que está asociado en cada momento a tu IP actual, es
decir, un nombre fijo elegido por ti (y por lo tanto más fácil de recordar que una dirección IP) que
esté siempre actualizado y dirija la conexión hacia tu Arduino Ethernet Shield.

El problema de este método es que depende de tu Router. Existen muchos servicios tanto de
pago como gratuitos de DDNS y cada Router soporta unos u otros. Que tu Router no soporte uno
en concreto no implica que no puedas utilizarlo pero deberás descargarte la aplicación
correspondiente de ese servicio DDNS y actualizar la IP desde el ordenador, es decir, tendrás que
tener un ordenador siempre encendido, por lo que lo mejor es que utilices uno de los que tu
Router soporta para que la actualización de la IP se haga desde el Router, sin necesidad de
aplicaciones.

Los servicios de DDNS de pago rondan los 20€ (25$) al año. No es muy caro (cuesta más o menos
lo que tener una IP estática) pero en mi opinión es mejor que realices un único pago y te compres
un buen Router que soporte DDNS gratuitas (lo que además, dependiendo del Router que tengas
ahora, puede incluso mejorar la velocidad de tu red). Sea cual sea tu elección aquí te dejo unos
cuantos servicios de DDNS para que elijas el que más te convenga:

 DynDNS: Servicio de pago (desde hace poco tiempo) pero líder en el sector y uno de los
más soportados por los Routers.

 Donweb: Gratuito y en Español pero relativamente nuevo y poco habitual en los Routers.
Es el que yo utilizo y actualmente estoy intentando conseguir que funcione desde un
Router que no soporte este sistema (ya te iré contando mis avances).

 No-IP: La alternativa típica a DynDNS. Es gratuito pero requiere que reactives la cuenta
una vez al mes y lo utilices desde un PC.

 Namecheap: A parte de dominios a muy buen precio, esta web ofrece servicio de DNS
dinámico gratuito.
 TZO: Pertenece a la misma empresa que DynDNS y, como te puedes imaginar, tanto su
precio como su disponibilidad en Routers es similar.

Como a pesar de que cada página tiene sus peculiaridades todas funcionan de forma similar, no
voy a entrar a explicarte como conseguir tu servicio de DDNS. Basta con que entres en la página
que prefieras (lo ideal es que sea una soportada por tu Router), te hagas una cuenta como harías
en cualquier otra web y accedas a la sección de DDNS. Si tienes algún problema realizando este
proceso puedes dejar tu comentario al final del post.

Una vez tengas tu DDNS entra de nuevo en la configuración de tu Router (aprendiste cómo hacerlo
al principio de este artículo), accede a la sección de DNS dinámicas y escribe en las zonas
correspondientes tanto el nombre de dominio como tus datos de usuario.

Actualizar DDNS Con Arduino

En el paso anterior te dije que si tu Router no soporta un determinado sistema de DDNS, tienes
que descargarte una aplicación y tener tu PC encendido siempre. Esto no es del todo así ya
que puedes implementar un código que haga que tu Arduino Ethernet Shield actualice
automáticamente la IP.

No es el tema de este post así que dejaré la explicación en profundidad de este método para otra
ocasión. Aun así, está bien que sepas que se puede hacer (por si quieres investigarlo). Ten en
cuenta que este método te aporta versatilidad (porque no dependes del Router y puedes
implementar el sistema en distintos sitios sin necesidad de realizar tantos cambios) pero añade
carga de trabajo y espacio al microcontrolador cuando puedes dejar que eso lo haga el Router.

Código

Ahora que ya eres un experto en redes, programar tu Arduino Ethernet Shield debería ser pan
comido. Aun así te voy a dejar dos códigos para tu Arduino:

 El primer código es el proporcionado por el propio equipo de Arduino, al que le he


modificado los comentarios para que te resulte más fácil entenderlo, modificarlo y lo
adaptes a tu propio proyecto sin problemas.

#include <SPI.h>

#include <Ethernet.h>

//Se introducen los valores correspondientes a MAC, IP local, Puerta de Enlace y Máscara de Red

byte mac[] = {

0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED

};

IPAddress ip(192, 168, 1, 177);


IPAddress gateway(192, 168, 1, 1);

IPAddress subnet(255, 255, 255, 0);

//Se inicializa la librería Ethernet con el Puerto que se va utilizar en la transmisión

EthernetServer server(80);

void setup() {

// Se establece comunicación con el monitor serial (para ver si el sistema está funcionando
correctamente)

Serial.begin(9600);

// while (!Serial) {

// ; // Se espera a que se conecte el puerto serie (solo para Arduino Leonardo)

// }

// Comienzo de la conexión

Ethernet.begin(mac, ip, gateway, subnet);

server.begin();

//Se muestra por el monitor serial que la conexión está establecida

Serial.print(“server is at “);

Serial.println(Ethernet.localIP());

void loop() {

// Se espera a que alguien acceda a la página web

EthernetClient client = server.available();

if (client) {
Serial.println(“new client”);

// una petición http termina con una línea en blanco

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

Serial.write(c);

//Si se llega al final de la línea se recive un nuevo carácter de

//línea y si se trata de una línea en blanco la petición http ha terminado

//así que se envía la respuesta

if (c == ‘\n’ & & currentLineIsBlank) {

// cabezera típica http

client.println(“HTTP / 1.1 200 OK”);

client.println(“Content - Type: text / html”);

client.println(“Connection: close”); // se cierra la conexión una vez se ha respondido a la


petición

client.println(“Refresh: 5”); // se refresca la página automáticamente cada 5 segundos

client.println();

client.println(“< !DOCTYPE HTML & gt; ”);

client.println(“< html & gt; ”);

// se muestran en la web los valores de las entradas analógicas

for (int analogChannel = 0; analogChannel & lt; 6; analogChannel++) {

int sensorReading = analogRead(analogChannel);

client.print(“analog input “);

client.print(analogChannel);

client.print(” is “);

client.print(sensorReading);

client.println(“< br / > ”);


}

client.println(“< / html & gt; ”);

break;

if (c == ‘\n’) {

// se comienza una nueva línea

currentLineIsBlank = true;

else if (c != ‘\r’) {

// se ha obtenido un carácter en la línea actual

currentLineIsBlank = false;

// se le da tiempo al navegador para recibir los datos

delay(1);

// se cierra la conexión

client.stop();

Serial.println(“client disonnected”);

 Este segundo código te va a encantar. Es una muestra de que la pequeña capacidad de un


Arduino no está reñida con la calidad y se puede crear una web funcional y a la vez
estética. No es creación mía. El código HTML lo ha realizado un webmaster y diseñador
web de categoría. Calidad, eficacia, eficiencia y estilo son su seña de identidad. Si este
tema te interesa, te recomiendo que le eches un vistazo a sus perfiles en las redes
sociales. Actualmente está empezando un nuevo proyecto, un startup que sin duda nos
dejará boquiabiertos. Los comienzos nunca son fáciles pero él lleva la clave del éxito en el
ADN.

#include <SPI.h>

#include <Ethernet.h>
byte mac[] = {

0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED

};

IPAddress ip(192, 168, 1, 177);

IPAddress gateway(192, 168, 1, 1);

IPAddress subnet(255, 255, 255, 0);

EthernetServer server(80);

void setup() {

// Serial.begin(9600);

// while (!Serial) {

// ;

// }

Ethernet.begin(mac, ip, gateway, subnet);

server.begin();

Serial.print(“server is at “);

Serial.println(Ethernet.localIP());

void loop() {

EthernetClient client = server.available();

if (client) {
Serial.println(“new client”);

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

Serial.write(c);

if (c == ‘\n’ & & currentLineIsBlank) {

client.println(“HTTP / 1.1 200 OK”);

client.println(“Content - Type: text / html”);

client.println(“Connection: close”);

client.println(“Refresh: 5”);

client.println();

client.println(“< !DOCTYPE HTML & gt; ”);

client.println(“< html lang = ’es’> ”);

client.println(“< head & gt; ”);

client.println(“< meta charset = ’UTF - 8’> ”);

client.println(“< title & gt; ”);

client.println(“Casa domótica con EducaChip”);

client.println(“< / title & gt; ”);

client.println(“< link”);

client.println(“href = ’http:
//fonts.googleapis.com/css?family=Roboto:300|Playfair+Display:400′”);

client.println(“rel = ’stylesheet'”);

client.println(“type=’text/css’/>”);

client.println(“<link rel=’stylesheet'”);

client.println(“href = ’http:
//static.tumblr.com/pjglohe/2qinf00ga/estilos.min.css’>”);
client.println(“< / head & gt; ”);

client.println(“< body & gt; ”);

client.println(“< div class = ’page - wrap’> ”);

client.println(“< header class = ’header’> ”);

client.println(“< h1 & gt; ”);

client.println(“La casa domótica de EducaChip”);

client.println(“< / h1 & gt; ”);

client.println(“< div class = ’educachip’> ”);

client.println(“< span & gt; Realizado por & lt; / span & gt; ”);

client.println(“< a href = ’http: //www.educachip.com’ target=’_blank’>”);

client.println(“www.educachip.com”);

client.println(“< / a & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< / header & gt; ”);

client.println(“< section class = ’content - wrap’> ”);

client.println(“< div class = ’device’> ”);

client.println(“< div class = ’device - name’> ”);

client.println(“< h2 & gt; ”);

client.println(“Dispositivo #1”);

client.println(“< / h2 & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< div class = ’forms’> ”);

client.println(“< form class = ’transition button on’> ”);

client.println(“< input type = ’button’ value = ’ON’ / > ”);

client.println(“< / form & gt; < / div & gt; < div class = ’forms’>
”);

client.println(“< form class = ’transition button off’> ”);

client.println(“< input type = ’button’ value = ’OFF’ / > ”);

client.println(“< / form & gt; ”);


client.println(“< / div & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< div class = ’device’> ”);

client.println(“< div class = ’device - name’> ”);

client.println(“< h2 & gt; ”);

client.println(“Dispositivo #2”);

client.println(“< / h2 & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< div class = ’forms’> ”);

client.println(“< form class = ’transition button on’> ”);

client.println(“< input type = ’button’ value = ’ON’ / > ”);

client.println(“< / form & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< div class = ’forms’> ”);

client.println(“< form class = ’transition button off’> ”);

client.println(“< input type = ’button’ value = ’OFF’ / > ”);

client.println(“< / form & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< / section & gt; ”);

client.println(“< / div & gt; ”);

client.println(“< / body & gt; ”);

client.println(“< / html & gt; ”);

break;

if (c == ‘\n’) {

currentLineIsBlank = true;
}

else if (c != ‘\r’) {

currentLineIsBlank = false;

delay(1);

client.stop();

Serial.println(“client disonnected”);

Aquí te dejo una muestra de cómo luce el resultado.


Material Necesario

Para construir tu sistema domótico necesitas una Placa Arduino y un Shield de Ethernet. Puedes
hacerte con ellos a muy buen precio aquí:

 Arduino UNO por 6.50€ (8.20$).

 Arduino Mega (mi recomendación para este tipo de proyectos) por 10€ (12.50$).

 Shield Ethernet por 6.50€ (8.20$).

Información Adicional

Ya dispones de todos los conocimientos necesarios para crear tu propio sistema domótico (o
cualquier otra aplicación similar) con Arduino Ethernet Shield. Sin embargo, este tipo de proyecto
suele dar bastantes problemas (conexión de redes, problemas de firewall, etc.). Aquí te muestro
una lista con conceptos que te serán útiles:

 Recuerda que para acceder a tu sistema tienes que escribir en el navegador (en la zona
donde habitualmente escribes las URLs) tanto la IP (pública si estás fuera de tu red de área
local y la asignada a tu Arduino si estás dentro) como el puerto. Debería quedar algo tipo:
12.34.567.890:80 donde los :80 son el puerto que le has asignado a tu Arduino Ethernet
Shield. En caso de que utilizases DDNS tendrás que poner el nombre de tu sistema DDNS
(el mismo que añadiste al Router) seguido de :80 (o el puerto que hayas utilizado).
 A parte de con el Arduino Ethernet Shield y tu placa de Arduino habitual, puedes
implementar este sistema en un Arduino Ethernet, una placa que ya incorpora los
elementos necesarios para la conexión a la red.

 Muchos de los proyectos con conexión a Internet ocupan más kb de los que puede
proporcionarte una placa de Arduino UNO, así que si quieres hacer algún sistema
relativamente te recomiendo que utilices una placa Mega.

 A la hora de configurar el MAC de tu Arduino y asignarle una IP puedes probar a cambiar el


rango de direcciones IP que asigna tu protocolo DHCP. Asignándole a tu Arduino Ethernet
Shield una IP fuera de ese rango, ésta no debería cambiar.

 Cuando has implementado el código de tu conexión Ethernet has iniciado el sistema con:

Ethernet.begin(mac, ip, gateway, subnet);


Puedes iniciar la conexión simplemente con:

Ethernet.begin(mac);

El propio Arduino se adaptará al protocolo DHCP y buscará su IP. Debes tener en cuenta que dicha
IP puede cambiar (si no seguiste los pasos correspondientes de configuración del Router) y
tendrías que reiniciar tu sistema para que la IP de tu Arduino Ethernet Shield se volviese a
actualizar. Además el tamaño de tu sketch incrementará considerablemente.

 Aunque hayas abierto los puertos e insertado todos los datos correctamente, es posible
que tanto el Firewall de tu ordenador como el de tu Router bloqueen la señal. Comprueba
que tu firewall esté funcionando de acuerdo a lo que quieres.

 Si a pesar de todos tus intentos el Firewall sigue dándote problemas, puedes acceder a la
configuración de tu Router y buscar el término DMZ. Insertando la IP de tu Arduino
Ethernet Shield en la sección DMZ consigues que a esa IP no le afecten los cortafuegos.

 Si utilizas un Proxy, asegúrate de configurarlo (de la misma forma que hiciste con tu
Firewall).

 Es posible que por un puerto concreto en tu conexión (por ejemplo el puerto 80) haya más
de un sistema en tu red de área local enviando y recibiendo información. Si esto ocurre la
conexión no se realizará correctamente y tu sistema fallará. En ese caso puedes probar
con otros puertos como: 5400, 5500, 5600, 5700, 5800 u 8080.

 Algunos cables de Ethernet tienen los pines permutados. Para que lo entiendas es como si
el pin 2 en un extremo fuese el receptor y en el otro el transmisor. Esto no sucede con
todos los cables y en general no suele ser un problema con los ordenadores actuales (que
están preparados para realizar la permutación internamente si es necesario) pero sí a la
hora de conectar tu Arduino Ethernet Shield. Si has seguido bien todos los pasos y ves que
no funciona, puede ser simplemente porque el cable no sea el adecuado.

 Cuando creas una página web como la que has visto antes, necesitas utilizar hojas de estilo
(CSS). CSS añade muchas líneas de código a tu sistema (y en mi experiencia da bastantes
problemas). Puedes optar por una solución alternativa como la que se ha seguido en este
post, donde las hojas de estilo están alojadas en Tumblr.

Una vez más esto ha sido todo. Como ves, no hay excusa para que te pongas manos a la obra y
controles tu casa desde Internet. Puede que no sea el proyecto más simple pero con un poco de
paciencia te harás con él enseguida, estoy seguro.

Mucho ánimo y acuérdate de compartir este post en tus redes sociales favoritas. Además,
puedes suscribirte al blog para no perderte ninguna entrada.

Ethernet Shield
1 respuesta

El Arduino ethernet shield nos da la capacidad de conectar un Arduino a una red ethernet. Es la
parte física que implementa la pila de protocolos TCP/IP.

Está basada en el chip ethernet Wiznet W5100. El Wiznet W5100 provee de una pila de red IP
capaz de soportar TCP y UDP. Soporta hasta cuatro conexiones de sockets simultáneas. Usa la
librería Ethernet para leer y escribir los flujos de datos que pasan por el puerto ethernet. Me
permitirá escribir sketches que se conecten a internet usando la shield.

Datasheet de
W5100: https://www.sparkfun.com/datasheets/DevTools/Arduino/W5100_Datasheet_v1_1_6.pdf

Librería ethernet: http://arduino.cc/en/Reference/Ethernet

El shield provee un conector ethernet estándar RJ45. La ethernet shield dispone de unos
conectores que permiten conectar a su vez otras placas encima y apilarlas sobre la placa Arduino.

Arduino usa los pines digitales 10, 11, 12, y 13 (SPI) para comunicarse con el W5100 en la ethernet
shield. Estos pines no pueden ser usados para e/s genéricas.

El botón de reset en la shield resetea ambos, el W5100 y la placa Arduino.

La shield contiene varios LEDs para información:


 ON: indica que la placa y la shield están alimentadas

 LINK: indica la presencia de un enlace de red y parpadea cuando la shield envía o recibe
datos

 100M: indica la presencia de una conexión de red de 100 Mb/s (de forma opuesta a una
de 10Mb/s)

 RX: parpadea cuando el shield recibe datos

 TX: parpadea cuando el shield envía datos

El jumper soldado marcado como “INT” puede ser conectado para permitir a la placa Arduino
recibir notificaciones de eventos por interrupción desde el W5100, pero esto no está soportado
por la librería Ethernet. El jumper conecta el pin INT del W5100 al pin digital 2 de Arduino.

El slot SD en la shield usa la librería http://arduino.cc/en/Reference/SD para manejarlo. El propio


chip W5100 incluye el manejo de tarjetas SD.

Para usar la Ethernet Shield solo hay que montarla sobre la placa Arduino. Para cargar los sketches
a la placa con el shield, conectarla al ordenador mediante el cable USB como se hace
normalmente. Luego conectar la Ethernet a un ordenador, a un switch o a un router utilizando un
cable ethernet standard (CAT5 o CAT6 con conectores RJ45). La conexión al ordenador puede
requerir el uso de un cable cruzado (aunque muchos ordenadores actuales, pueden hacer el cruce
de forma interna).

Un tutorial sencillo para comenzar con el shield ethernet


en: http://www.artinteractivo.com/arduino-ethernet

Para cualquier duda sobre el ethernet Shield


consultar: http://arduino.cc/en/Main/ArduinoEthernetShield

Puntos a recordar del Ethernet Shield:

 Opera a 5V suministrados desde la placa de Arduino

 El controlador ethernet es el W5100 con 16K de buffer interno. No consume memoria.

 El shield se comunica con el microcontrolador por el bus SPI, por lo tanto para usarlo
siempre debemos incluir la libreria SPI.h: http://arduino.cc/en/Reference/SPI

 Soporta hasta 4 conexiones simultáneas

 Usar la librería Ethernet para manejar el shield: http://arduino.cc/en/Reference/Ethernet

 El shield dispone de un lector de tarjetas micro-SD que puede ser usado para guardar
ficheros y servirlos sobre la red. Para ello es necesaria la librería
SD: http://arduino.cc/en/Reference/SD

 Al trabajar con la SD, el pin 4 es usado como SS.

Arduino UNO se comunica con W5100 y la tarjeta SD usando el bus SPI a través del conector ICSP.
Por este motivo los pines 10, 11, 12 y 13 en el UNO y los 50, 51, 52 y 53 en el Mega no podrán
usarse. En ambas placas los pines 10 y 4 se usan para seleccionar el W5100 y la tarjeta SD. El
Ethernet y el SD no pueden trabajar simultáneamente y debemos tener cuidado al usar ambos de
forma conjunta.

Para conectar el shield, se deben seguir estas


instrucciones: http://arduino.cc/en/Guide/ArduinoEthernetShield

El esquemático lo podéis encontrar en: http://arduino.cc/en/uploads/Main/arduino-ethernet-


shield-06-schematic.pdf

Arduino Ethernet Shield 2

Arduino Ethernet Shield es una placa que aparece en la web de arduino.cc como retirado, pero
sigue estando disponible como clones o versiones derivadas.

Por otra parte arduino.org a sacado el Arduino Etherner Shield 2 con el nuevo Wiznet
5500 http://www.arduino.org/products/shields/arduino-ethernet-shield-2

Este Shield usa la librería ethernet2: http://www.arduino.org/learning/reference/Ethernet-two-


Library

Data sheet de
W5500: https://www.sos.sk/productdata/15/26/12/152612/W5500_datasheet_v1.0.2_1.pdf

Mejoras de W5500: https://feilipu.me/2014/11/16/wiznet-w5500-ioshield-a/

Power over Ethernet

El Ethernet shield es compatible con PoE gracias a un módulo adicional que extrae la energía
eléctrica del cable ethernet, anteriormente inyectada desde el switch.

Las características del módulo PoE:

 IEEE802.3af compliant

 Low output ripple and noise (100mVpp)

 Input voltage range 36V to 57V

 Overload and short-circuit protection

 9V Output

 High efficiency DC/DC converter: typ 75% @ 50% load

 1500V isolation (input to output)

Data sheet: http://arduino.cc/en/uploads/Main/PoE-datasheet.pdf

Más información sobre el Power Over Ethernet:

 http://es.wikipedia.org/wiki/Power_over_Ethernet

 http://en.wikipedia.org/wiki/Power_over_Ethernet
Como funciona PoE:

http://www.bb-elec.com/Learning-Center/All-White-Papers/Ethernet/Power-over-Ethernet-
PoE.aspx

Phantom Feeding:

Alimentación sobre cables libres:


WIZnet W5100

El integrado W5100 se conecta al arduino mediante SPI.


Para saber todo sobre el W5100 revisar: http://www.ermicro.com/blog/?p=1773

Básicamente el Wiznet W5100 implementa una pila TCP con todas las funciones del estándar IEEE
802.3 (Ethernet capa física y de enlace de datos) dentro del chip; esto hace que el chip Wiznet
W5100 sea buena opción para integrar el sistema embebido en internet. La programación del chip
de Wiznet W5100 es también fácil ya que sólo tenemos que escribir y leer desde y hacia los
registros internos W5100 con el fin de utilizar el construir funciones de los protocolos TCP/IP.

El Wiznet W5100 actuará como un dispositivo esclavo SPI controlado por microcontrolador
ATMega328 como el SPI Maestro. Necesita el protocolo SPI al menos cuatro señales, MOSI
(Master Out Serial In), MISO (Master In Serial Out), SCK (señal de reloh proporcionada por el
maestro) y CS (the SPI slave chip select). El chip W5100 también proporciona el pin de
interrupción.
Especificaciones:

 http://www.wiznet.co.kr/Sub_Modules/en/product/Product_Detail.asp?cate1=5&cate2=7
&cate3=26&pid=1011

 http://www.wiznet.co.kr/UpLoad_Files/ReferenceFiles/W5100_Datasheet_v1.2.2.pdf

¿Es posible hacer pings con arduino?

Sí, pero por supuesto con una librería: http://playground.arduino.cc/Code/ICMPPing

¿Soporta Arduino IPv6?

El shield oficial de arduino basado en el WizNet 5100 implementa la pila de protocolos IPv4, por lo
que está shield no puede ser utilizada para implementar la pila IPv6.

Para implementar la pila IPv6, es necesario usar un shield basado en hardware que permita la
gestión de la funciones de las capas de IP y ethernet. Shields basados en el chip MicroChip
ENC28J60 son adecuados para la implementación de IPv6. Esto requiere la implementación de una
gestión de los estados TCP, resultando un código de arduino más complejo.

Datasheet Chip ethernet IPv6:

 http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022889

 http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf

Más información sobre IPv6: https://sites.google.com/site/ghoelzl/ipv6

IPv6WebServer: https://sites.google.com/site/ghoelzl/ipv6ethershield/ipv6_http_server

Y aun más… http://www.tweaking4all.com/hardware/arduino/arduino-enc28j60-ethernet/

Y otro ejemplo: http://www.fut-electronics.com/wp-


content/plugins/fe_downloads/Uploads/Ethernet-Module-ENC28J60-Arduino.pdf

Librerías:

 https://github.com/ntruchsess/arduino_uip

 https://github.com/jcw/ethercard

 https://github.com/ghoelzl/IPv6EtherShield

 https://sites.google.com/site/ghoelzl/ipv6ethershield

Compártelo:

You might also like