Comunicação entre dois Arduino Nano ESP32
Este guia mostra como estabelecer uma conexão entre dois dispositivos Arduino Nano ESP32 usando TCP/IP via WiFi e trocar dados. Um Arduino Nano ESP32 funciona como cliente TCP enquanto o outro atua como servidor TCP. Vamos mergulhar no processo com um exemplo:
- O primeiro Arduino Nano ESP32 (chamado de Arduino Nano ESP32 #1O segundo Arduino Nano ESP32 (chamado de Arduino Nano ESP32 #2) está conectado a um LED e serve como o servidor TCP.Os dois dispositivos Arduino Nano ESP32 se conectam um ao outro por meio da LAN local ou da Internet.Quando o botão do Arduino Nano ESP32 #1Arduino Nano ESP32 #2 acender.

Hardware Necessário
Or you can buy the following kits:
1 × DIYables ESP32 Starter Kit (ESP32 included) 1 × DIYables ESP32 S3 Starter Kit (ESP32 S3 included) 1 × DIYables Sensor Kit (18 sensors/displays) Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.Buy Note: Use the LED Module for easier wiring. It includes an integrated resistor.
Comunicação entre dois Arduino Nano ESP32 - Visão Geral
Existem vários métodos para permitir a comunicação entre o "Arduino Nano ESP32 #1" e o "Arduino Nano ESP32 #2". A escolha do método depende da distância entre eles. Algumas das opções incluem:
Métodos Distância SPI muito curta I2C muito curta UART (TTL) muito curta UART (RS-232/485/422) curta Bluetooth curta LoRa longa WiFi ilimitada(*) ※ Nota:
(*):
- Se os dois dispositivos Arduino Nano ESP32 estiverem conectados à internet, a distância de comunicação é ilimitada.
- Se os dois dispositivos Arduino Nano ESP32 não estiverem conectados à internet, mas estiverem conectados à mesma LAN (Rede Local), a distância de comunicação fica limitada à rede LAN.
Este tutorial vai usar WiFi para a comunicação entre dois ESP32.
Comunicação entre dois Arduino Nano ESP32 via WiFi
Dois dispositivos Arduino Nano ESP32 podem estabelecer comunicação via WiFi nas seguintes condições:
- Se os dois dispositivos Arduino Nano ESP32 estiverem dentro da mesma LAN (Rede Local), eles podem se comunicar sem precisar se conectar à internet.
- Se os dois dispositivos Arduino Nano ESP32 estiverem em redes LAN diferentes, eles devem se conectar à Internet para viabilizar a comunicação.
Existem dois métodos principais de comunicação entre dois dispositivos Arduino Nano ESP32:
- Comunicação Direta:
- Neste método, um Arduino Nano ESP32 atua como cliente TCP enquanto o outro serve como servidor TCP. Eles se comunicam diretamente um com o outro via WiFi.
- Os dois dispositivos Arduino Nano ESP32 atuam como clientes TCP e se comunicam indiretamente por meio de um servidor centralizado, como um servidor MQTT. Você pode consultar o tutorial sobre Comunicação ESP32 com Arduino Nano ESP32 via MQTT para ver os detalhes de implementação.
- Protocolo definido por você sobre TCP puro (usado para comunicação direta)
- Modbus TCP (usado para comunicação direta)
- HTTP (usado para comunicação direta)
- Telnet (usado para comunicação direta)
- SSH (usado para comunicação direta)
- MQTT (usado para comunicação indireta por meio de um servidor)
^ Comunicação Indireta por meio de um Servidor Centralizado (por exemplo, servidor MQTT):
É necessário um protocolo de aplicação que os dois Arduino Nano ESP32 usam para se comunicar um com o outro. Por exemplo:
Aplicação de Exemplo
Vamos implementar a seguinte aplicação: Um botão ou interruptor conectado ao Arduino Nano ESP32 #1 vai controlar um LED conectado ao Arduino Nano ESP32 #2 via WiFi.

Para simplificar, vamos usar um protocolo definido por nós (criado por nós, não um padrão).
Protocolo Definido por Nós
Definimos um protocolo simples da seguinte forma:
- Criar uma conexão TCP entre o Arduino Nano ESP32 #1 e o Arduino Nano ESP32 #2
- Arduino Nano ESP32 #1:
- Cliente TCP: faz ativamente a requisição de conexão TCP ao Arduino Nano ESP32 #2
- Se o estado do interruptor mudar para ON, o Arduino Nano ESP32 #1 envia um byte (comando) com valor 1 ao Arduino Nano ESP32 #2.
- Se o estado do interruptor mudar para OFF, o Arduino Nano ESP32 #1 envia um byte (comando) com valor 0 ao Arduino Nano ESP32 #2.
- Arduino Nano ESP32 #2:
- Servidor TCP: escuta uma requisição de conexão TCP do Arduino Nano ESP32 #1. Se houver uma requisição TCP, ele a aceita e a conexão é criada.
- Se ele receber um byte:
- Se o valor for 1, liga o LED
- Se o valor for 0, desliga o LED
- Diagrama de Ligação para o Arduino Nano ESP32 #1: CLIENTE TCP + UM BOTÃO/INTERRUPTOR
- Diagrama de Ligação para o Arduino Nano ESP32 #2: SERVIDOR TCP + UM LED
- Tutorial Arduino Nano ESP32 - LED
- Tutorial Arduino Nano ESP32 - Botão
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
- Ligue um botão/interruptor ao Arduino Nano ESP32 #1
- Ligue um LED ao Arduino Nano ESP32 #2
- Abra a Arduino IDE (chamada de Arduino IDE #1)
- Instale a biblioteca ezButton na Arduino IDE
- Conecte o Arduino Nano ESP32 #1 ao PC por cabo USB e selecione a porta COM do Arduino Nano ESP32 #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 Nano ESP32 #2 ao PC por cabo USB e selecione a porta COM do Arduino Nano ESP32 #2 na Arduino IDE #2
- Copie o código do Arduino Nano ESP32 #1, cole na Arduino IDE #1 e salve-o (com o nome ESP321)
- Copie o código do Arduino Nano ESP32 #2, cole na Arduino IDE #2 e salve-o (com o nome ESP322)
- Envie primeiro o código do Arduino Nano ESP32 #2 para o Arduino Nano ESP32 #2
- Abra o Serial Monitor na Arduino IDE #2 e obtenha o endereço IP do Servidor TCP
- Atualize o endereço IP do Servidor TCP no código do Arduino Nano ESP32 #1
- Envie o código do Arduino Nano ESP32 #1 para o Arduino Nano ESP32 #1
- Abra o Serial Monitor na Arduino IDE #1
- Pressione e segure o botão do Arduino Nano ESP32 #1 → veja o estado do LED no Arduino Nano ESP32 #2 (ON)
- Solte o botão do Arduino Nano ESP32 #1 → veja o estado do LED no Arduino Nano ESP32 #2 (OFF)
- Repita o processo acima várias vezes.
- Veja a saída nos dois Serial Monitors
- Serial Monitor do Arduino Nano ESP32 #1
- Serial Monitor do Arduino Nano ESP32 #2
- (): Se você abrir a janela da Arduino IDE #2 por "File" → "New" ou "Open" a partir da janela da Arduino IDE #2, você NÃO conseguirá abrir dois Serial Monitors para os dois Arduino Nano ESP32 no mesmo PC ao mesmo tempo.
- Existe uma alternativa a este protocolo definido por nós. É o Modbus TCP. O protocolo Modbus é padronizado e tem muitas vantagens sobre o protocolo definido por nós. Veja mais no tutorial Arduino Nano ESP32 - Modbus
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image

This image is created using Fritzing. Click to enlarge image
※ Nota:
É necessário usar um resistor para o LED se ele não tiver um resistor embutido. Temos tutoriais dedicados para botão e LED. Você pode aprender mais sobre eles em:
Código Arduino Nano ESP32 para o Arduino Nano ESP32 #1
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/communication-between-two-arduino-nano-esp32 */ // ESP32: TCP CLIENT + A BUTTON/SWITCH #include <ezButton.h> #include <WiFi.h> #define BUTTON_PIN D2 // The Arduino Nano ESP32 pin connected to the button const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char* serverAddress = "192.168.0.180"; // CHANGE TO ESP32#2'S IP ADDRESS const int serverPort = 4080; ezButton button(BUTTON_PIN); // create ezButton WiFiClient TCPclient; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds Serial.println("Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // connect to TCP server (Arduino #2) if (TCPclient.connect(serverAddress, serverPort)) { Serial.println("Connected to TCP server"); } else { Serial.println("Failed to connect to TCP server"); } } void loop() { button.loop(); // MUST call the loop() function first if (!TCPclient.connected()) { Serial.println("Connection is disconnected"); TCPclient.stop(); // reconnect to TCP server (Arduino #2) if (TCPclient.connect(serverAddress, serverPort)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); } } if (button.isPressed()) { TCPclient.write('1'); TCPclient.flush(); Serial.println("- The button is pressed, sent command: 1"); } if (button.isReleased()) { TCPclient.write('0'); TCPclient.flush(); Serial.println("- The button is released, sent command: 0"); } }Código Arduino Nano ESP32 para o Arduino Nano ESP32 #2
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/communication-between-two-arduino-nano-esp32 */ // ESP32 #2: TCP SERVER + AN LED #include <WiFi.h> #define LED_PIN D5 // The Arduino Nano ESP32 pin connected to LED #define SERVER_PORT 4080 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiServer TCPserver(SERVER_PORT); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("Arduino Nano ESP32 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Print your local IP address: Serial.print("ESP32 #2: TCP Server IP address: "); Serial.println(WiFi.localIP()); Serial.println("ESP32 #2: -> Please update the serverAddress in ESP32 #1 code"); // Start listening for a TCP client (from ESP32 #1) TCPserver.begin(); } void loop() { // Wait for a TCP client from ESP32 #1: WiFiClient client = TCPserver.available(); if (client) { // Read the command from the TCP client: char command = client.read(); Serial.print("ESP32 #2: - Received command: "); Serial.println(command); if (command == '1') digitalWrite(LED_PIN, HIGH); // Turn LED on else if (command == '0') digitalWrite(LED_PIN, LOW); // Turn LED off client.stop(); } }Passos Rápidos
8 Serial.println("Hello World!");Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')New Line9600 baudArduino Nano ESP32 #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in Arduino Nano ESP32 #1 code8 Serial.println("Hello World!");Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')New Line9600 baudArduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH Arduino Nano ESP32 #1: Connected to TCP server Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 08 Serial.println("Hello World!");Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')New Line9600 baudArduino Nano ESP32 #2: TCP SERVER + AN LED Arduino Nano ESP32 #2: TCP Server IP address: 192.168.0.2 Arduino Nano ESP32 #2: -> Please update the serverAddress in Arduino Nano ESP32 #1 code Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0※ Nota:
Vídeo
Como conectar dois Arduino Nano ESP32 pela Internet
Tutoriais Relacionados