Tutorial Básico - Arduino Ethernet Shield

Hola chic@s,

os traigo un nuevo tutorial que hice hoy. Se trata de como hacer un uso básico del Arduino Ethernet Shield. En el tutorial se usa como servidor para mostrar vía web el tiempo que ha transcurrido desde que se encendido Arduino. Los datos se auto refrescan para que no tengamos que estar refrescando nosotros la pagina. Y como es lógico, se pueden mostrar cualquier otro dato.

Tutorial - Arduino Ethernet Shield

Espero que os sea útil. Saludos.

Buen tutorial compañero, muchas gracias!!!

¿Para cuando uno que haga lo mismo desde Internet? :wink:

Un saludo!!!

fjramirez:
Hola chic@s,

os traigo un nuevo tutorial que hice hoy.

Muchas gracias DIOS que facil. Me dan ganas de buscar más informacion y realizar algún proyecto que tengo en mente.
Quizá las dudas que se me plantean (que seguro que googleando o buscando en la documentación del ethernet shield quedarán solucionadas) son por ejemplo:
Cómo enviar parámetros a esa petición?

p.ej:

http://192.168.1.x/getTemperature
http://192.168.1.x/getHumidity
http://192.168.1.x/setLed?led5=on&led4=off

Esto daría una capacidad de interactuar con arduino a través de un navegador muy interesante. :slight_smile:

Edit:
O a la inversa:
Un programa que cuando haga saltar un sensor (se detecta un nivel critico de humedad), envie una petición http (o incluso un email).
p.ej:
http://miservidor.com/alertasms/enviaAlerta.php?sensorhumedad=critico

Jukar:
¿Para cuando uno que haga lo mismo desde Internet? :wink:

Para hacer el mismo ejemplo de fjramirez pero desde internet, bastaría con configurar el router de tu casa para que las peticiones externas que vienen del puerto 80 (http) vayan dirigidas a la ip interna del ethernet shield (en el caso del ejemplo 192.168.1.177.
Si no sabes cómo hacerlo, busca información de como configurar NAT en el modelo de tu router.

Para hacer este ejemplo pero desde la red externa es como dice joselet, solo hay que poner la ip publica de nuestro router. Y tener en cuenta que solemos tener una ip dinámica (se podría solucionar con un servidor de dns).

Bueno, me apuntare esta petición para futuros tutoriales. :wink:

Saludos

fjramirez:
Para hacer este ejemplo pero desde la red externa es como dice joselet, solo hay que poner la ip publica de nuestro router. Y tener en cuenta que solemos tener una ip dinámica (se podría solucionar con un servidor de dns).

Eso del servidor DNS estaría muy bien. Pero ese tuto, estaría genial teniendo en cuenta los modestos recursos de algunos.
Yo personalmente lo he resuelto a través de "no-ip.com". He adquirido un dominio gratuito, y con el software de ellos voy actualizando mi ip pública contínuamente.

Se me ocurre otra idea usando un hosting normal... pero vamos, la solución más sencilla diría que es esta.

joselet:

fjramirez:
Para hacer este ejemplo pero desde la red externa es como dice joselet, solo hay que poner la ip publica de nuestro router. Y tener en cuenta que solemos tener una ip dinámica (se podría solucionar con un servidor de dns).

Eso del servidor DNS estaría muy bien. Pero ese tuto, estaría genial teniendo en cuenta los modestos recursos de algunos.
Yo personalmente lo he resuelto a través de "no-ip.com". He adquirido un dominio gratuito, y con el software de ellos voy actualizando mi ip pública contínuamente.

Se me ocurre otra idea usando un hosting normal... pero vamos, la solución más sencilla diría que es esta.

Claro, me refería a servicios como no-ip.com :wink:

Gracias fjramires! buen aporte, yo también tengo un proyecto en desarrollo usando la comunicación ethernet para hacer un servidor domótico y fue averiguando sobre esto que me entere lo que era el Internet de las cosas y creo que es una de las grandes ventajas la facilidad con la que se puede desarrollar aplicaciones web que ofrece esta plataforma open source, para la anécdota cuando todavía cursaba segundo ciclo de bachillerato en ingeniería electrónica, con mis amigos del barrio (así se le dice aquí en Perú ala vecindad donde vives :)) buscábamos una forma de hacer empresa o proyectos novedosos y como uno de ellos tenia un taller de mecánica donde fabricaba teteras, entonces entre risas se nos ocurrió que en el futuro nosotros podríamos hacer una red de teteras inteligentes, eramos a un cachimbo de ingeniera de software, un fabricante de teteras y yo era estudiante de electrónica, no me iba a imaginar que en el otro lado del mundo se iban a estar desarrollando proyectos para poder poner los objetos comunes a comunicarse con los usuarios de internet, ahora ese tema lo estoy estudiando profundamente para desarrollar mi tesis. Me da gusto que en este foro exista mucha gente que tenga espíritu de compañerismo y fomente el desarrollo compartiendo sus ideas y experiencias.

