Sie sind auf Seite 1von 13

19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

CONTROLANDO UN LED POR ETHERNET


Control de pines digitales desde Internet

Home  Controlando Un LED Por Ethernet

OBJETIVOS

   Montar un circuito con un LED y un Shield Ethernet.

 Crear un servidor Web.

 Mostrar un código básico HTML para activar odesactivar el LED, que nos sirva como armazón para nuestros
proyectos.

 Presentar el Port Forwarding y su razón de ser, cuando queremos acceder desde internet al servidor de
nuestro Arduino.

MATERIAL REQUERIDO.

  Arduino UNO o equivalente.

Una Protoboard más cables.

 Una resistencia de 330Ω.

 Un LED

http://www.prometec.net/ethernetled/ 1/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

 Un Shield Ethernet

A VUELTAS CON EL HTML

El HTML es un lenguaje de descripción de páginas que ha evolucionado en sus últimas versiones, (HTML5, a la hora de escribir esto) en algo muy
sofisticado que sin llegar a ser un lenguaje de programación, es capaz de ofrecer una potencia espectacular.

Un curso medianamente organizado de HTML escapa con mucho la capacidad y el objetivo de estas humildes sesiones, pero para continuar
presentando como hacer ciertas cosas con Arduino y la conexión a Ethernet, necesitamos presentar algunas ideas al respecto, porque sin ellas
cualquier intento de avanzar seria vano.

Por ejemplo, es muy útil disponer de un programa tipo, que nos permita manipular un LED conectado a nuestro Arduino mediante una página Web, y
este es el objetivo de la sesión actual.

Para ello, vamos a presentar pequeños snippets (fragmentos) de HTML que nos permitan hacerlo, sin entrar en grandes detalles del lenguaje, pero
que vamos a emplear en nuestros programas.

EL primero, es un snippet que nos permite mostrar un checkbox en nuestra página y reconocer si se ha pinchado o no:

<!DOCTYPE html>
<html>
     <head>
          <title> Control de LEDs en Arduino</title>
     </head>
     <body>
           <h1>LED remoto</h1>
           <p>Haz click para conmutar el LED.</p>
           <form method="get">
                <input type="checkbox" name="LED2" value="2" onclick="submit();">LED2
           </form>
      </body>
</html>

 
 Como norma general, lo que se presenta entre < > se llaman tags y describen algo en concreto, títulos,
cabeceras, negritas….

 Por ejemplo para expresar que es código HTML, debemos empezar con <html> y finalizar con </html>, lo
mismo ocurre con los demás tags, como < head> cabecera, <body> cuerpo, o <p> párrafo, que cuando
finalizan incorporan un tag con el símbolo “/” para indicar el fin del tag.

 
En el snippet de arriba, hemos usado un método HTML para mostrar un checkbox y enviar un texto cuando se pulse.

Si copiáis ese código con un editor de textos y lo guardáis con extensión htm, cuando lo abras con el navegador veras:

Fijate en la imagen de la derecha, que cuando pulsemos el checkbox, el navegador añadirá al final de la dirección IP, el texto ?LED2. Utilizaremos
este texto de respuesta para decidir si encendemos o apagamos el LED. Para ello usaremos la función  indexOf() que nos devuelve si un string está

http://www.prometec.net/ethernetled/ 2/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

incluido o no en otro.

DIAGRAMA DEL CIRCUITO

Vamos a usar un circuito con Arduino y un LED conectado alD2 con sus resistencia, en conjunción con la página web que hemos descrito en el
apartado anterior. En función del status del checkbox encenderemos o apagaremos los LED.

EL PROGRAMA DE CONTROL

La mayor parte del programa va a ser similar al programa de la sesión anterior, con algunas modificaciones (Pocas). Principalmente, serán crear un
variable para almacenar el status del LED, y un String para registrar la petición que nos hace el cliente Web:

String HTTP_req;          // stores the HTTP request
boolean LED_status = 0;   // state of LED, off by default

El resto es casi igual, excepto porque cambiamos el código HTML que enviamos en la respuesta, para presentar el snippet del que hablamos más
arriba, y porque hemos añadido una función ProcessCheckbox() que hará el procesamiento del click (incluyendo enviar el HTML correspondiente a
pulsado o no).

 
 Fijaros que enviamos los comandos HTML, mediante client.print() a quien le pasamos los strings limitados
