jueves, 5 de julio de 2012

Uso del módulo ethernet ENC28J60 con Arduino : Parte 1

Hola, en esta ocación quiero compartir un tutorial para utilizar un módulo ENC28J60 que proporciona conectividad ethernet a cualquier microcontrolador, en este caso lo usaremos mediante un Arduino o sea un Atmega328

En el mercado encontraremos diferentes presentaciones de este módulo, algunas vienen en formato de Shield, yo consegui una tarjeta mas pequeña pero que se cablea facilmente al Arduino

El módulo que se uso para este tutorial es el siguiente:

Tambíen existe la version "shield":

En las bibliotecas de Arduino ya encontramos una librería ethernet, el problema es que esta librería esta diseñada para operar con un módulo diferente, el WIZnet W5100, por lo que no es compatible, despues de probar varias opciones al fin encontre una que funcionó sin problemas y que se puede descargar desde la sig. liga:

http://www.open-electronics.org/wp-content/uploads/2012/06/EtherCard.zip

Bueno empezaremos cableando el módulo ethernet al Arduino, para esto usamos el siguiente diagrama:


Cabe mencionar que la comunicacion entre el módulo ethernet y el arduino se lleva acabo utilizando un protocolo que se llama SPI o Serial Peripheral Interface


SPI es un protocolo serial sincrono que se utiliza para comunicar un microcontrolador con otro y con periféricos a distancias cortas.


Para hacer una conexion SPI siempre habrá un dispositivo maestro (usualmente un microcontrolador) que controlará uno o varios periféricos (esclavos), se utilizan por lo generar 3 lineas de conexión  y una de selección que son:


* SO o MISO (Master In Slave Out). La linea que utiliza el esclavo para enviar datos al maestro
* SI o MOSI (Master Out Slave In). Datos del maestro al esclavo.
* SCK (Serial clock). Pulsos de reloj para sincronizar la comunicación
* CS o Select. Se usa por el master para habilitar o deshabilitar un determinado periférico


Los microcontroladores atmel incluyen las 4 lineas para usar protocolo SPI las cuales obviamente están presentes en los pines del arduino, para el arduino uno se deben usar: Pin digital 10 para CS, Pin digital 11 para SI, Pin digital 12 para SO y Pin digital 13 para SCK, en el caso del arduino mega se usaría los sig. pines: 50 (MISO), 51 (MOSI), 52 (SCK), and 53 (CS).


La alimentación del módulo puede ser a 3.3 o 5V, yo usé ambos para las pruebas y no encontré ninguna diferencia así que lo deje puesto a 3.3V.




Así queda nuestro módulo cableado:





Después de cablear el módulo lo que sigue es instalar la librería, como estoy usando la versión de Windows, las rutas serán en ese formato, primero busco el archivo que descargué, el mio quedó guardado con el mismo nombre EtherCard.zip



A continuación descomprimo el archivo y envío la carpeta descomprimida al directorio de Arduino/libraries (o la ruta donde esté instalado el ide de arduino)




Después de este paso abrimos el IDE de arduino y en el menu de Ejemplos ya deben aparecer los ejemplos de la libreria EtherCard



Seleccionamos el ejemplo pingsStaticIP


En las variables myip y gwip colocamos primero la ip que querramos asignar al arduino (en mi caso 192.168.1.188) y después la ip de nuestra puerta de enlace o gateway, en méxico para las redes de infinitum y una gran mayoría de las redes domésticas este valor es el que se muestra (192.168.1.254), una vez hecho este pequeño cambio descargamos el script al arduino y abrimos el monitor serial donde vemos el arranque del script:


Si analizamos el script vemos que hay una rutina que obtiene via dns la direccion ip del dominio www.google.com y se queda enviándole pings, en el monitor vemos los tiempos de respuesta del servidor de google (Esta parte solo funcionará si estamos conectados a internet).

Si nosotros abrimos una ventana de comandos y hacemos ping a la dirección ip del arduino debemos ver una respuesta como la de abajo, en la pantalla del monitor serial tambíen podemos ver las solicitudes de ping enviadas por la pc y recibidas por el arduino


Si lograron llevar acabo con éxito todos los pasos felicidades! oficialmente acaban de darle conectividad de red a su arduino.

En la segunda parte del tutorial aprenderemos como convertir nuestro arduino en un servidor web para poder monitorear y controlar las salidas y entradas de la placa, hasta la próxima!

Con información tomada de:





