+1 500 000 produtos na nossa oferta
7000 encomendas enviadas diariamente
+300 000 clientes de 150 países
Data de publicação: 29-06-2021 Data de atualização: 10-04-2026 🕒 6 min de leitura
Desde há vários anos, a criação de extensas redes informáticas deixou de servir unicamente para conectar computadores. A queda dos preços e o aumento da potência informática dos pequenos microcontroladores iniciou o rápido processo de ligação às redes locais Ethernet ou até à rede global de Internet, dispositivos de baixo consumo, que desempenham principalmente funções de controlo e medição. Além disso, estas soluções começaram a aparecer também em redes industriais profissionais, substituindo gradualmente os sistemas mais antigos baseados em RS232 e derivados. Assim, em inícios do século XXI, entrámos na era da chamada Internet das Coisas (do inglês, Internet of Things – IoT). Embora o mercado atual de IoT seja dominado por dispositivos que comunicam principalmente através de redes sem fios e padrões Wi-Fi, ZigBee, BLE ou Z-Wave, ainda há muitas soluções de hardware (principalmente da chamada IIoT – Internet das Coisas Industrial), que requerem uma transmissão confiável e segurança de dados, em que uma das soluções mais populares continua a ser a rede Ethernet. Os criadores da plataforma Arduino não deixaram os criadores de dispositivos IIoT sem resposta e estenderam a oferta padrão de módulos Arduino com sobreposições tipo Ethernet Shield 2, destinados a utilizadores individuais, ou Arduino MKR ETH SHIELD para soluções profissionais, com base em controladores WIZnet W5100/W5200/W5500 e incorporando circuitos MAC e PHY num circuito integrado. Esta oferta foi rapidamente alargada por produtores independentes com módulos novos e muito mais económicos baseados em sistemas populares ENC28J60. Este artigo descreve brevemente ambas as soluções: a oficial, baseada na série W5x00, e as soluções baseadas principalmente em Open Source/Open Hardware, em módulos ENC28J60.
A inegável vantagem dos módulos oficiais baseados em circuitos da série W5x00 (incluindo os seus equivalentes de hardware, por exemplo, sobreposições OKYSTAR OKY2102 ou DFROBOT DFR0125) é oferecer um suporte de software completo na forma de uma biblioteca Ethernet incorporada na pilha Arduino. Portanto, o utilizador pode começar a criar o programa imediatamente após executar o Arduino IDE, sem a necessidade de instalar pacotes de software adicionais.
Figura 1. Módulos OKY2102 (esquerda) e DFR0125 (direita), equipados com controlador WIZnet W5100
Consoante a variante do sistema WIZnet e a quantidade de RAM disponível, a biblioteca Ethernet suporta um máximo de quatro (para o chip W5100 e RAM <= 2 kB) ou oito (sistemas W5200 e W5500) ligações de entrada/saída paralelas. A interface de software da biblioteca foi dividida em cinco classes, agrupando funcionalidades individuais. A classe Ethernet é responsável pela inicialização da biblioteca e pela configuração da rede (incluindo o endereço IP, o endereço de sub-rede ou a configuração do gateway de acesso). Foi criada uma classe IPAddress para o direcionamento IP. Para executar uma aplicação de servidor simples do lado da Arduino, será necessário usar a classe EthernetServer, que permite escrever e ler dados de todos os dispositivos conectados. Uma classe complementar é a classe EthernetClient, que permite, em poucas chamadas simples, preparar um cliente de rede funcional que realiza operações de escrita e leitura de dados a partir do servidor. Para a comunicação UDP, a biblioteca Ethernet oferece a classe EthernetUDP. Esta disponível uma descrição completa das classes com métodos em:
De uma forma característica da plataforma Arduino, todas as operações complexas do programa foram implementadas diretamente na biblioteca disponibilizada: o programador tem um conjunto limitado mas muito funcional de API à sua disposição, graças ao qual o processo de desenvolvimento da aplicação é rápido e não requer um conhecimento detalhado das pilhas de redes. Analisemos, portanto, a construção da aplicação de servidor mais simples, entregue com a biblioteca Ethernet, cuja tarefa é escutar as ligações de entrada do cliente do protocolo Telnet.
O código da aplicação do servidor começa a adicionar os arquivos de cabeçalho necessários para estabelecer a comunicação SPI (os módulos WIZnet trocam dados com o microcontrolador usando este protocolo) e os arquivos de cabeçalho da biblioteca Ethernet:
#include <SPI.h>
#include <Ethernet.h>
O passo seguinte é configurar os parâmetros de rede (endereço MAC do controlador, endereço IP do gateway de acesso e máscara de sub-rede) e criar um servidor de escuta na porta número 23 (a porta predefinida para o protocolo Telnet):
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);
EthernetServer server(23);
No corpo da função setup(), é necessário iniciar a biblioteca Ethernet e iniciar o processo de escuta. Adicionalmente, também foi colocada a configuração da porta serial, na qual serão exibidas as mensagens sobre o endereço do servidor, a ligação do novo cliente e os dados recebidos durante a sessão estabelecida:
void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
while (!Serial) {
}
Serial.print("Chat server address:");
Serial.println(Ethernet.localIP());
}
O loop principal do programa espera uma ligação do cliente e verifica os dados legíveis. Ao receber os dados, envia-os de volta ao cliente sem alterações, realizando assim uma função de eco simples:
void loop() {
EthernetClient client = server.available();
if (client) {
if (!alreadyConnected) {
client.flush();
Serial.println("We have a new client");
client.println("Hello, client!");
alreadyConnected = true;
}
if (client.available() > 0) {
char thisChar = client.read();
server.write(thisChar);
Serial.write(thisChar);
}
}
}
O correto funcionamento da aplicação anterior pode ser testado usando qualquer cliente de protocolo Telnet (por exemplo, Putty no Windows ou comando telnet no Linux) ou outro conjunto Arduino e classe EthernetClient.
Uma solução alternativa para os conjuntos de circuitos WIZnet W5x00 oficialmente suportados são módulos baseados em controladores ENC28J60 (p. ex., OKYSTAR OKY3486 ou ETH CLICK). Graças ao seu preço mais baixo e à maior facilidade de instalação à mão (ao contrário dos sistemas W5x00 encerrados em carcaças de 80 pinos LQFP, o controlador ENC28J60 está disponível em carcaças SSOP, SOIC, QFN de 28 pinos e uma carcaça de orifício SPDIP), este circuito é muito popular entre os entusiastas da eletrónica.
Figura 2. Módulos OKY3486 (esquerda) e ETH CLICK (direita), equipados com controlador ENC28J60
Apesar da ausência de apoio oficial da Arduino, muitas bibliotecas de código aberto foram colocadas à disposição dos programadores, o que garante uma rápida integração dos chips ENC28J60 com o software. Deve prestar especial atenção à biblioteca UIPEthernet e, disponível mediante licença GPLv2, à biblioteca EtherCard. A vantagem inegável do primeiro destes projetos é a compatibilidade da interface API com a biblioteca Ethernet oficial da Arduino, o que permite que o processo de desenvolvimento da aplicação seja independente das escolhas realizadas entre os sistemas W5x00 e o sistema ENC28J60 na camada de hardware. O segundo projeto – EtherCard – implementa uma interface de programação independente que, consoante as preferências do programador, pode revelar-se uma alternativa interessante. Tal como no caso da biblioteca Arduino Ethernet, a implementação de uma funcionalidade bastante complexa (por exemplo, implementação do cliente DHCP) pode ser realizada em várias linhas de código:
#include <EtherCard.h>
static byte mymac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte Ethernet::buffer[700];
void setup () {
Serial.begin(57600);
Serial.println(F("
[testDHCP]"));
if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
Serial.println(F("Failed to access Ethernet controller"));
Serial.println(F("Setting up DHCP"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
}
A Transfer Multisort Elektronik (TME) é um dos maiores distribuidores globais de componentes eletrônicos, peças eletrotécnicas, equipamentos de oficina e automação industrial. O catálogo inclui mais de 1.500.000 de produtos de 1.300 fabricantes líderes. Os modernos centros logísticos da TME em Łódź e Rzgów (Polónia), com uma área total superior a 40.000 m², enviam quase 6.000 pacotes diariamente para clientes em mais de 150 países.
A TME também investe no desenvolvimento do conhecimento e das competências de jovens engenheiros e entusiastas da eletrónica através do projeto TME Education e apoia a comunidade tecnológica organizando a série de eventos TechMasterEvent, promovendo a inovação e a troca de experiências.