por comillas. Pero como los comandos HTML también incluyen comillas, si los copiamos por las buenas
http://www.prometec.net/ethernetled/ 3/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino
por comillas. Pero como los comandos HTML también incluyen comillas, si los copiamos por las buenas
tendríamos un lio servido.

 La solución de C++ para esto es preceder el carácter a imprimir por un carácter de escape para que el
compilador sepa que no es el fin del string, si no parte de el.

 Por eso, si queremos mandar <form method=”get”> lo que tenemos que enviar con print es <form
method=\”get\”>.

Aquí tenéis el programa    PROG_63_1 

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
EthernetServer server(80);

String HTTP_req;          // Para guardar la peticion del cliente
boolean LED2_status = 0;

void setup()
{   Ethernet.begin(mac, ip);  
    server.begin();           
    Serial.begin(9600);       
    pinMode(2, OUTPUT);       
}
void loop()
{  EthernetClient client = server.available();  // Comprobamos si hay peticiones
   if (client)                                  // En caso afirmativo
      {  boolean currentLineIsBlank = true;
         while (client.connected()) 
           { if (client.available())           // Hay algo pendiente de leer
               { char c = client.read(); // Leemos los caracteres de uno en uno
                 HTTP_req += c;          // Los añadimos al String
                 if (c == '\n' && currentLineIsBlank)
                    { client.println("HTTP/1.1 200 OK");
                      client.println("Content‐Type: text/html");
                      client.println("Connection: close");
                      client.println();
                      client.println("<!DOCTYPE html>");          // Envia la pagina Web
                      client.println("<html>");
                      client.println("<head>");
                      client.println("<title>Control de LEDs en Arduino</title>");
                      client.println("</head>");
                      client.println("<body>");
                      client.println("<h1>LED</h1>");
                      client.println("<p>Haz click para conmutar el LED.</p>");
                      client.println("<form method=\"get\">");
                      ProcessCheckbox(client);
                      client.println("</form>");
                      client.println("</body>");
                      client.println("</html>");
                      Serial.print(HTTP_req);
                      HTTP_req = "";    // Una vez procesador, limpiar el string
                      break;
                    }
                 if (c == '\n')
                      currentLineIsBlank = true;
                 else if (c != '\r')
                      currentLineIsBlank = false;
              } // if (client.available
           }   // WHile
        delay(10);      // dar tiempo
        client.stop(); // Cerra conexion
   }  // If client

http://www.prometec.net/ethernetled/ 4/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

void ProcessCheckbox(EthernetClient cl)
  {  if (HTTP_req.indexOf("LED2=2") > ‐1)    // LED2 pinchado?
          LED2_status = !LED2_status ;         // Si pichado invertimos el valor

     digitalWrite(2, LED2_status);
     if (LED2_status)
             cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \\ onclick=\"submit();\" checked>LED2");
     else
             cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \\  onclick=\"submit();\">LED2");
   }

Aquí os dejo un minivideo con el resultado

Control de LED mediante Arduino y ethernet

ACCEDIENDO DESDE INTERNET A NUESTRO ARDUINO

Hasta ahora, hemos accedido a nuestro servidor Arduino, desde la red interna, a través de un cable Ethernet. No es distinto acceder desde el
exterior de la red local, pero para hablar de ello necesitamos presentar algunas ideas adicionales, así que poneros cómodos.

El esquema de una red local LAN, puede ser más o menos este:

Cada una de los equipos internos dispone de una dirección IP única, válida para la red interna. Normalmente son IPs en uno de dos rangos:

192.168.xx.xx
172.26.xx.xx

Esta dos rangos están reservadas a direcciones internas y no son enrutables, es decir el Router rechazará sacarlas a internet. A este tipo de
direcciones que usamos internas se les llama direcciones IP privadas, porque en principio no se puede acceder desde internet a ellas.

http://www.prometec.net/ethernetled/ 5/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

Por el contrario, las direcciones a las que accedemos desde Internet, las llamamos direcciones públicas y no pueden coincidir con otra IP pública
bajo ninguna circunstancia.

