Comunicação entre dois Arduinos
Neste tutorial, vamos aprender:
- Comunicação entre dois Arduinos - Visão geral
- Comunicação entre dois Arduinos via Ethernet/WiFi
- Exemplo de aplicação: um botão/interruptor conectado ao Arduino #1 controla um LED conectado ao Arduino #2 via Ethernet/WiFi
- Como conectar dois Arduinos pela Internet

O tutorial fornece o código Arduino para dois casos:
- Arduino Uno R4 WiFi
- Arduino Uno/Mega com Ethernet Shield
Hardware Necessário
| 2 | × | Arduino UNO R4 WiFi | |
| 2 | × | Cabo USB Tipo-C |
Alternatively if using Ethernet:
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Comunicação entre dois Arduinos - Visão geral
Vamos considerar um caso específico: o Arduino #1 se comunica com o Arduino #2. Existem muitos métodos para permitir a comunicação entre dois Arduinos. Podemos escolher um deles dependendo do alcance da comunicação. A tabela abaixo mostra alguns métodos e o alcance de comunicação de cada um.
| Métodos | Alcance |
|---|---|
| I2C | muito curto |
| SPI | muito curto |
| UART (TTL) | muito curto |
| UART (RS-232/485/422) | curto |
| Bluetooth | curto |
| LoRa | longo |
| Ethernet/WiFi | ilimitado(*) |
※ Nota:
(*):
- Se os dois Arduinos estiverem conectados à Internet, o alcance de comunicação é ilimitado
- Se os dois Arduinos não estiverem conectados à Internet, mas estiverem conectados na mesma rede LAN, eles ainda podem se comunicar entre si. O alcance de comunicação fica limitado à rede LAN.
Entre os métodos acima, este tutorial usa Ethernet/WiFi para permitir a comunicação entre dois Arduinos, porque assim os dois Arduinos podem se comunicar a uma distância ilimitada.
Comunicação entre dois Arduinos via Ethernet/WiFi
Dois Arduinos podem se comunicar entre si via Ethernet/WiFi se:
- Os dois Arduinos estiverem na mesma rede LAN; a conexão com a Internet NÃO é necessária
- Os dois Arduinos estiverem em redes LAN diferentes; a conexão com a Internet é necessária
Não importa se os dois Arduinos se conectam entre si dentro de uma rede LAN local ou pela Internet, existem dois tipos de comunicação:
- Os dois Arduinos se comunicam diretamente entre si
- Os dois Arduinos se comunicam por meio de um servidor centralizado (por exemplo, um servidor MQTT). Veja Comunicação entre dois Arduinos via MQTT
No caso da comunicação direta, na maioria das vezes, um Arduino faz o papel de cliente TCP e o outro faz o papel de servidor TCP.
No caso da comunicação por meio de um servidor centralizado, na maioria das vezes, os dois Arduinos fazem o papel de cliente TCP.
Dependendo da aplicação, precisamos escolher um protocolo de aplicação para a comunicação entre os dois Arduinos. Abaixo estão alguns dos protocolos de aplicação que podemos usar:
- Protocolo próprio sobre TCP puro (diretamente)
- Modbus TCP (diretamente)
- HTTP (diretamente)
- Telnet (diretamente)
- SSH (diretamente)
- MQTT (via um servidor centralizado)
※ Nota:
NÃO importa se:
- Os dois Arduinos usam Ethernet
- Os dois Arduinos usam WiFi
- Um Arduino usa Ethernet e o outro usa WiFi
O protocolo UDP está fora do escopo deste tutorial.
Exemplo de Aplicação
Vamos fazer a seguinte aplicação: um botão/interruptor conectado ao Arduino #1 controla um LED conectado ao Arduino #2 via Ethernet/WiFi.

Este tutorial usa dois Arduino Ethernet Shields. Você pode usar outro WiFi Shield ou Ethernet Shield no lugar. Se você usar outro shield, só precisa modificar um pouco o código.
Como mencionado acima, existem alguns protocolos de aplicação que podemos usar. Neste exemplo, para simplificar, vamos definir um protocolo por conta própria (um protocolo próprio)
Protocolo Próprio
Vamos definir um protocolo simples:
- Uma conexão TCP é criada entre o Arduino #1 e o Arduino #2
- Arduino #1:
- Atua como cliente TCP, fazendo ativamente a requisição de conexão TCP ao Arduino #2
- Quando o interruptor é colocado em ON, o Arduino #1 envia um byte (comando) com valor 1 para o Arduino #2.
- Quando o interruptor é colocado em OFF, o Arduino #1 envia um byte (comando) com valor 0 para o Arduino #2.
- Arduino #2:
- Atua como servidor TCP, aguardando a requisição de conexão TCP do Arduino #1
- Se o byte recebido for 1, liga o LED
- Se o byte recebido for 0, desliga o LED
Diagrama de Ligação