Como hoy es el primer día del año les deseo un fructífero año 2014 a todos los foreros Arduino.
Saludos desde Perú :stuck_out_tongue_closed_eyes:

Pregunta: cuantos arduinos puedo conectar al router sin que existan problemas??
Saludos y espero tu respuesta.

serch_cdt:
Pregunta: cuantos arduinos puedo conectar al router sin que existan problemas??
Saludos y espero tu respuesta.

mmmm... buena pregunta esa...
Pues la verdad a ciencia cierta no lo se. Pero si que te puedo decir que eso esta limitado por tu router. Si es por ethernet, sabes que solo tienes unos x puertos. Puedes usar switch para disponer de mas puertos ethernet con el inconveniente que el ancho de la red ira disminuyendo...

Por wifi pasa algo similar, tu router solo puede gestionar x dispositivos.

Tantos arduinos vas a conectar a la red que te preocupa esto?? o simplemente es mera curiosidad??

serch_cdt:
Pregunta: cuantos arduinos puedo conectar al router sin que existan problemas??
Saludos y espero tu respuesta.

Entiendo que esa limitación no la pone arduino sino la configuración en si de red. Mientras tengas infraestructura para conectarlos, con un direccionamiento adecuado podrás conectar muuuuuuchos X-D

El tema del "servidor web" ese que atiende a las peticiones está muy bien. Algo así sería interesante para recuperar los datos obtenidos con el arduino
En uno de mis proyectos, recibo la información por ethernet del arduino, mediante una conexión realizada con una aplicación Java alojada en un NAS. Dichos datos los alojo en un servidor MySQL montado en el mismo NAS.

Cada x tiempo pillo los datos del arduino con la aplicación, los alojo en el servidor mysql y nueva vez ahí los trato (serán y son datos meteorológicos.-)

Saludos.-

hola, disculpen la ignorancia, pero desde hace un tiempo estoy buscando como configurar el arduino para poder acceder desde internet, ya que hasta ahora solo puedo desde la red local y veo que hay quienes ya lo han hecho, alguien podría por favor ayudarme con esto?

geexbox:
desde hace un tiempo estoy buscando como configurar el arduino para poder acceder desde internet

Pero, el código o el método...??? El tutorial de este post está muy bien explicado, y tienes el código también...Otra cosa es que quieras hacer algo concreto para controlar algún dispositivo concreto...

Si tienes Ip pública dinámica, mirate este post, que está el código para acceder a través de un servicio de dns dinámicas llamado no-ip (Gratuito por un año creo..):

http://forum.arduino.cc/index.php?topic=95456.15