Cuando desde dentro de la LAN, queremos acceder a una dirección pública, el Router utiliza el NAT (Que vimos en la sesión anterior), para
enmascarar mi dirección interna privada y utiliza su propia dirección pública para hacer la petición.  Cuando recibe la respuesta, nos la reenvía como
si no hubiera pasado nada.

Pero es importante entender aquí que:

 
 Siempre que tu Router se enciende, recibe una dirección pública que le asigna tu operadora telefónica, y
que es la que usará para acceder a internet. Necesita ser una dirección pública para poder navegar en el
exterior.

 Si quieres saber con qué IP publica estas navegando (Acuérdate del NAT, quien navega es el Router con su
IP, no tú) usa cualquiera de los servicio para ello, por ejemplo http://cual-es-mi-ip-publica.com/, y veras que
tu IP privada es distinta de la que te dice esta página, pero es correcto.

 
Algunas veces me preguntan que tienen que hacer para conseguir  una dirección IP pública para un servidor doméstico. Yo siempre respondo que
dirección pública, ya tienen, la que habéis visto antes. Lo que no tienen es una dirección IP fija o estática, porque esta cambia cada vez que apagas
y enciendes el Router, pero es una IP publica de pleno derecho.

Si necesitas acceder a tu Arduino desde fuera puedes utilizar esa IP, por lo menos hasta que reinicies el Router (Y es algo que hacemos
habitualmente con los servidores domésticos).

Cuando contratas a tu proveedor una IP fija, lo que haces es pagar por una que no cambie cuando reinicias y por regla general también te permite
registrar en sus DNS públicos un nombre que apunte a la IP que compras.

 
 Si queréis hacer pruebas a coste mínimo, podéis usar alguna página como noip, que te ofrecen soluciones
gratuitas para encontrar tu dirección pública incluso cuando apagues tu Router. No es una solución
definitiva, pero tiene la virtud de tener un precio imbatible: 0.

 
Supongamos ahora que ya sabemos que IP pública  nos corresponde. Lo siguiente es acceder desde internet, pero surge un nuevo problema (Como
no).

Cuando salimos a través del Router este sabe nuestra dirección interna (Va en los paquetes TCPIP) y cuando recibe la respuesta, no tiene problema
en saber a quién corresponde. Pero cuando alguien del exterior trata de entrar en nuestra red sin una petición registrada por nuestra parte, tiene
dos problemas:

 
 Permitimos por seguridad que se entre desde el exterior a nuestra red interna? Normalmente hay que
revisar la política de seguridad del Router para garantizar que se pueda.

 ¿Cómo sabe el Router a que dirección interna va la petición? Dentro de la red interna hay muchos puestos.
¿A cuál de ellos debe enviar la petición?

 
No existe manera de dirigir correctamente estas peticiones de fuera, sin informar previamente al Router de algún criterio para que tome una
decisión. Para esto se inventó el Port Forwarding o redirección de puertos IP.

¿Cómo diferenciamos una petición del exterior hacia el interior?

Tenemos la clave en que cada petición IP lleva anexo un puerto. O lo que es lo mismo, todas las peticiones que vengan por el puerto 80 podremos
asumir, razonablemente, que son para el servidor Web interno.

Así, si vienen por el puerto 21, es razonable enviárselo a un servidor de FTP y si viene por el 25 lo lógico es que sea un tema de SMTP y se lo envíe
al servidor interno de correo.

 
 Además, siempre que en una red con administrador profesional se permite la entrada del exterior (O zona
desmilitarizada, en la jerga) al interior de la red local, se suele instalar un FireWall que controla, limita e
inspecciona y eventualmente bloquea, todas las transacciones, para evitar problemas de seguridad.

 
Así pues, bastaría con informar al Router, mediante una tabla de redirección de puertos, de que cualquier intento de llegar al interior de la red local
http://www.prometec.net/ethernetled/ 6/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino
Así pues, bastaría con informar al Router, mediante una tabla de redirección de puertos, de que cualquier intento de llegar al interior de la red local
por el puerto 80, HTTP, se desvíen, hacia la dirección interna del servidor Web. Y lo mismo con el FTP y SMTP a su propia IP privada.

Así con una única IP publica, podemos recibir y servir peticiones, de múltiples servidores internos, sin más condición de que se pueda discriminar
entre ellos por el puerto característico  (Lo habitual).

 
 No está de más destacar, que este sistema implica, necesariamente, programar las reglas de port
