-
Notifications
You must be signed in to change notification settings - Fork 0
Arduino
Fundamentos de programação e configuração de rede com Arduino e Ethernet Shield.
- Conceitos Básicos de Código
- Arduino Ethernet Shield
- Código — Configuração Básica de Rede
- Explicação Detalhada do 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.
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
}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.
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.
| 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.
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 prefixo0xindica que o número está em base hexadecimal.
/**
* 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.)
}/**
* 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.
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 |
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.
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çã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). Useprintlnno final de cada informação para formatar a saída no Serial Monitor.
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:
- Detectar clientes conectados com
EthernetClient client = server.available() - Ler a requisição HTTP enviada pelo navegador
- Responder com HTML:
client.println("HTTP/1.1 200 OK")
Documentação produzida durante o Curso Técnico de Informática — Senac Tatuapé