Arduino - Ethernet Shield

Usar o Arduino Ethernet Shield é uma das formas mais fáceis de conectar o Arduino à Internet. Você pode ver outras opções para conectar o Arduino à Internet via Ethernet no tutorial Arduino - Ethernet

Neste tutorial, vamos aprender:

Arduino Ethernet Shield

Conhecimentos Básicos de Redes para Iniciantes

Esta parte oferece conhecimentos básicos para iniciantes que não sabem nada sobre redes.

Quando um dispositivo se conecta à Internet (via Ethernet ou WiFi), ele PRECISA se conectar a um roteador ou a um ponto de acesso. Roteador e ponto de acesso são dispositivos que atuam como gateway para a Internet. Todos os dados entre um dispositivo e a Internet passam pelo roteador ou ponto de acesso.

Quando um dispositivo se conecta à Internet, ele PRECISA:

  • Ter um endereço MAC
  • Ter um endereço IP
  • Conhecer a máscara de sub-rede da rede
  • Conhecer o endereço IP do gateway (endereço IP do roteador ou ponto de acesso)
  • Conhecer o endereço IP do servidor DNS (no caso de se conectar a um nome de domínio)

O dispositivo não funciona se:

  • Houver um ou mais outros dispositivos na mesma rede usando o mesmo endereço MAC do dispositivo (chamado de conflito de endereço MAC)
  • Houver um ou mais outros dispositivos na mesma rede usando o mesmo endereço IP do dispositivo (chamado de conflito de endereço IP)

Este tutorial não sobrecarrega você com conhecimentos de redes. Por isso, o tutorial não explica esses conceitos. Isso está fora do escopo deste tutorial. Em vez disso, o tutorial mostra como usá-los.

O endereço MAC normalmente vem embutido nos dispositivos. Não precisamos nos preocupar com ele. No entanto, o Arduino Ethernet Shield não tem um endereço MAC embutido. O endereço MAC vem impresso em um adesivo colado no shield. Precisamos pegá-lo e definir o endereço MAC do Arduino Shield no código Arduino.

