Este documento presenta un tutorial sobre cómo conectar un Arduino a una red Ethernet utilizando un shield Ethernet. Explica cómo configurar la conectividad Ethernet, los conceptos de red IP subyacentes como las direcciones MAC y IP. También describe cómo implementar un modelo cliente-servidor para enviar y recibir datos a través de la red, mostrando un ejemplo de código de Arduino para un servidor básico y las funciones necesarias.
Este documento presenta un tutorial sobre cómo conectar un Arduino a una red Ethernet utilizando un shield Ethernet. Explica cómo configurar la conectividad Ethernet, los conceptos de red IP subyacentes como las direcciones MAC y IP. También describe cómo implementar un modelo cliente-servidor para enviar y recibir datos a través de la red, mostrando un ejemplo de código de Arduino para un servidor básico y las funciones necesarias.
Este documento presenta un tutorial sobre cómo conectar un Arduino a una red Ethernet utilizando un shield Ethernet. Explica cómo configurar la conectividad Ethernet, los conceptos de red IP subyacentes como las direcciones MAC y IP. También describe cómo implementar un modelo cliente-servidor para enviar y recibir datos a través de la red, mostrando un ejemplo de código de Arduino para un servidor básico y las funciones necesarias.
1. Introduccin Hoy en da donde se vive la tendencia de cualquier dispositivo conectarlo a la Red IP sea en una red pequea o a travs de internet, basado en esta tendencia es necesario conectar nuestra plataforma arduino a la red, teniendo esto conecto podemos enviar/recibir informacin va IP desde cualquier dispositivo de red, pudiendo ser estos dispositivos PCs, Smartphone, Tablets o cualquiera que soporte el protocolo de red. Mediante el Shield Ethernet de Arduino conseguimos esta funcionalidad que nuestra dispositivo envi (controla) o recibe (monitorea) informacin del arduino. Adicionalmente quisiramos mencionar que el tutorial se baso en el uso del shield Ethernet de Arduino (Original), por lo tanto no garantiza que todo sea vlido si se usa un Shield Ethernet Compatible. 2. El Modulo Ethernet : Podemos mencionar brevemente sobre este modulo que su comunicacin con el arduino es mediante SPI por lo que utiliza los pines 10,11,12 y 13 del Arduino, quedando estos pines no disponibles para alguna operacin del mismo Arduino por lo que no podemos conectar algn sensor o dispositivo E/S usando el Modulo. Adicionalmente el Shield Ethernet posee un conector para una MicroSD el cual si se usa utiliza el pin4 del Arduino, mayor referencia al uso de la microSD sugerimos leer el Libro de Arduino publicado por Creatividad Ahora.
Lunes, 26 de mayo de 2014 3
www.creatividadahora.com Conectaremos el Shield encima del Arduino, luego el shield hacia la red mediante conector RJ45. 3. La red IP: Previo a empezar con el cdigo en el Arduino, haremos una descripcin general de un esquema de Red en el cual arduino formara parte, el esquema esta lo ms generalizado posible con los diferentes dispositivos.
Segn el Diagrama, los dispositivos que pertenecen a la red son: Switch: Forma o es parte de la red, permite la comunicacin entre los diferentes elementos de red, cabe mencionar que no puede hacer que se comuniquen de una red a otra, sino en la misma red, se le conoce como nivel 2 (L2). Router: Permite comunicar diferentes redes en este caso conecta una red Local a otra red que es Internet, se le conoce dispositivo de nivel 3 (L3). Dispositivo de Red: elementos que forman parte de la red como PC, Laptops, Tablet (wifi), Smarphone (Wifi), Impresoras IP, etc.
Lunes, 26 de mayo de 2014 4
www.creatividadahora.com Los elementos de red se encuentran diferenciados uno de otros mediante lo que son direcciones, estas direcciones se le conocen como Direccin Fsica (Direccin MAC) que pertenecen propiamente a la Tarjeta de Red (NIC), a su vez se encuentran tambin con direcciones Lgicas llamadas direcciones IP, estas direcciones IP asignadas a cada elemento de red provienen de la direccin de Red asignada a a red el esta trabaja en conjunto con la mscara de red. Las direcciones Fiscas constan de 6 bytes, y la direccin de red as como la mascara de red de 4 bytes el cual tiene el siguiente formato x.y.z.w, donde x,y,z,w entra entre 0 a 255 (son bytes). Los Shield Ethernet de arduino tienen la direccin MAC pegada en la parte trasera de la placa, tenga en consideracin que un shield Ethernet que no tenga la direccin MAC pegada es un compatible. Todos los originales sin excepcin tienen la MAC en la parte trasera.
4. Iniciando la conectividad Para iniciar la funcionalidad del Ethernet solo es necesario la ejecucin de un comando el cual lleva 4 Argumentos ( No todos son Obligatorios). Ethernet.begin(mac,ip,gateway,netmask); //No olvidar el ; Donde se tiene: Lunes, 26 de mayo de 2014 5
www.creatividadahora.com Mac: Direccin Fisica MAC de la tarjeta, la cual viene impresa en la parte posterior de la tarjeta, cabe mencionar que solo las tarjetas Originales la tienen. Ip: Direccion Logica Ip a aseginarse al Arduino, debe tener concordancia con la direccion Ip de red asi como debe ser nica en la red. Gateway: Puerta de Enlaced. Netmask: Mascara de red. Con esta sentencia ya debera tener conectividad el Arduino con los demas elementos de red, para probar conectividad se puede usar el comando Ping ip. Ejemplo: Si su pc tiene la IP 192.168.10.15 y ud le asigno al arduino la ip 192.168.10.50, entonces desde su pc si ud ejecuta el comando en el cmd : ping 192.168.10.50 debe tener el siguiente mensaje de tener conectividad Pinging 192.168.10.50 with 32 bytes of data: Reply from 192.168.1.1: bytes=32 time=22ms TTL=64 Reply from 192.168.1.1: bytes=32 time=70ms TTL=64 Reply from 192.168.1.1: bytes=32 time=59ms TTL=64 Reply from 192.168.1.1: bytes=32 time=6ms TTL=64
El cual indica que el Test ha sido exitoso. 5. Cliente - Servidor Hasta el momento lo que se ha probado es netamente conectividad, sin embargo lo que deseamos realmente es la transferencia de informacin entre un dispotivo de red (como PC o tablet) con el Arduino, para ello es necesario manejar el concepto de cliente-servidor 6. Objetos a crear
Lunes, 26 de mayo de 2014 6
www.creatividadahora.com Una vez probada la conectividad es necesario el envi y recepcin de informacin a travs de la red, para realizar esta tarea usaremos el modelo Cliente/Servidor donde podemos definir los siguientes elementos: Servidor: Es el elemento que ofrecer un servicio para que los clientes lo utilicen, el servicio vendr identificado por un numero de Puerto, cabe mencionar que un elemento de red que ser servidor puede ofrecer uno o mas servicios, la forma de diferenciar un servicio de otro es mediante el puerto, este proceso es lo que se conoce como Socket. Cliente: Elemento que usara un servicio brindado por el servidor, entonces podemos definir que un cliente al usar un servicio deber conocer la Ip del servidor (Ip identifica al elemento en la red) y el puerto ya que este identifica al servicio. Arduino Puede trabajar como Cliente y Servidor, inclusive puede ser ambos en simultaneo dependiendo del aplicativo a usar Declaracion EthernetServer server EthernetServer(#puerto); //se define un servidor cuyo nombre es //server y se identifica al servicio por el #puerto dado. EthernetClient cliente ; //define un cliente basado en la clase EthernetClient. EthernetClient cliente = server.available(); //inicializa un cliente en base a la coneccion al servidor.
7. Funciones En base al servidor, recordar primero definirlo. server.begin(); //inicializa el servidor server.write(valor); //informacin enviada a todos los cliente, byte o char server.print(valor); //Envio de cadena ascii a todos los clientes sin salto de lnea. server.println(valor); //envio de cadena ascii a todos los clientes con salto de lnea. cliente.connected();//devuelve true si el cliente esta conectado, false si no. cliente.read(); //devuelve byte o char disponible en el buffer. cliente.connect(ip, #puerto); //se conecta a un servidor, necesita ip y puerto (servicio). cliente.print(vaor); //envio de cadena ascii al servidor sin salto de lnea. cliente.println(valor); //envio de cadena ascii al servidor con salto de lnea. cliente.available(); //devuelve el nro de bytes disponibles en el buffer para lectura. Lunes, 26 de mayo de 2014 7
www.creatividadahora.com cliente.flush(); //borra los bytes que aun no han sido leidos. cliente.stop(); //Detiene la conexin con el servidor, produce la desconexin.
8. Codigo de Prueba Basado en esto crearemos un Servidor con arduino e imprimiremos cualquier carcter enviado por algn cliente en el Serial, el cdigo es el siguiente: #include <Ethernet.h> #include <SPI.h> byte mac[]={0x90,0x50,0x20,0x1A,0x32,0x45}; byte ip[]={192,168,1,10}; byte gateway[]={192,168,1,1}; byte netmask[]={255,255,255,0}; EthernetServer server = EthernetServer(2000); void setup(){ Ethernet.begin(mac,ip,gateway,netmask); //iniciamos el Ethernet Serial.begin(9600); //iniciamos el Serial server.begin(); //iniciamos el servidor }
void loop(){ EthernetClient cliente = server.available(); //cliente disponible creamos el objeto if(cliente.connected()){ char c = cliente.read(); //leemos datos del cliente tipo char Serial.println(c); //imprimimos el dato en el serial } }
Lunes, 26 de mayo de 2014 8
www.creatividadahora.com 9. Prueba Final Teniendo esto implementado, usar un cliente de cualquier lenguaje de su preferencia, en clase usaremos lo adjuntos de cliente/servidor JAVA el cual puede descargar de la web y lo ejecuta desde netbeans.