Skip to content

Arduino

Gabriel Bispo edited this page Jun 7, 2026 · 5 revisions

Fundamentos de programação e configuração de rede com Arduino e Ethernet Shield.


Sumário


Conceitos Básicos de Código

Elemento Sintaxe Função
Quebra de linha \n ou ln Insere uma nova linha na saída do Serial Monitor
Comentário de linha // texto Explica o código — ignorado pelo compilador
Comentário de bloco /* texto */ Comentário de múltiplas linhas — também ignorado pelo compilador
Comentário de documentação /** texto */ Documenta funções e arquivos (padrão Javadoc/Doxygen)

💡 Comentários são essenciais em projetos de hardware — explicam a lógica para quem for dar manutenção depois (incluindo você mesmo semanas depois). O compilador os ignora completamente, sem afetar o desempenho.

Estrutura básica de um sketch Arduino

Todo programa Arduino (chamado de sketch) tem obrigatoriamente duas funções:

void setup() {
  // Executado UMA única vez ao ligar ou resetar o Arduino
  // Inicializa componentes, configura pinos, inicia comunicações
}
 
void loop() {
  // Executado REPETIDAMENTE em loop infinito após o setup()
  // Aqui fica a lógica principal do programa
}

Arduino Ethernet Shield

O Ethernet Shield é uma placa de expansão que se encaixa sobre o Arduino e adiciona uma porta de rede RJ45, permitindo que o Arduino se comunique em rede local ou sirva páginas web.

Pinos reservados pelo Ethernet Shield

O shield usa internamente alguns pinos digitais do Arduino — eles não podem ser usados para outros fins:

Pino(s) Uso interno do Shield
0 e 1 Comunicação serial (TX/RX)
4 Chip Select do cartão SD (se presente)
10 Chip Select do controlador Ethernet (W5100)
11, 12, 13 Barramento SPI (comunicação com o shield)

⚠️ Usar qualquer um desses pinos para LEDs, sensores ou outros componentes causará conflito e comportamento imprevisível na rede ou no programa.

Bibliotecas necessárias

Biblioteca Função
SPI.h Habilita o protocolo SPI — usado para comunicação entre o Arduino e o chip Ethernet
Ethernet.h Fornece todas as funções de rede: IP, servidor, cliente HTTP

💡 O SPI (Serial Peripheral Interface) é um protocolo de comunicação de alta velocidade usado para o Arduino "conversar" com o chip Ethernet W5100 soldado no shield. É por isso que os pinos 11, 12 e 13 ficam reservados.

Gerar um endereço MAC para o shield

Todo dispositivo de rede precisa de um endereço MAC único. Use o site abaixo para gerar um aleatório para o seu shield:

🔗 https://www.miniwebtool.com/mac-address-generator/ (ou qualquer gerador de MAC aleatório)

💡 O endereço MAC no formato { 0x90, 0xA2, 0xDA, 0xBC, 0xFE, 0x15 } é a representação em hexadecimal dos 6 bytes do endereço físico. O prefixo 0x indica que o número está em base hexadecimal.


Código — Configuração Básica de Rede

/**
 * Arduino Ethernet (configurações básicas de rede)
 * @author Gabriel Da Silva Bispo
 */
 
// Bibliotecas necessárias
#include <SPI.h>      // protocolo de comunicação com o shield
#include <Ethernet.h> // funções de rede (IP, servidor, cliente)
 
// Pinos reservados pelo shield — NÃO usar: 0, 1, 4, 10, 11, 12, 13
 
// Endereço MAC do shield (deve ser único na rede)
// Gere o seu em: https://www.miniwebtool.com/mac-address-generator/
byte mac[6] = { 0x90, 0xA2, 0xDA, 0xBC, 0xFE, 0x15 };
 
// Cria um servidor HTTP na porta 80
EthernetServer server(80);
 
void setup() {
  Serial.begin(9600); // inicia a comunicação com o Serial Monitor
 
  // Inicia a rede e obtém IP automaticamente via DHCP
  Ethernet.begin(mac); // atribui o MAC e solicita IP ao roteador (DHCP)
  server.begin();      // coloca o servidor HTTP em escuta
 
  // Exibe as configurações de rede no Serial Monitor
  Serial.println("Arduino Ethernet Shield:");
 
  Serial.print("IP: ");
  Serial.println(Ethernet.localIP());     // IP obtido via DHCP
 
  Serial.print("Mascara: ");
  Serial.println(Ethernet.subnetMask()); // máscara de sub-rede
 
  Serial.print("Gateway: ");
  Serial.println(Ethernet.gatewayIP());  // endereço do roteador
 
  Serial.print("DNS: ");
  Serial.println(Ethernet.dnsServerIP()); // servidor DNS
}
 
void loop() {
  // Lógica principal do servidor vai aqui
  // (responder requisições HTTP, ler sensores, etc.)
}

Explicação Detalhada do Código

Cabeçalho de documentação (/** */)

/**
 * Arduino Ethernet (configurações básicas de rede)
 * @author Gabriel Da Silva Bispo
 */

O bloco /** */ é um comentário de documentação. A tag @author segue o padrão Javadoc/Doxygen — ferramentas que geram documentação automática a partir desses comentários.


Declaração do MAC Address

byte mac[6] = { 0x90, 0xA2, 0xDA, 0xBC, 0xFE, 0x15 };
Elemento Explicação
byte Tipo de dado — armazena valores de 0 a 255 (8 bits)
mac[6] Array (vetor) de 6 bytes — os 6 octetos do endereço MAC
0x90 Valor em hexadecimal (base 16) — 0x indica hex

Criação do servidor

EthernetServer server(80);

Instancia (cria) um objeto do tipo EthernetServer configurado para escutar na porta 80 — porta padrão do protocolo HTTP. Qualquer navegador na rede que acessar o IP do Arduino enviará a requisição para essa porta.


setup() — inicialização

Serial.begin(9600);

Inicia a comunicação serial entre o Arduino e o computador (via USB) a 9600 baud. Permite visualizar mensagens no Serial Monitor da IDE Arduino — essencial para debug e para ver qual IP foi atribuído.

Ethernet.begin(mac);

Registra o MAC no shield e dispara uma requisição DHCP ao roteador da rede para obter IP, máscara, gateway e DNS automaticamente — o mesmo processo que ocorre quando um PC é conectado a um roteador.

server.begin();

Coloca o servidor HTTP em modo de escuta — a partir daqui, o Arduino começa a aceitar conexões de entrada na porta 80.


Funções de rede disponíveis

Função Retorna Equivalente em redes
Ethernet.localIP() IP do Arduino na rede ipconfig / ip a
Ethernet.subnetMask() Máscara de sub-rede Ex: 255.255.255.0
Ethernet.gatewayIP() IP do roteador (gateway) Porta de saída para a internet
Ethernet.dnsServerIP() IP do servidor DNS Resolve nomes de domínio

💡 Serial.print() imprime sem quebrar linha. Serial.println() imprime e pula para a próxima linha (println = print line). Use println no final de cada informação para formatar a saída no Serial Monitor.


loop() — execução contínua

void loop() {
  // Lógica do servidor vai aqui
}

No projeto atual, o loop() está vazio — o servidor está configurado mas ainda não responde a requisições. A próxima etapa seria adicionar código para:

  1. Detectar clientes conectados com EthernetClient client = server.available()
  2. Ler a requisição HTTP enviada pelo navegador
  3. Responder com HTML: client.println("HTTP/1.1 200 OK")

Documentação produzida durante o Curso Técnico de Informática — Senac Tatuapé

Clone this wiki locally