Para poder añadir conectividad de Ethernet a Arduino disponemos de varios tipos de Ethernet Shield y breakout boards, pero principalmente el chip que tiene el interfaz ethernet y la pila de protocolos TCP/IP es el chip Wiznet W5100 y más recientemente el W5500, pero podemos encontrarnos shields intermedios basados en el W5200. La librería a usar dependerá del chip ethernet usado al estilo de un driver en un ordenador.
Existen otras shields o breakout boards basadas en otros chips y con otras librerías como el ENC28J60:
- http://www.tweaking4all.com/hardware/arduino/arduino-enc28j60-ethernet/
- Librería: https://github.com/muanis/arduino-projects/tree/master/libraries
- Web del producto http://www.microchip.com/wwwproducts/en/en022889
- Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/39662e.pdf
Cómo elegir la correcta librería para añadir Ethernet cn enc28j60 a Arduino: http://www.homautomation.org/2014/10/27/how-to-choose-the-right-library-to-add-ethernet-enc28j60-to-your-arduino/
Ethernet Shield V1
El Arduino Ethernet Shield V1 nos da la capacidad de conectar un Arduino a una red ethernet. Es la parte física que implementa la pila de protocolos TCP/IP.
Ethernet Shield permite a una placa Arduino conectarse a internet. Está basada en el chip ethernet Wiznet W5100. El Wiznet W5100 provee de una pila de red IP capaz de soportar TCP y UDP. Soporta hasta cuatro conexiones de sockets simultáneas. Usa la librería Ethernet para escribir programas que se conecten a internet usando la shield.
Datasheet de W5100: https://www.sparkfun.com/datasheets/DevTools/Arduino/W5100_Datasheet_v1_1_6.pdf
Para manejar este shield disponemos de la librería Ethernet: http://arduino.cc/en/Reference/Ethernet
El shield provee un conector ethernet estándar RJ45. La ethernet shield dispone de unos conectores que permiten conectar a su vez otras placas encima y apilarlas sobre la placa Arduino.
Arduino usa los pines digitales 10, 11, 12, y 13 (SPI) para comunicarse con el W5100 en la ethernet shield. Estos pines no pueden ser usados para e/s genéricas. El botón de reset en la shield resetea ambos, el W5100 y la placa Arduino.
El jumper soldado marcado como “INT” puede ser conectado para permitir a la placa Arduino recibir notificaciones de eventos por interrupción desde el W5100, pero esto no está soportado por la librería Ethernet. El jumper conecta el pin INT del W5100 al pin digital 2 de Arduino.
La shield contiene varios LEDs para información:
- ON: indica que la placa y la shield están alimentadas
- LINK: indica la presencia de un enlace de red y parpadea cuando la shield envía o recibe datos
- 100M: indica la presencia de una conexión de red de 100 Mb/s (de forma opuesta a una de 10Mb/s)
- RX: parpadea cuando el shield recibe datos
- TX: parpadea cuando el shield envía datos
Un tutorial sencillo para comenzar con el shield ethernet en: http://www.artinteractivo.com/arduino-ethernet
Para cualquier duda sobre el ethernet Shield consultar: http://arduino.cc/en/Main/ArduinoEthernetShield
Puntos a recordar del Ethernet Shield:
- Opera a 5V suministrados desde la placa de Arduino
- El controlador ethernet es el W5100 con 16K de buffer interno. No consume memoria.
- El shield se comunica con el microcontrolador por el bus SPI, por lo tanto para usarlo siempre debemos incluir la libreria SPI.h: http://arduino.cc/en/Reference/SPI
- Soporta hasta 4 conexiones simultáneas
- Usar la librería Ethernet para manejar el shield: http://arduino.cc/en/Reference/Ethernet
- El shield dispone de un lector de tarjetas micro-SD que puede ser usado para guardar ficheros y servirlos sobre la red. Para ello es necesaria la librería SD: http://arduino.cc/en/Reference/SD
- Al trabajar con la SD, el pin 4 es usado como SS.
Nuestro Arduino UNO se comunica con W5100 y la tarjeta SD usando el bus SPI a través del conector ICSP. Por este motivo los pines 10, 11, 12 y 13 en el UNO y los 50, 51, 52 y 53 en el Mega no podrán usarse. En ambas placas los pines 10 y 4 se usan para seleccionar el W5100 y la tarjeta SD.
El W5100 y el SD no pueden trabajar simultáneamente y debemos tener cuidado al usar ambos de forma conjunta.
El esquemático lo podéis encontrar en: http://arduino.cc/en/uploads/Main/arduino-ethernet-shield-06-schematic.pdf
El Ethernet shield es compatible con PoE gracias a un módulo adicional que extrae la energía eléctrica del cable ethernet, anteriormente inyectada desde el switch.
Las características del módulo PoE:
- IEEE802.3af compliant
- Low output ripple and noise (100mVpp)
- Input voltage range 36V to 57V
- Overload and short-circuit protection
- 9V Output
- High efficiency DC/DC converter: typ 75% @ 50% load
- 1500V isolation (input to output)
Data sheet: http://arduino.cc/en/uploads/Main/PoE-datasheet.pdf
Ethernet Shield V2
Arduino Ethernet Shield V1 es una placa que aparece en la web de arduino.cc como retirado, pero sigue estando disponible como clones o versiones derivadas.
Existe una nueva versión del Ethernet Shield llamada Arduino Ethernet Shield 2 con el nuevo Wiznet 5500: https://www.arduino.cc/en/Main/ArduinoEthernetShield
Este Shield usa la librería Ethernet 2 cuya sintaxis es igual que la librería Ethernet: https://www.arduino.cc/en/Reference/Ethernet
Data sheet de W5500: https://www.sos.sk/productdata/15/26/12/152612/W5500_datasheet_v1.0.2_1.pdf
Mejoras de W5500: https://feilipu.me/2014/11/16/wiznet-w5500-ioshield-a
Arduino Ethernet Shield 2:
- http://www.arduino.org/products/shields/arduino-ethernet-shield-2
- Librería Ethernet2: http://www.arduino.org/learning/reference/ethernet-two-library
- https://github.com/adafruit/Ethernet2
Otros Arduinos con Ethernet
Existe un Arduino Ethernet que es casi igual a un arduino UNO + Ethernet Shield: https://www.arduino.cc/en/Main/arduinoBoardEthernet
También existe el Arduino Leonardo ETH que es casi lo mismo que un Arduino Leonardo + un Ethernet Shield 2: https://www.arduino.cc/en/Main/ArduinoBoardLeonardoEth
Para las tarjetas basadas en el chip wiznet 5200:
- Artículo W5200: http://feilipu.me/2013/08/03/wiznet-w5200-arduino-shield/
- Ethernet shield con W5200: http://www.seeedstudio.com/wiki/Ethernet_Shield_V2.0
- Librería W5200 seedstudio: https://github.com/Seeed-Studio/Ethernet_Shield_W5200
Power over Ethernet
El Ethernet shield es compatible con PoE gracias a un módulo adicional que extrae la energía eléctrica del cable ethernet, anteriormente inyectada desde el switch.
Las características del módulo PoE:
- IEEE802.3af compliant
- Low output ripple and noise (100mVpp)
- Input voltage range 36V to 57V
- Overload and short-circuit protection
- 9V Output
- High efficiency DC/DC converter: typ 75% @ 50% load
- 1500V isolation (input to output)
Data sheet: http://arduino.cc/en/uploads/Main/PoE-datasheet.pdf
Más información sobre el Power Over Ethernet:
Como funciona PoE: http://www.bb-elec.com/Learning-Center/All-White-Papers/Ethernet/Power-over-Ethernet-PoE.aspx
Phantom Feeding:
Alimentación sobre cables libres:
Práctica: Uso Ethernet Shield
IP Dinámica con Arduino. DHCP
Configurar Arduino con el ethernet shield de forma que coja la IP dinámicamente por DHCP y lo muestre por pantalla.
Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio32-DHCP
IP Fija con Arduino
Configurar Arduino con el ethernet shield de forma que le asignamos una IP fija con la siguiente configuración:
- IP: 192.168.6.1YY. Siendo YY el número = 30 + número del kit. Por ejemplo para el kit 4 la IP es la 192.168.6.134 y para el kit 16 la IP es es 192.168.6.146.
- Subnent: 255.255.255.0
- Gateway: 192.168.6.1
- DNS: 8.8.8.8
Grabar Datos en Tarjeta SD
El Ethernet shield tiene disponible una ranura para tarjetas microSD. Arduino es capaz de leer y escribir en la tarjeta microSD mediante la librería SD: https://www.arduino.cc/en/Reference/SD
Leer la documentación de la librería SD y entender qué hace cada una de las clases y sus métodos.
Insertar una tarjeta microSD y hacer un programa que grabe los datos de temperatura en un archivo llamado temp_log.csv cada 5 segundos. Los datos a guardar son: segundos desde inicio con la función millis() y la temperatura del sensor TMP36.
Opcionalmente crear un menú con 3 opciones:
- 1 – Muestra el último dato guardado en la SD
- 2 – Vuelca el contenido del fichero temp_log.csv por consola
- 3 – Borra el contenido del fichero
Esquema de conexión: