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:

comunicação entre dois ESP32

Hardware Necessário

2×Módulo de Desenvolvimento ESP32 ESP-WROOM-32
2×Cabo Micro USB
1×Push Button
1×LED Kit
1×LED (red)
1×LED Module
1×(Alternativa) Button and LED Kit
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentação para ESP32

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.

    ^ Comunicação Indireta por meio de um Servidor Centralizado (por exemplo, servidor MQTT):

    • 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.

    É necessário um protocolo de aplicação que os dois Arduino Nano ESP32 usam para se comunicar um com o outro. Por exemplo:

    • 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)

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.

comunicação entre dois ESP32

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

      • Diagrama de Ligação para o Arduino Nano ESP32 #1: CLIENTE TCP + UM BOTÃO/INTERRUPTOR
      Diagrama de ligação do botão com Arduino Nano ESP32

      This image is created using Fritzing. Click to enlarge image

      • Diagrama de Ligação para o Arduino Nano ESP32 #2: SERVIDOR TCP + UM LED
      Diagrama de ligação do LED com Arduino Nano ESP32

      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

      • 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
      ∞
      Newbiely | Arduino IDE 2.3.8
      ──
      ☐
      ✕
      File
      Edit
      Sketch
      Tools
      Help
      Arduino Nano ESP32
      Newbiely.ino
      ···
      8 Serial.println("Hello World!");
      Output
      Serial Monitor
      Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
      New Line
      9600 baud
      Arduino Nano ESP32 #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in Arduino Nano ESP32 #1 code
      Ln 11, Col 1
      Arduino Nano ESP32 on COM15
      2
      • 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
        ∞
        Newbiely | Arduino IDE 2.3.8
        ──
        ☐
        ✕
        File
        Edit
        Sketch
        Tools
        Help
        Arduino Nano ESP32
        Newbiely.ino
        ···
        8 Serial.println("Hello World!");
        Output
        Serial Monitor
        Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
        New Line
        9600 baud
        Arduino 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: 0
        Ln 11, Col 1
        Arduino Nano ESP32 on COM15
        2
        • Serial Monitor do Arduino Nano ESP32 #2
        ∞
        Newbiely | Arduino IDE 2.3.8
        ──
        ☐
        ✕
        File
        Edit
        Sketch
        Tools
        Help
        Arduino Nano ESP32
        Newbiely.ino
        ···
        8 Serial.println("Hello World!");
        Output
        Serial Monitor
        Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
        New Line
        9600 baud
        Arduino 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
        Ln 11, Col 1
        Arduino Nano ESP32 on COM15
        2

        ※ Nota:

        • (): 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

Vídeo

Como conectar dois Arduino Nano ESP32 pela Internet

Veja Como conectar dois dispositivos pela Internet

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!