Arduino - Escudo Ethernet

Usar el Ethernet Shield de Arduino es una de las formas más sencillas de conectar Arduino a Internet. Puedes ver otras opciones para conectar Arduino a Internet mediante Ethernet en Tutorial de Arduino - Ethernet

En este tutorial, vamos a aprender:

Escudo Ethernet de Arduino

Hardware Requerido

1×Arduino Uno R3
1×Cable USB 2.0 tipo A/B (para PC USB-A)
1×Cable USB 2.0 tipo C/B (para PC USB-C)
1×Arduino Ethernet Shield
1×Ethernet Cable
1×(Recomendado) Shield de Bloque de Terminales de Tornillo para Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Carcasa para Arduino Uno
1×(Recomendado) Placa Base de Prototipado y Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Conocimientos básicos de redes para principiantes

Esta parte proporciona conocimientos básicos para principiantes que no saben nada sobre redes.

Cuando un dispositivo se conecta a Internet (a través de Ethernet o WiFi), debe conectarse a un enrutador o a un punto de acceso. El enrutador y el punto de acceso son dispositivos que cumplen la función de puerta de enlace a Internet. Todos los datos entre un dispositivo y Internet pasan a través del enrutador o del punto de acceso.

Cuando un dispositivo se conecta a Internet, DEBE:

  • Tener una dirección MAC
  • Tener una dirección IP
  • Conocer la máscara de subred de la red
  • Conocer la dirección IP de la puerta de enlace (dirección IP del router o del punto de acceso)
  • Conocer la dirección IP del servidor DNS (en caso de conectarse a un nombre de dominio)

El dispositivo no funciona si alguno de los dos:

  • Hay uno o más otros dispositivos en la misma red que utilizan la misma dirección MAC del dispositivo (llamada dirección MAC en conflicto)
  • Hay uno o más otros dispositivos en la misma red que utilizan la misma dirección IP del dispositivo (llamada dirección IP en conflicto)

Este tutorial no te sobrecargará con el conocimiento de redes. Por lo tanto, este tutorial no explica estos conceptos. Está fuera del alcance de este tutorial. En su lugar, el tutorial muestra cómo usarlos.

La dirección MAC suele estar integrada en los dispositivos. No necesitamos preocuparnos por ella. Sin embargo, el escudo Ethernet de Arduino no tiene una dirección MAC integrada. La dirección MAC está impresa en una pegatina adherida al escudo. Necesitamos obtenerla y configurar la dirección MAC para el escudo Ethernet de Arduino en el código de Arduino.