※ Nota:
você precisa adicionar um resistor para o LED se o LED não tiver um resistor embutido. Você pode aprender mais nos tutoriais Arduino - LED e Arduino - Botão
Comunicação entre dois Arduinos via WiFi
Código Arduino para o Arduino Uno R4 WiFi #1
Código Arduino para o Arduino Uno R4 WiFi #2
Comunicação entre dois Arduinos via Ethernet
Código Arduino para o Arduino Ethernet #1
Código Arduino para o Arduino Ethernet #2
Passos Rápidos
- Se estiver usando o Ethernet Shield, encaixe os Ethernet Shields no Arduino #1 e no Arduino #2
- Ligue um botão/interruptor ao Arduino #1
- Ligue um LED ao Arduino #2
- Abra a Arduino IDE (chamada de Arduino IDE #1)
- Instale a biblioteca ezButton na Arduino IDE
- Conecte o Arduino #1 ao PC via cabo USB e selecione a porta COM do Arduino #1 na Arduino IDE #1
- Abra outra janela da Arduino IDE (chamada de Arduino IDE #2) clicando no ícone da Arduino IDE no seu PC (importante!())
- Conecte o Arduino #2 ao PC via cabo USB e selecione a porta COM do Arduino #2 na Arduino IDE #2
- Copie o código do Arduino #1, cole na Arduino IDE #1 e salve (com o nome Arduino1)
- Copie o código do Arduino #2, cole na Arduino IDE #2 e salve (com o nome Arduino2)
- Faça o upload do código do Arduino #2 para o Arduino #2 primeiro
- Abra o Serial Monitor na Arduino IDE #2 e pegue o endereço IP do servidor TCP
- Atualize o endereço IP do servidor TCP no código do Arduino #1
- Faça o upload do código do Arduino #1 para o Arduino #1
- Abra o Serial Monitor na Arduino IDE #1
- Pressione e segure o botão no Arduino #1 → veja o estado do LED no Arduino #2 (ON)
- Solte o botão no Arduino #1 → veja o estado do LED no Arduino #2 (OFF)
- Pressione, segure e solte o botão várias vezes.
- Veja a saída nos dois Serial Monitors
- Serial Monitor do Arduino #1
- Serial Monitor do Arduino #2
- (): Se você abrir a janela da Arduino IDE #2 pelo menu "File" → "New" ou "Open" a partir da janela da Arduino IDE #2, você NÃO conseguirá abrir dois Serial Monitors para dois Arduinos no mesmo PC ao mesmo tempo.
- Existe uma alternativa a este protocolo próprio. É o Modbus TCP. O protocolo Modbus é padronizado e tem muitas vantagens sobre o protocolo próprio. Veja mais no tutorial Arduino - Modbus
※ Nota:
Vídeo
Como conectar dois Arduinos pela Internet
Existem dois tipos de endereço IP: endereço IP privado e endereço IP público. O endereço IP que você usa na rede da sua casa normalmente é um endereço IP privado.
Você pode identificar facilmente um endereço IP privado. O endereço IP privado tem três padrões: 10.x.x.x, 172.16.x.x, 192.168.x.x
NÃO há problema em usar o endereço IP privado nos seguintes casos:
- Se os dois Arduinos estiverem na mesma rede LAN, quer se comuniquem diretamente ou por meio de um servidor centralizado, e quer a sua rede LAN esteja conectada à Internet ou não.
- Se os dois Arduinos estiverem em redes LAN diferentes e se comunicarem entre si por meio de um servidor centralizado
No caso de os dois Arduinos estarem em redes LAN diferentes e se comunicarem diretamente entre si, o cliente TCP no Arduino pode usar o endereço IP privado. No entanto, o servidor TCP no Arduino PRECISA usar uma das opções:
- Um endereço IP público
- Um endereço IP privado com "Port Forwarding" (redirecionamento de portas) no Roteador/AP
O processo de configurar o "Port Forwarding" é diferente em cada roteador/AP. Isso está fora do escopo deste tutorial.