Existem dois métodos para atribuir o endereço IP, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS a um dispositivo (incluindo o Arduino):

  1. Usar o endereço IP estático:
    • É preciso gerenciar o endereço IP, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS
    • É preciso definir manualmente o endereço IP, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS (no Arduino Ethernet Shield, essas informações são definidas pelo código Arduino)
    • NÃO vai funcionar se:
      • Você definir um endereço IP que já está sendo usado por outros dispositivos na mesma rede LAN → conflito de IP
      • Você definir a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS errados
  • Obter um endereço IP automaticamente (DHCP), também chamado de endereço IP dinâmico
    • O dispositivo obtém automaticamente o endereço IP, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS do roteador ou ponto de acesso usando DHCP. Não precisamos gerenciar o endereço IP, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS. O roteador/ponto de acesso faz esse trabalho por nós.

    Quando você conecta seu smartphone à rede WiFi da sua casa, o segundo método é usado.

    Ao usar o Arduino, o primeiro método é difícil para iniciantes. O segundo método é fácil e recomendado para iniciantes que NÃO conhecem redes.

    Como usar o Arduino Ethernet Shield

    O Arduino se comunica com o Ethernet Shield através da interface SPI. A seguir mostramos como usar o Arduino Ethernet Shield.

    • Encaixe o Ethernet Shield no Arduino Uno ou Mega
    • Conecte o PC ao Arduino Uno/Mega com um cabo USB
    • Conecte o Ethernet Shield ao roteador/ponto de acesso com um cabo Ethernet
    • Abra a Arduino IDE e escreva o código
    • Faça o upload do código para o Arduino Uno/Mega

    É bem simples.

    Código Arduino base para o Arduino Ethernet Shield ao usar endereço IP dinâmico

    Pré-requisito

    • Precisamos saber o endereço MAC do Ethernet Shield (obtido de um adesivo fornecido pelo fabricante)

    Como programar passo a passo

    • Inclua a biblioteca
    #include <SPI.h> #include <Ethernet.h>
    • Declare o endereço 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 };
    • Declare outros objetos de acordo com a sua aplicação.
    • Inicie o Ethernet Shield
    // initialize the Ethernet shield using DHCP: Ethernet.begin(mac);
    • (Opcional) Imprima o endereço IP do Arduino, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do 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());

    Observe que o Arduino não consegue obter um endereço IP nos seguintes casos:

    • O roteador ou Ponto de Acesso não suporta DHCP
    • O cabo Ethernet não está bem conectado ou está danificado

    Para detectar esses 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:

    Se você NÃO alterar o endereço MAC, ainda pode funcionar. No entanto, pode NÃO funcionar se ele entrar em conflito com o endereço MAC de outro dispositivo na mesma rede LAN. Caso você perca o adesivo com o endereço MAC, basta usar o endereço MAC acima para testes.

    O código base completo ao usar endereço IP dinâmico

    /* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 }

    Faça o upload do código acima para o Arduino. Se tudo der certo, o Serial Monitor mostrará algo como abaixo:

    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno' on 'COM15')
    New Line
    9600 baud
    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
    Ln 11, Col 1
    Arduino Uno on COM15
    2

    Se o Serial Monitor NÃO mostrar algo como acima, verifique o seu cabo Ethernet. Se ainda assim NÃO funcionar, vá para a próxima parte e tente usar o endereço IP estático.

    Código Arduino base para o Arduino Ethernet Shield ao usar endereço IP estático

    Pré-requisito

    Como programar passo a passo

    • Inclua a biblioteca
    #include <SPI.h> #include <Ethernet.h>
    • Declare o endereço 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 };
    • Declare um endereço IP não utilizado, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do 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);
    • Declare outros objetos de acordo com a sua aplicação.
    • Inicie o Ethernet Shield
    // initialize the Ethernet shield using the static IP address: Ethernet.begin(mac, ip, myDns, gateway, subnet);
    • Opcional: verifique o status do link de rede
    if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off");

    ※ Nota:

    Se você NÃO alterar o endereço MAC, ainda pode funcionar. No entanto, pode NÃO funcionar se ele entrar em conflito com o endereço MAC de outro dispositivo na mesma rede LAN. Caso você perca o adesivo com o endereço MAC, basta usar o endereço MAC acima para testes.

    O código base completo ao usar endereço IP estático

    /* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 }

    Faça o upload do código acima para o Arduino. Se tudo der certo, o Serial Monitor mostrará algo como abaixo:

    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno' on 'COM15')
    New Line
    9600 baud
    Link status: On Link status: On Link status: On
    Ln 11, Col 1
    Arduino Uno on COM15
    2

    Se o Serial Monitor NÃO mostrar algo como acima:

    • Verifique o seu cabo Ethernet
    • Certifique-se de que o endereço IP pertence à sua rede
    • Certifique-se de que o endereço IP NÃO entra em conflito com outros dispositivos na mesma rede
    • Certifique-se de que a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS estão definidos corretamente

    Conhecimentos Adicionais de Redes para Iniciantes

    No caso de usar o IP estático, você precisa obter um endereço IP não utilizado, a máscara de sub-rede, o endereço IP do gateway e o endereço IP do servidor DNS. A seguir mostramos como obtê-los.

    Se o Arduino e o seu PC estiverem conectados à mesma rede

    • Abra o Command Prompt no seu PC
    • Digite o seguinte comando no Command Prompt:
    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
    • Pela saída acima, você pode obter a máscara de sub-rede e o endereço IP do gateway
    • Você pode ver o endereço IP do seu PC na saída acima. Vamos tentar encontrar um endereço IP não utilizado com base no endereço IP do PC
      • Aumente ou diminua um por um, começando pelo endereço IP do PC.
      • Envie o comando ping para esse endereço IP no Command Prompt. Repita esses dois passos até que o IP fique inacessível. Se o endereço estiver inacessível, ele é um endereço IP não utilizado e podemos usá-lo para o Arduino. Por exemplo:
      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:

      Em alguns casos, mesmo que o endereço IP esteja inacessível, ele pode estar sendo usado por outro dispositivo. No entanto, isso normalmente não acontece na sua rede doméstica.

      • Para o endereço IP do servidor DNS, podemos simplesmente usar 8.8.8.8

      Agora você pode usar este shield para conectar o Arduino à Internet. Veja outros exemplos na parte Tutoriais Relacionados.

      WARNING

      Observe que este tutorial está incompleto. Vamos avisar na nossa página do Facebook quando o tutorial estiver completo. Curta a página para ficar atualizado.

    ※ NOSSAS MENSAGENS

    • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!