forwarding en el Router. No funcionará en absoluto si se obvia este paso.

 La limitación de este sistema es, que podemos poner tantos servidores como queramos detrás del Router o
firewall, a condición de que solo haya uno de cada. No podemos poner dos servidores web en el puerto 80,
porque todo lo que venga por el puerto 80, el Router hará un port forwarding a una única dirección.

 Si hemos puesto un servidor estándar en un puerto inusual, o si hemos montado un servicio propio en un
puerto dado, la dirección completa con puerto se puede especificar como por ejemplo en 192.168.1.175: 4217

 
Por ultimo para programar el port forwandig en tu Router, debes entrar en él. Actualmente todos los routers domésticos pueden administrarse desde
una página web que sirve el propio Router en su dirección IP.

Si por ejemplo tu Router tiene la dirección 192.168.1.1, puedes ir a esa dirección con tu navegador. Te pedirá un nombre de usuario y clave de acceso
para validar tu autorización.

Es imposible describir la configuración de los routers en detalle porque hay cientos de modelos, pero en todos ellos hay que buscar la definición de
port forwandig.

Voy a incluir capturas de mi Router, por si hay suerte y coincide con el vuestro. Si no goglead el tema con el modelo especifico de vuestro Router.

En mi caso concreto, os anexo un pantallazo de mis opciones, donde veis en la columna de la izquierda, el menú del Router con la selección de Port
Forwarding, y a la derecha la tabla de redirecciones de mi Router, donde redirecciono varios puertos hacia dos IPs internas diferentes

http://www.prometec.net/ethernetled/ 7/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

 
 Aunque hasta ahora hemos hablado exclusivamente como si el Transporte fuera siempre TCP, lo cierto es
que hay otro protocolo que se utiliza habitualmente, que es el UDP.

 No he querido complicar innecesariamente las explicaciones hablando de él, pero hay que tenerlo en
cuenta. Algunos servicios usan UDP y no TCP y cuando hacemos port Forwarding, se debe especificar
(Aunque casi todos los routers modernos aceptan especificar ambos como arriba).

 
Un último comentario, Cuando accedes desde el exterior a tu servidor Arduino, vas a usar en tu navegador, la dirección pública de tu Router. Pero
si intentas usar esa dirección pública exterior para entrar desde el interior de tu red local (por ejemplo cuando usas tu teléfono WIFI) te llevaras un
chasco.

Algunos routers lo detectan como un intento de violar la seguridad y te bloquearan sin contemplaciones (A esto se le llama Spoofing en la jerga y
suele suponer malas intenciones de todas, todas… menos en el caso del que hablamos).

Y otros te pedirán una clave para pasar, que será la del Router, en cuyo caso te pondrá con INICIO
la página Web de administración
TIENDA TUTORIALES y noFORO
con el servidor
PROYECTOS
interno en Arduino.

Cuando estés conectado por Ethernet o WIFI, tienes que utilizar la IP privada interna. Cuando estés fuera de tu LAN, utilizarás la dirección pública, y
si, esto te va a dar guerra para hacer pruebas.

RESUMEN DE LA SESIÓN

   

 Hemos visto cómo usar el servidor web de Arduino con un código HTML especial, para controlar el status
de un LED conectado a un pin digital.

 Veréis que es muy sencillo a partir del programa que ya vimos en la sesión anterior, y debería ser fácil
ampliar el programa a múltiples LEDs.

 Hemos presentado el Port Fowarding y porque es necesario, para acceder desde el exterior.

 Hemos apuntado a como configurar la tabla de redirección de tu Router.

 
 

 
http://www.prometec.net/ethernetled/ 8/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino
 

 
ANTERIOR SIGUIENTE
 

(24) COMMENTS

Fabian 12 jul 2015


Hola
Me ayudo mucho tu trabajo.
Reply Gracias

Jaume 10 ago 2015


