Como usar um Shield Ethernet no Arduino

Usando um Shield Ethernet no Arduino

Uma das formas mais importantes de comunicação disponíveis com o Arduino é o padrão Ethernet. Trata-se de um protocolo de comunicação em redes que permite que dispositivos variados, como PCs, smartphones, roteadores, arduinos, etc., se comuniquem por meio do envio e recebimento de pacotes (frames / quadros, para ser mais exato), que são fluxos de dados organizados.

Cada dispositivo em uma rede possui seu próprio endereço IP, que é um endereço numérico que permite identificar cada dispositivo e dessa forma, se comunicarem entre si usando diferentes protocolos (padrões de software).

Shield Ethernet

No Arduino é bastante simples realizar essa comunicação via padrão Ethernet, com o uso de um Shield Ethernet e sua biblioteca correspondente. A imagem a seguir mostra um shield ethernet típico:

Shield Ethernet no Arduino

O Shield Ethernet na plataforma Arduino utiliza o chip WIZnet W5100 Ethernet, que fornece a pilha de rede TCP/IP, habilitando o dispositivo a se comunicar através de uma rede comum, tanto local quanto via Internet.

Esse shield possui um conector para cabo de rede RJ45, e sua taxa de transferência máxima é de 100 Mbps, podendo operar também em 10 Mbps (10/100).

Além disso, ele traz um slot para cartão microSD, que permite ler e armazenar dados no próprio shield (obviamente inserindo um cartão SD e executando a biblioteca SD).

Um shield ethernet realiza, basicamente, o papel que uma placa de rede executa em um computador comum. Antes de mostrarmos como funciona e como configurar esse shield, vamos discutir alguns termos relacionados a redes de computadores, que serão importantes no entendimento do processo de comunicação do Arduino.

Conceitos básicos de Redes

  • Ethernet: Tecnologia de rede que permite a dispositivos enviarem dados entre si por meio de uma rede com fios, por meio de um endereço físico (identificação de hardware).
  • Endereço MAC: Media Access Control / Controle de Acesso ao Meio, trata-se de um identificador (endereço) único que é atribuído aos dispositivos de rede, de modo que cada dispositivo seja identificado de forma única e possam assim se comunicar com outros dispositivos. Cada shield Ethernet para Arduino possui seu próprio endereço MAC, que nunca se repete.
  • Protocolo de Rede: Um protocolo é uma linguagem de comunicação padronizada que permite que dispositivos troquem informações entre si (“conversem”). Para que essa comunicação seja possível, os dispositivos devem usar o mesmo protocolo, como se fosse a mesma “linguagem”. Um protocolo muito comum é o protocolo HTTP, que permite configurar um servidor Web (que podemos fazer com Arduino!).
  • TCP/IP: Trata-se de uma pilha ou suíte de protocolos específica, ou seja, um grupo de protocolos que trabalham em conjunto para fornecer conectividade de rede a dispositivos. TCP significa “Protocolo de Controle de Transmissão”, e IP significa “Protocolo de Internet”, e esses dois são os protocolos mais importantes da pilha, que na verdade contém mais de 50 protocolos diferentes, cada um com uma função bem definida.
  • Endereço IP: O IP é um endereço lógico, ou seja, não associado fisicamente a um dispositivo, mas que permite que os dispositivos de identifiquem em uma rede como a Internet.
  • Gateway: Um gateway, também chamado de Gateway Padrão, é basicamente o endereço IP da porta de um roteador conectada à rede interna, a qual permite o roteamento (encaminhamento) dos pacotes para uma outra rede, geralmente a Internet.
Shield Ethernet encaixado no Arduino

Shield Ethernet encaixado no Arduino

A Biblioteca Ethernet

A biblioteca Ethernet, necessária para que seja possível utilizar o shield correspondente, é distribuída juntamente com o IDE do Arduino e permite a comunicação do Arduino com uma rede.

A tabela a seguir fornece uma descrição simplificada de algumas das funções mais comuns da biblioteca Ethernet, pertencentes às classes Ethernet, EthernetClient, EthernetServer e EthernetUDP:

Função Descrição da Função
Ethernet.begin(mac)
Ethernet.begin(mac, ip)
Ethernet.begin(mac, ip, gateway)
Ethernet.begin(mac, ip, gateway,subnet)
Função para inicialização da biblioteca, usando MAC, e opcionalmente IP e/ou gateway e máscara de sub-rede.
Server(port)
Permite criar um servidor que irá escutar em uma porta de comunicações específica.
Server.begin()
Função para inicializar o servidor, de modo a escutar as mensagens que chegam
Server.write()
Permite enviar dados para os dispositivos clientes conectados
Server.available()
Retorna um cliente, caso ele possua dados prontos para envio
Server.print()
Imprime dados para todos os clientes disponíveis. Esses dados são impressos na forma de uma sequência de dígitos ASCII. Por exemplo, o número 753 é retornado como os caracteres “7”, “5” e “3”.
Server.println()
Idem à função Server.print(), porém mudando de linha no final da mensagem
Client(ip. porta)
Permite criar um cliente que poderá se conectar ao endereço IP e à porta passadas à função.
Client.connect()
Inicia a conexão com o cliente
Client.connected()
Verifica se o cliente está ou não conectado ao servidor
Client.write()
Permite gravar dados no servidor
Client.print()
Imprime dados para o servidor. Esses dados são impressos na forma de uma sequência de dígitos ASCII. Por exemplo, o número 753 é retornado como os caracteres “7”, “5” e “3”.
Client.println()

Idem Client.print(), porém mudando de linha no final da mensagem

Client.available()

Retorna o número de bytes que estão disponíveis para serem lidos, enviados a partir do servidor.

Client.read()

Lê o próximo byte recebido do servidor

Client.flush()

Limpa todos os bytes escritos para o cliente, porém ainda não lidos

Client.stop()

Desconecta o cliente do servidor.

EthernetUDP.begin(port)

Inicializa o objeto UDP, especificando a porta a ser utilizada

EthernetUDP.read(packetBuffer,
MaxSize)

Lê os pacotes UDP de um buffer

EthernetUDP.write(mensagem)

Envia uma mensagem UDP para a conexão remota

EthernetUDP.beginPacket(ip. port)

Executado antes de enviar uma mensagem, para especificar o endereço IP e a porta de destino

EthernetUDP.endPacket()

Função invocada após o envio da mensagem, para terminar a transmissão

EthernetUDP.parsePacket()

Verifica se existe mensagem para ser lida

Ethernet.available()

Retorna a quantidade de dados que foi recebida e também a que está disponível para ser lida na sequência.

Nas próximas partes desse tutorial, vamos mostrar como utilizar o shield Ethernet e as bibliotecas listadas acima para criar diversas aplicações de rede com o Arduino, como por exemplo um servidor Web e um cliente de rede local.

Próximo: Projeto – Criando um Servidor Web com Arduino e um Shield Ethernet

 

Sobre Fábio dos Reis (1273 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

2 Comentários em Como usar um Shield Ethernet no Arduino

  1. Alex Oliveira // 19/02/2018 em 19:32 // Responder

    Amigo dá aula via Skype? Abraço.

1 Trackbacks & Pingbacks

  1. A classe EthernetServer - Configurando um servidor web com Arduino - Bóson Treinamentos em Tecnologia

Escreva um comentário

Seu e-mail não será divulgado


*