CREATIVIDAD AHORA Uso del Shield Ethernet con Arduino Tutorial Arduino Creatividad Ahora 5/26/2014 Lunes, 26 de mayo de 2014 2 Tutorial del Manejo del Shield Ethernet R3 1. Introducción Hoy en día donde se vive la tendencia de cualquier dispositivo conectarlo a la Red IP sea en una red pequeña o a través de internet, basado en esta tendencia es necesario conectar nuestra plataforma arduino a la red, teniendo esto conecto podemos enviar/recibir información vía 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) información del arduino. Adicionalmente quisiéramos mencionar que el tutorial se baso en el uso del shield Ethernet de Arduino (Original), por lo tanto no garantiza que todo sea válido si se usa un Shield Ethernet Compatible. 2. El Modulo Ethernet : Podemos mencionar brevemente sobre este modulo que su comunicación 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 operación del mismo Arduino por lo que no podemos conectar algún 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. www.creatividadahora.com Lunes, 26 de mayo de 2014 3 Conectaremos el Shield encima del Arduino, luego el shield hacia la red mediante conector RJ45. 3. La red IP: Previo a empezar con el código en el Arduino, haremos una descripción general de un esquema de Red en el cual arduino formara parte, el esquema esta lo más generalizado posible con los diferentes dispositivos. Según el Diagrama, los dispositivos que pertenecen a la red son: Switch: Forma o es parte de la red, permite la comunicación 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. www.creatividadahora.com Lunes, 26 de mayo de 2014 4 Los elementos de red se encuentran diferenciados uno de otros mediante lo que son direcciones, estas direcciones se le conocen como Dirección Física (Dirección MAC) que pertenecen propiamente a la Tarjeta de Red (NIC), a su vez se encuentran también con direcciones Lógicas llamadas direcciones IP, estas direcciones IP asignadas a cada elemento de red provienen de la dirección de Red asignada a a red el esta trabaja en conjunto con la máscara de red. Las direcciones Fiscas constan de 6 bytes, y la dirección 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 dirección MAC pegada en la parte trasera de la placa, tenga en consideración que un shield Ethernet que no tenga la dirección MAC pegada es un compatible. Todos los originales sin excepción tienen la MAC en la parte trasera. 4. Iniciando la conectividad Para iniciar la funcionalidad del Ethernet solo es necesario la ejecución de un comando el cual lleva 4 Argumentos ( No todos son Obligatorios). Ethernet.begin(mac,ip,gateway,netmask); //No olvidar el ; Donde se tiene: www.creatividadahora.com Lunes, 26 de mayo de 2014 5 Mac: Dirección 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 debería 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 información 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 www.creatividadahora.com Lunes, 26 de mayo de 2014 6 Una vez probada la conectividad es necesario el envió y recepción de información a través 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); //información enviada a todos los cliente, byte o char server.print(valor); //Envio de cadena ascii a todos los clientes sin salto de línea. server.println(valor); //envio de cadena ascii a todos los clientes con salto de línea. 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 línea. cliente.println(valor); //envio de cadena ascii al servidor con salto de línea. cliente.available(); //devuelve el nro de bytes disponibles en el buffer para lectura. www.creatividadahora.com Lunes, 26 de mayo de 2014 7 cliente.flush(); //borra los bytes que aun no han sido leidos. cliente.stop(); //Detiene la conexión con el servidor, produce la desconexión. 8. Codigo de Prueba Basado en esto crearemos un Servidor con arduino e imprimiremos cualquier carácter enviado por algún cliente en el Serial, el código 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 } } www.creatividadahora.com Lunes, 26 de mayo de 2014 8 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. www.creatividadahora.com