Buenos días, estoy siguiendo paso a paso el tutorial pero tengo problemas nada más empezar. vaya por delante que ya tengo una IP
estática y puedo comunicarme con el router desde internet, de manera que puedo encender y apagar leds a través de la red. Me ha
Reply gustado esta página, por que navega por los primeros pasos para configurar una página HTML para gestionar aparatos a distancia y me
interesa cómo hacerlo. Vereis, el problema con que me encuentro es que al confeccionar la página web de el principio, desde la cual se
apaga y enciende un led, consigo que aparezca en internet, pero al clicar en el checkbox, no mantiene este cuadradito con la tilde
conforme está activado. Por contra, en la barra de direcciones sí que aparece escrito LED2=2, lo que indica que está activado. El caso
es que no puedo seguir adelante, pués no consigo que en el sketch encienda el led (la dirección que sale en el navegador és:
file:///C:/Users/Jaume/Desktop/Codi%201.htm?LED2=2, y tengo el archivo HTM en el escritorio.

¿Podeis darme una idea de lo que pasa?

admin 10 ago 2015


Hola Jaume,
No es facil decirte mucho solo con esas pistas, pero tiene toda la pinta de algo descolocado.
Reply Algo asi como una coma o un parentesis. Prueba a copiar y pegar el programa de la pagina y me dices

gerardo 17 ago 2015


Hola.. Una pregunta en que parte del skech se ubica: void ProcessCheckbox(EthernetClient cl)
Desde ya muchas gracias..Sdos
Reply

dbagur 29 ago 2015


Buenas, antes de nada felicidades por tus tutoriales llevo varios meses con ellos. Te queeria preguntar si es posible meter una
contraseña al programa me explico, he abierto el puerto 80 de mi (dragino + arduino uno —> arduino yun) y lo puedo controlar desde
Reply cualquier parte si hay red internet, el caso es que cualquiera que sepa mi ippublica del ruter puede entar en el web server (o bridge en
arduino yun) y controlar lo que hay (un led, la tele por la web…)

gracias seguire investigando

admin 29 ago 2015


En principio, es tu programa (el servidor) quien escribe lo que envias al navegador del cliente. Por tanto cuando alguien se
conecta mandale un mensaje con HTML5 en el que le requieras una contraseña. Si el retorno es correcto le enseñas el
Reply resto de la pagina y en caso contrario se la pintas de negro

Jose guevara 23 sep 2015


Hola: Primero que todo gracias por compartir tu conocimiento. Estoy tratando de hacer algo igual pero con la adición de poder controlar
el led tambien (al mismo tiempo) con una entrada digital del arduino (conservar la función del interruptor de pared tipico de la casa).
Reply Podrias ayudarme?

admin 23 sep 2015


Te ayudare encantado Jose, y lo mas interesante sera que pases la consulta a la zona del foro y asi entre todos seguro que
encontramos la forma , un saludo
http://www.prometec.net/ethernetled/ 9/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino
encontramos la forma , un saludo
Reply

Sich 23 sep 2015


Hola
Tengo un problema extraño, creo que es lo que Jaume explica
Reply Al hacer click en el navegador el checkbox se marca, el led se enciende por un instante y luego se apaga, quedando el checkbox
seleccionado. Si presiono nuevamente el checkbox se desmarca e inmediatamente se marca y el led no hace nada; y el estado sigue así,
nunca lo puedo desmarcar mas ni encender el led…. es como que al hacer click hiciera 2 veces click (???)
Encontre el mismo ejemplo en otra web, no se si sea la fuente, pero ocurre lo mismo.

No conozco mucho de html y tampoco entiendo bien la forma de recuperar el estado desde la web, pero logre solucionar, si a alguien
mas le sirve: Introduje una variable bool que permita ejecutar las acciones dentro de ProcessCheckbox(EthernetClient cl) solo una vez
cada dos ( es decir la primera ejecuta, a la siguiente no, a la tercera si, etc)
Pero me gustaría entender cual mismo es el problema pues deseo hacer un control por web con mas opciones…
si alguien mas me explica porfavor

admin 25 sep 2015


Hola Sich, a ver si saco un rato y revciso el ejemplo para ver cual puede ser el problema, entre tanto me vendria bien si me
envias el programa en que funciona las veces impares y a ver si entre todos vemos el problema
Reply Un sludo

Wsich 27 sep 2015


Hola, ya entendi lo que pasa
Bueno como dije no conozco mucho html así que puede ser que mi interpretación no sea del todo justa pero
Reply logre que funciones bien:
Lo que ocurre es lo siguiente: la primera vez que enviamos la pagina y desde el navegador hacemos click en el
checkbox, éste se marca y envía la respuesta:
“GET /?LED2=2 HTTP/1.1”
“Host: http://192.168.14. ” //(yo he configurado el arduino con esta ip)
“Connection: keep-alive”
Desde el arduino entonces detectamos el “?LED2=2” y encendemos el led
La seguda vez que hacemos click en el checbox, éste se desmarca y el navegador envía:
“GET HTTP/1.1”
“Host: ….”
“Referer: http://192.168.1.14/?LED2=2”
“Connection: keep-alive”
En este momento desde el arduino volvemos a leer “?LED2=2”, es decir volvemos a encener el led y enviamos
la pagina web nuevamente con el led encendido y en este punto no es posible volverlo a apagarlo o hacer
nada mas
Es mas si cerramos el navegador y volvemos a entrar en el, lo natural sería que el navegador muestre el
estado actual de led, lo que no ocurre. El problema es que no hemos detectado que desmarcamos el checbox
desde “GET” y en lugar hemos confundido la respuesta con “Referer”.
Lo que he hecho es lo siguiente, en ProcessCheckbox, he cambiado esta linea
if (HTTP_req.indexOf(“LED2=2”) > -1) // LED2 pinchado?
por esta:
if (HTTP_req.indexOf(“GET /?LED2=2”) > -1|| (HTTP_req.indexOf(“GET / HTTP/1.1”) > -1 &&
HTTP_req.indexOf(“Referer:”)>-1))
Ahora funciona bien sin bugs y muestra el estado actual del led si cierro y abro nuevamente el navegador.
Saludos

Alvaro 23 oct 2015


Hola

Reply Estoy haciendo pruebas con este montaje y me funciona la parte de acceder al arduino desde mi LAN (con la IP privada), pero intento
acceder desde otro ordenador conectado a través de otro router y no soy capaz. En la barra de direcciones del navegador pongo la IP
pública del router al que está conectado el arduino, pero me da error. No se muy bien si es así cómo hay que hacerlo.

A ver si me puedes echar un cable.

Gracias y enhorabuena por tus tutoriales, son una gran ayuda para aprender.
Saludos

admin 24 oct 2015


Hola ALvaro, tu problema está claro. Necesitas avisar a tu router que vas a venir del exterior por un puerto y que quieres
que te redirecciones a tu direccion IP interna.
http://www.prometec.net/ethernetled/ 10/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino
que te redirecciones a tu direccion IP interna.
Reply Busca en internet como hacer un port mapping en tu modelo de router, (Porque cada uno es un mundo)

Alvaro 26 oct 2015


Hola

Reply En el router, en la parte de Port forwarding he creado un puerto para la IP privada del Arduino, he probado
poniendo protocolo TCP y TCP&UDP, pero no soy capaz de accceder desde otro ordenador. No sé si es que
no he configurado bien eso. De todas formas, entiendo que para acceder, hay que poner en la bara de
direcciones lo siguiente: IP pública:puertoArduino, (por ejemplo: 244.541.1.2:4587 ) ¿no? A ver si consigo
encuentrar una guia de mi router en internet (que no soy capaz), porque no estoy seguro de estar
configurándolo bien.

Saludos y gracias por responder

admin 26 oct 2015


Hola Alvaro,
Cada router es de su padre y de su madre, pero lo que me dices suena bien. Tu desde fuera
Reply pones la IP publica de tu router, seguida de : y el puerto que buscas.
Si es el puerto 80 para llegar a un servidor web, no es necesario ya que el puerto 80 esta
implicito.
En tu router deberias decirle algo asi como, de 0.0.0.0 ( o sea de todas las direcciones) que llegan
por el puerto 80, lo tienes que redirigir a la direccion IP interna 192.168.1.xx (Por ejemplo) y el
puerto 80
Si el puerto es otro, pues lo pones y ya esta
Un saludo y suerte

Alvaro 28 oct 2015


Hola
He conseguido que me funcione, pero de otra manera.

He entrado en la web del router y, en la sección DMZ he puesto la IP privada del


Arduino (la ayuda del router explica los siguiente: “Host de DMZ (Host expuesto) :
Esta página permite configurar un dispositivo específico de la red para que esté
expuesto o sea visible directamente a la WAN (Internet público). Esto se puede usar
cuando hay aplicaciones problemáticas que no funcionan con los activadores de
puertos. Un “0” significa que no hay hosts expuestos.”) . Con esto ya he conseguido
que me muestre la web del led y he podido activarlo y desactivarlo. Pero con el
forwarding de puertos no he sido capaz. No sé, investigaré más a ver si lo hago
funcionar, pero…

Saludos

admin 29 oct 2015


Alvaro, cuando algo que no funcionaba funciona es buen momento para abrir una
cervecita y celebrarlo. Cada router se configura a su particular manera y no hay que
liarse mucho mas.

Alvaro 28 oct 2015


A ver, que creo que hay algo que se me está escapando. He puesto en el port
forwarding del router el puerto 80 con protocolos TCP y UDP con la IP privada del
Arduino y ahora sí que funciona. Pero si en vez del 80 pongo otro número no va.
Pensé que ese número no tenía porqué ser obligatoriamente el 80. En fin, no sé, me
leeré otra vez la teoría, porque me he debido dejar algo.

Gracias por la ayuda y un saludo

admin 29 oct 2015


Alvaro, el port forwarding es una solucion que consiste en redirigir CUALQUIER cosa
que viene de fuera por un puerto determinado (EL 80 en tu caso porque has montado
un servidor web) a una direccion interna.
Es un modo de poner varios servidores detras de un router pero cada uno con propia
puerto. No serviría si necesitas 2 servidores web internos en el puerto 80, (pero si
http://www.prometec.net/ethernetled/ 11/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino
puerto. No serviría si necesitas 2 servidores web internos en el puerto 80, (pero si
con dos puertos distintos porque es el puerto el que identifica la direccion interna).
Por eso solo te funciona con el 80, pero podrias cambiar el puerto de tu servidor web
y entonces tendrias que mapear el nuevo puerto en el router
UN saludo

Alvaro 26 oct 2015


Hola

Reply Pues la cosa es que es así como lo tengo, pero no consigo que me cargue la página del Led. Otra pregunta, ¿qué puerto habría que
poner? Porque yo he puesto uno al azar (4176) buscando no coger ninguno d elos ya ocupados para otros servicios.

Saludos y gracias por tus respuestas

Alvaro 29 oct 2015


Hola
Entonces, si yo quisiera conectar 2 Arduinos con su correspondientes shields Ethernet y sus leds que se enciendan y se apaguen,
Reply pondría uno asignado al puerto 80 en el port forwarding del router, y el otro ¿en que puerto lo podría poner? ¿O sólo se puede poner un
servidor web en el mismo router?

Gracias y un saludo

admin 29 oct 2015


En efecto, puedes poner tantos sevidores web como quieras a condición de que cada uno este en un puerto distinto. ¿En
que puertos,? el primero en el 80 y luego enpiza por ejemplo en el 1000 y puedes seguir hasta el 65000 y pico
Reply Lo que el router hace es reconocer el puerto del paquete y reenviarlo a la IP que le hayas indicado

Alvaro 04 nov 2015


Hola

Reply Entonces, para usar otro puerto distinto del 80, ¿hay que tener antes ocupado el puerto 80 con otro servidor
web?

Saludos

admin 04 nov 2015


Hola Alvaro,
No. No es necesario. La idea es que cuando tu configuras el servidor por software, si no dices
Reply nada, se configura por defecto en el puerto 80, pero puedes indicarle cualquier otro port, sin mas
que especificarse lo.
tu puedes tener un servidor web en los puertos 121,412, 6534 sin problemas, pero para acceder a
ello tendrás que hacer un port mapping en tu router para indicarle a que IP interna debe ir con
cada puerto.
Puedes montar tantos como quieras a condición de que solo uno por puerto, y en cualquier
puerto que tu elijas

GIVE A REPLY

Name (required) Email (required)

URL

Message

http://www.prometec.net/ethernetled/ 12/13
19/11/2015 Controlando un LED por Ethernet | Tutoriales Arduino

Post comment
Comments Protected by WP-SpamShield for WordPress

Sí, agrégame a tu lista de correos.

CATEGORIAS DE LOS
PRODUCTOS

Selecciona una categoría

Copyright © 2014 Redline Asesores All Rights Reserved. | Redline Asesores

http://www.prometec.net/ethernetled/ 13/13

Das könnte Ihnen auch gefallen