20 comentarios:

  1. Gracias por tu aporte fue de gran ayuda para mi. Espero me puedas pasar como controlar la placa arduino con esta libreria, gracias mi correo es alltrips.stafe@gmail.com

    ResponderEliminar
  2. Muy agradecido. Añadir como incentivo q por 11-12€ lo compramos en tiendas ebay de españa.Busquen por ENC28J60.

    ResponderEliminar
  3. soy de argentino muchas gracias me diste una mano barbara!!!!!
    excelente tutorial!!!!!!
    un abrazo y felices fiestas!

    pd: donde esta la segunda parte del tutorial.

    ResponderEliminar
    Respuestas
    1. Gracias e igualmente saludos al cono sur!!, la segunda parte del tutorial esta aca http://tecnotinker.blogspot.mx/2012_12_01_archive.html

      Eliminar
  4. buenas, yo tengo el arduino mega 2560 donde cambio la asignación de los pines??

    ResponderEliminar
  5. No es necesario hacer cambios en el codigo ya que la biblioteca se ajusta automaticamente dependiendo de la configuracion del ide, si usas un mega solo asegurate de usar los pines adecuados, en el articulo indico cuales son (50, 51, 52 y 53)

    ResponderEliminar
  6. Hola, excelente aporte! Tengo problemas al correr el programa, en el monitor serial se queda en [pings] sin hacer más nada, tampcoresponde ping, ya revise las conexiones y están OK. Usaba antes este módulo ethernet con PIC sin problemas, me llama la atencion que los pines reset y WOL queden desconectados.
    Alguna sugerencia?

    Saludos.-

    ResponderEliminar
    Respuestas
    1. Hmm no me das mucha informacion, cual es la ip de la computadora donde estas haciendo las pruebas?, si la configuracion de red es correcta otra opcion posible es que la libreria no sea 100% compatible con el módulo que estás usando, a mi me paso eso al principio y tuve que probar 2 o 3 librerias diferentes hasta que encontre esta que viene en el tutorial

      Eliminar
    2. El GW de la red en la que estoy trabajando es 192.168.0.1/24 y conecto el módulo a un switch común y corriente. El tema es que en el serial monitor se queda [pings] y no pasa nada de nada.
      El módulo es igual al de la foto tuya (en mi caso marca LC Studio)y ya lo utilicé antes sin ningún problema. ¿Tendrás los links de las otras librerías para probar?

      Saludos.-

      Eliminar
    3. Bueno encontré algunas cosas que están mal en la librería para esta configuración: el archivo enc28j60.cpp tiene los pines asignados para el caso de arduino uno y mega, pero en el caso del mega para el pin SS indica 2, lo corregí a 53, y además configuré el pin como salida y lo puse en alto.
      Ahora los led's del módulo en el conector ethernet están uno encendido y el otro parpadea, pero en el monitor serial sigue apareciendo solamente [pings] y no responde.

      Eliminar
    4. a mi me pasa exactamente lo mismo que a luciano B, aunque sin querer invertí la polaridad en el modulo ethernet (cosa de hacer las cosas con prisa) y no se si me cargué el módulo, porque cuando lo enchufo en el router, la luz del puerto en este, aparece naranja en vez de amarilla.

      gracias por el tutorial

      Eliminar
  7. ya he conseguido que me funcione con otras librerías que me he descargado EtherShield_Arduino_v1.zip.

    gracias de nuevo

    ResponderEliminar
    Respuestas
    1. David, puedes poner que pines conectas al Mega ?

      Eliminar
  8. Gracias a ti David, puedes compartir la liga de la libreria para futuras referencias?

    ResponderEliminar
  9. Hola que tal.

    Interesante post, pero no me funciona en mi Arduino DUE, genera errores cuando compilo. Alguna idea o sugerencia.

    ResponderEliminar
    Respuestas
    1. Hola hasta hoy no he tenido oportunidad de probarlo en el DUE pero alguien comento que la libreria tiene un error de asignacion de pines en el mega, se me ocurre que tal vez esto pudiera originar el problema, tampoco estoy muy enterado si las librerias de los avr (mega y uno) se pueden utilizar directamente en los DUE, quiza quieras mirar alguna otra libreria

      Eliminar
  10. Tengo un problema con esta librería. Tengo una placa arduino mega, los pines se que son los 50, 51,52,53.
    Mi problema es al compilar el código, me da un error:
    Ethernet no fue declarado y me señala en rojo, la línea de
    byte Ethernet::buffer[700];
    Alguien tiene idea de como solucionar este problema....

    ResponderEliminar
  11. Saludos;

    Los pines para leonardo cambian?, es que tego una placa leonardo y ya conecte todo como lo indicas, pero no consigo que me funcione.

    ResponderEliminar
  12. Excelente la explicación, ojala vengan muchos tutoriales como este, saludos

    ResponderEliminar
  13. Excelente el Articulo!, debo aclarar que en mi caso, con arduino uno, tuve que cambiar el parámetro del serial a 9600 (estando desde el ejemplo en 57600.. o algo asi), y que solo funciona conectandolo directamente al router. No pude arreglarmelas solo para establecer una comunicacion directa con la pc sin router de por medio. Si alguien tuvo el ingenio, estaria agradecido por la respuesta. Saludos!!!

    ResponderEliminar