Y si tienes estática, lo único de tienes que hacer es configurar tu router (Abrir un puerto en el apartado nat o port forwarding o port mapping o como se llame en tu router, configurar ese puerto en el sketch y sólo te faltaria acceder desde fuera con http://tu ip pública:puerto que configuraste)

Si te dás una vuelta por el foro, verás que hay muchos posts qe hablan sobre el ethernet shield..

Saludos

Tengo un pregunta , puedo poner 2 arduino ethernet shield, en un arduino mega ?
y utilizarlos al tiempo ?

joselet:
Eso del servidor DNS estaría muy bien. Pero ese tuto, estaría genial teniendo en cuenta los modestos recursos de algunos.
Yo personalmente lo he resuelto a través de "no-ip.com". He adquirido un dominio gratuito, y con el software de ellos voy actualizando mi ip pública contínuamente.

Se me ocurre otra idea usando un hosting normal... pero vamos, la solución más sencilla diría que es esta.

Cual es esa otra idea? yo tengo un router de ono que solo me deja añadir como proveedor de dns dynamica a Dyndns y estos son de pago... con lo cual no puedo hacer ninguno de estos proyectos.
Alguien tiene alguna idea de como podria hacerse?

buenas tardes, yo tengo un problema al enviar datos con mi arduino nano y mi etehrent shield, al enviar datos a determinado tiempo 5 mins para ser mas preciso no me envia los datos, verificando solo me permite enviar datos a los 1:35 segundos como maximo si los envia hasta este tiempo, , necesito enviar los datos a los 5 minutos o mas, como me pueden colaborar, gracias....

no uso en delay por el tiempo por obvias razones no funciona delay, lo realizo con un ciclo, todo se cumple menos el envio de los datos anexo el codigo, gracias

#include <OneWire.h>
#include <SPI.h>
#include <UIPEthernet.h>
#include <DallasTemperature.h>
#include <UIPServer.h>
#include <UIPClient.h>
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); //Ethernet
EthernetClient client;
float b1;
float b2;
float celsius;
char server[] = "mi servidor.net";
int port = 80;
int dn = 210; // numero de identificacion sensor

void setup(void) {
Serial.begin(9600); //Abrir puerto serial
uint8_t mac[6] = {0x00,0x11,0x12,0x02,0x00,0x00}; // MAC ID NIC
delay(1000); // tiempo ESPERA INICIO NIC
while (!Serial) {
; //Espera por un puerto serial disponible
}
Ethernet.begin(mac);
Serial.print("IP Address : ");
Serial.println(Ethernet.localIP());
Serial.print("Subnet Mask : ");
Serial.println(Ethernet.subnetMask());
Serial.print("Default Gateway IP: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("DNS Server IP : ");
Serial.println(Ethernet.dnsServerIP());
}

void loop(void) {
unsigned int cont = 0;
while (cont < 280 ){ // pongo este tiempo por el delay de la luces
delay (1000);
sensors.requestTemperatures(); // OBTENEMOS DATOS TEMPERATURA
celsius = sensors.getTempCByIndex(0);
Serial.println( );
Serial.println(celsius);
Serial.println( );
Serial.println(250-cont);
//

if ((celsius < 6 ) && (celsius > -3)) //C1CL0 DE COMPARACION DE TEMP3R4TUR4 ALARMA
{
b1 = 0;
b2 = 0;
digitalWrite(13,LOW);
delay(200);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(200);
}
else if ( celsius > 6 )
{
b2 = 1;
b1 = 0;
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
}
else if (celsius < -3)
{
b1 = 1;
b2 = 0;
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
}
cont++;
}

if (client.connect(server, port))
{
Serial.println("Enviando Datos...");
Serial.println(celsius);
Serial.println(b1);
Serial.println(b2);
client.print( "GET a mi tabla y db");
client.print(celsius);
client.println( " HTTP/1.1");
client.print( "Host: " );
client.println(server);
client.println( "Connection: close" );
client.println();
client.stop();
client.println();
client.stop();
;
}
else
{
Serial.println("Fallo al intentar conectar con el servidor");
}
if (client.available())
{
char c = client.read();
Serial.print(c);
}
}

mi correo es: charlie.net@gmail.com, gracias de nuevo