Hay dos métodos para asignar la dirección IP, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS a un dispositivo (incluido Arduino):

  1. Usar la dirección IP estática:
    • Necesita gestionar la dirección IP, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS
    • Necesita configurar la dirección IP, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS manualmente (para Arduino Ethernet Shield, configure esta información usando código de Arduino)
    • No funcionará si:
      • Asignar una dirección IP que ya está siendo utilizada por otros dispositivos en la misma red LAN → conflicto de direcciones IP
      • Configurar incorrectamente la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS
  • Obtener una dirección IP automáticamente (DHCP), también llamada dirección IP dinámica
    • El dispositivo obtiene automáticamente la dirección IP, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS desde el router o punto de acceso usando DHCP. No necesitamos gestionar la dirección IP, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS. El router/punto de acceso hace este trabajo por nosotros.

    Cuando conectas tu teléfono inteligente a tu red WiFi doméstica, se utiliza el segundo método.

    Al usar Arduino, el primer método es difícil para los principiantes. El segundo método es fácil y recomendado para los principiantes que no saben de redes.

    Cómo usar el escudo Ethernet de Arduino

    Arduino se comunica con el Ethernet Shield a través de la interfaz SPI. A continuación se muestra cómo usar el Ethernet Shield de Arduino.

    • Coloca la Ethernet Shield sobre Arduino Uno o Mega
    • Conecta la PC al Arduino Uno o Mega mediante un cable USB
    • Conecta la Ethernet Shield al router o punto de acceso mediante un cable Ethernet
    • Abre el IDE de Arduino y escribe el código
    • Carga el código en el Arduino Uno o Mega

    Es completamente simple.

    Código esqueleto de Arduino para el Escudo Ethernet cuando se usa la dirección IP dinámica

    Requisito previo

    • Necesitamos conocer la dirección MAC del Ethernet Shield (obtenerla de una etiqueta proporcionada por el fabricante)

    Cómo programar paso a paso

    • Incluir biblioteca
    #include <SPI.h> #include <Ethernet.h>
    • Declarar la dirección MAC
    // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    • Declara otros objetos dependiendo de tu aplicación.
    • Inicia el Ethernet Shield
    // initialize the Ethernet shield using DHCP: Ethernet.begin(mac);
    • (Opcional) Imprimir la dirección IP de Arduino, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS
    Serial.print("Arduino's IP Address: "); Serial.println(Ethernet.localIP()); Serial.print("DNS Server's IP Address: "); Serial.println(Ethernet.dnsServerIP()); Serial.print("Gateway's IP Address: "); Serial.println(Ethernet.gatewayIP()); Serial.print("Network's Subnet Mask: "); Serial.println(Ethernet.subnetMask());

    Tenga en cuenta que Arduino no puede obtener una dirección IP en los siguientes casos:

    • El router o punto de acceso no admite DHCP
    • El cable Ethernet no está enchufado correctamente o está roto

    Para detectar estos problemas, podemos modificar Ethernet.begin(mac); para:

    if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address"); // check for Ethernet hardware present if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("Ethernet shield was not found"); // check for Ethernet cable if (Ethernet.linkStatus() == LinkOFF) Serial.println("Ethernet cable is not connected."); while (true); }

    ※ Nota:

    Si no cambias la dirección MAC, puede que siga funcionando. Sin embargo, puede que no funcione si entra en conflicto con la dirección MAC de otro dispositivo en la misma red LAN. En caso de perderse la etiqueta de la dirección MAC, simplemente usa la dirección MAC que se muestra arriba para las pruebas.

    El código esqueleto completo al usar la dirección IP dinámica

    /* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-ethernet-shield-2 */ #include <SPI.h> #include <Ethernet.h> // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // TODO: Declare something depending on your application void setup() { Serial.begin(9600); // initialize the Ethernet shield using DHCP: Serial.println("Obtaining an IP address using DHCP"); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address"); // check for Ethernet hardware present if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("Ethernet shield was not found"); // check for Ethernet cable if (Ethernet.linkStatus() == LinkOFF) Serial.println("Ethernet cable is not connected."); while (true); } // print out Arduino's IP address, subnet mask, gateway's IP address, and DNS server's IP address Serial.print("- Arduino's IP address : "); Serial.println(Ethernet.localIP()); Serial.print("- Gateway's IP address : "); Serial.println(Ethernet.gatewayIP()); Serial.print("- Network's subnet mask : "); Serial.println(Ethernet.subnetMask()); Serial.print("- DNS server's IP address: "); Serial.println(Ethernet.dnsServerIP()); // TODO: initialize something depending on your application } void loop() { // TODO: do something depending on your application }

    Carga el código anterior en Arduino. Si tiene éxito, el Monitor Serial mostrará algo parecido a lo siguiente:

    COM6
    Send
    Obtaining an IP address using DHCP - Arduino's IP address : 192.168.0.5 - Gateway's IP address : 192.168.0.1 - Network's subnet mask : 255.255.255.0 - DNS server's IP address: 8.8.8.8
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Si el Monitor Serial no se muestra como se indica arriba, verifica tu cable Ethernet. Si aún no funciona, pasa a la siguiente parte para intentar usar la dirección IP estática.

    Plantilla de código de Arduino para el escudo Ethernet cuando se utiliza la dirección IP estática.

    Prerequisito

    Cómo programar paso a paso

    • Incluir la biblioteca
    #include <SPI.h> #include <Ethernet.h>
    • Declarar la dirección MAC
    // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    • Declara una dirección IP no utilizada, una máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS.
    // change the IP address, subnet mask, gateway's IP address, and DNS server's IP address IPAddress ip(192, 168, 0, 5); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); IPAddress myDns(8, 8, 8, 8);
    • Declara otros objetos dependiendo de tu aplicación.
    • Inicia el Ethernet Shield
    // initialize the Ethernet shield using the static IP address: Ethernet.begin(mac, ip, myDns, gateway, subnet);
    • Opcional: comprobar el estado del enlace de red
    if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off");

    ※ Nota:

    Si no cambias la dirección MAC, puede que funcione. Sin embargo, puede que NO funcione si entra en conflicto con la dirección MAC de otro dispositivo en la misma red LAN. En caso de perder la pegatina de la dirección MAC, simplemente usa la dirección MAC que aparece arriba para las pruebas.

    El código esqueleto completo al usar la dirección IP estática

    /* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-ethernet-shield-2 */ #include <SPI.h> #include <Ethernet.h> // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // change the IP address, subnet mask, gateway's IP address, and DNS server's IP address depending on your network IPAddress ip(192, 168, 0, 5); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); IPAddress myDns(8, 8, 8, 8); // TODO: Declare something depending on your application void setup() { Serial.begin(9600); // initialize the Ethernet shield using the static IP address: Ethernet.begin(mac, ip, myDns, gateway, subnet); // TODO: initialize something depending on your application } void loop() { // optional, check link status if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off"); // TODO: do something depending on your application }

    Sube el código anterior a Arduino. Si tiene éxito, el Monitor Serial mostrará algo similar a lo siguiente:

    COM6
    Send
    Link status: On Link status: On Link status: On
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Si el Monitor Serial no se muestra como se muestra arriba:

    • Verifica tu cable Ethernet
    • Asegúrate de que la dirección IP pertenezca a tu red
    • Asegúrate de que la dirección IP no entre en conflicto con otros dispositivos en la misma red
    • Asegúrate de que la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS estén configuradas correctamente

    Conocimientos Adicionales de Redes para Principiantes

    En el caso de usar una IP estática, necesitas obtener una dirección IP no utilizada, la máscara de subred, la dirección IP de la puerta de enlace y la dirección IP del servidor DNS. A continuación se muestra cómo obtenerlas.

    Si Arduino y tu PC se conectan a la misma red

    • Abre el Símbolo del sistema en tu PC
    • Escribe el siguiente comando en el Símbolo del sistema:
    ipconfig
    Command Prompt
    C:\Windows\system32>ipconfig Ethernet adapter Ethernet 2: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::d559:ae92:8dff:a604%20 IPv4 Address. . . . . . . . . . . : 192.168.0.14 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
    • A partir de lo anterior, puedes obtener la máscara de subred y la dirección IP de la puerta de enlace
    • Puedes ver la dirección IP de tu PC en la salida anterior. Intentaremos encontrar una dirección IP no utilizada basada en la dirección IP de tu PC
      • Incrementa o disminuye una a la vez, empieza desde la dirección IP de tu PC.
      • Envía el comando ping a esa dirección IP en el Símbolo del sistema. Repite estos dos pasos hasta que la IP sea inalcanzable. Si la dirección es inalcanzable, es una dirección IP no utilizada y podemos usarla para Arduino. Por ejemplo:
      ping 192.168.0.16
      Command Prompt
      C:\Users\youruser>ping 192.168.0.16 Pinging 192.168.0.16 with 32 bytes of data: Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Ping statistics for 192.168.0.16: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

      ※ Nota:

      En algunos casos, incluso cuando la dirección IP no es alcanzable, podría estar siendo utilizada por otro dispositivo. Sin embargo, este caso suele no ocurrir en tu red doméstica.

      • Para la dirección IP del servidor DNS, podemos usar simplemente 8.8.8.8

      Ahora puedes usar estos shields para conectar Arduino a Internet. Consulta otro ejemplo en la sección Ver también.

      WARNING

      Tenga en cuenta que este tutorial está incompleto. Publicaremos en nuestra página de Facebook cuando el tutorial esté completo. Déle like para mantenerse actualizado.

    ※ NUESTROS MENSAJES

    • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!