Comunicación entre dos Arduinos
En este tutorial, vamos a aprender:
- Comunicación entre dos Arduinos - Visión general
- Comunicación entre dos Arduinos a través de Ethernet/WiFi
- Aplicación de ejemplo: un botón o interruptor conectado al Arduino #1 controla un LED conectado al Arduino #2 a través de Ethernet/WiFi
- Cómo conectar dos Arduinos a través de Internet

El tutorial proporciona el código de Arduino para dos casos:
- Arduino Uno R4 WiFi
- Arduino Uno/Mega con Ethernet Shield
Hardware Requerido
| 2 | × | Arduino UNO R4 WiFi | |
| 2 | × | Cable 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 (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Comunicación entre dos Arduinos - Visión general
Consideremos un caso específico: Arduino n.º 1 se comunica con Arduino n.º 2. Existen muchos métodos para habilitar la comunicación entre dos Arduinos. Podemos elegir uno de ellos en función del rango de comunicación. La tabla siguiente muestra algunos métodos y su rango de comunicación.
| Methods | Range |
|---|---|
| I2C | very short |
| SPI | very short |
| UART (TTL) | very short |
| UART (RS-232/485/422) | short |
| Bluetooth | short |
| LoRa | long |
| Ethernet/WiFi | unlimited(*) |
※ Nota:
(*):
- Si dos Arduinos están conectados a Internet, el rango de comunicación es ilimitado
- Si dos Arduinos no están conectados a Internet, pero están conectados en la misma red LAN, todavía pueden comunicarse entre sí. El rango de comunicación está limitado dentro de la red LAN.
Entre los métodos anteriores, este tutorial utiliza Ethernet/WiFi para permitir la comunicación entre dos Arduinos, porque permite que dos Arduinos se comuniquen a una distancia ilimitada.
Comunicación entre dos Arduinos vía Ethernet/WiFi
Dos Arduinos pueden comunicarse entre sí a través de Ethernet/WiFi si:
- Dos Arduinos en la misma red LAN, la conectividad a Internet no es necesaria
- Dos Arduinos en diferentes redes LAN, la conectividad a Internet es necesaria
No importa si dos Arduinos se conectan entre sí dentro de una red LAN local o a través de Internet, existen dos tipos de comunicación:
- Dos Arduinos se comunican directamente entre sí
- Dos Arduinos se comunican a través de un servidor centralizado (p. ej. un servidor MQTT). Consulte Comunicación entre dos Arduinos mediante MQTT
En el caso de comunicarse directamente, en la mayoría de los casos, un Arduino actúa como cliente TCP y el otro como servidor TCP.
En el caso de comunicarse a través de un servidor centralizado, en la mayoría de los casos, ambos Arduinos desempeñan el papel de cliente TCP.
Dependiendo de la aplicación, necesitamos elegir un protocolo de aplicación para comunicarse entre dos placas Arduino. A continuación se muestran algunos de los protocolos de aplicación que podemos usar:
- Protocolo propio sobre TCP crudo (directamente)
- Modbus TCP (directamente)
- HTTP (directamente)
- Telnet (directamente)
- SSH (directamente)
- MQTT (a través de un servidor central)
※ Nota:
No importa si:
- Ambos Arduinos usan Ethernet
- Ambos Arduinos usan WiFi
- Un Arduino usa Ethernet, el otro usa WiFi
El protocolo UDP está fuera del alcance de este tutorial.
Aplicación de ejemplo
Realicemos la siguiente aplicación: un botón o interruptor conectado al Arduino #1 controla un LED conectado al Arduino #2 mediante Ethernet/WiFi.

Este tutorial utiliza dos escudos Ethernet de Arduino. Puede usar otro WiFi Shield o Ethernet Shield en su lugar. Si usa otro escudo, solo necesita modificar el código un poco.
Como se mencionó anteriormente, hay algunos protocolos de aplicación que podemos usar. En este ejemplo, para simplificarlo, definiremos un protocolo por nosotros mismos (un protocolo definido por nosotros mismos).
Protocolo definido por uno mismo
Definamos un protocolo sencillo:
- Se crea una conexión TCP entre Arduino #1 y Arduino #2
- Arduino #1:
- Actúa como cliente TCP, realiza activamente una solicitud de conexión TCP a Arduino #2
- Cuando el interruptor se ponga en ENCENDIDO, Arduino #1 envía un byte (comando) con valor 1 a Arduino #2.
- Cuando el interruptor se ponga en APAGADO, Arduino #1 envía un byte (comando) con valor 0 a Arduino #2.
- Arduino #2:
- Actúa como servidor TCP, escucha la solicitud de conexión TCP de Arduino #1
- Si el byte recibido es 1, enciende el LED
- Si el byte recibido es 0, apaga el LED
Diagrama de cableado

※ Nota:
Necesitas añadir una resistencia para el LED si el LED no tiene una resistencia integrada. Puedes aprender más en los tutoriales Arduino - LED y Arduino - Button.
Comunicación entre dos Arduinos vía WiFi
Código de Arduino para Arduino Uno R4 WiFi #1
Código de Arduino para Arduino Uno R4 WiFi #2
Comunicación entre dos Arduinos vía Ethernet
Código de Arduino para Arduino Ethernet #1
Código de Arduino para Arduino Ethernet #2
Pasos R\u00e1pidos
- Si se utiliza el Ethernet Shield, apile los Ethernet Shields en Arduino #1 y Arduino #2
- Conecte un botón/interruptor al Arduino #1
- Conecte un LED al Arduino #2
- Abra Arduino IDE (llamado Arduino IDE #1)
- Instale la biblioteca ezButton en Arduino IDE
- Conecte el Arduino #1 a la PC mediante un cable USB y seleccione el puerto COM del Arduino #1 en Arduino IDE #1
- Abra otra ventana de Arduino IDE (llamada Arduino IDE #2) haciendo clic en el icono de Arduino IDE en su PC (¡importante!())
- Conecte el Arduino #2 a la PC mediante un cable USB y seleccione el puerto COM del Arduino #2 en Arduino IDE #2
- Copie el código del Arduino #1, péguelo en Arduino IDE #1 y guárdelo (llamado Arduino1)
- Copie el código del Arduino #2, péguelo en Arduino IDE #2 y guárdelo (llamado Arduino2)
- Cargue el código del Arduino #2 en el Arduino #2 primero
- Abra el Monitor Serial en Arduino IDE #2 y obtenga la dirección IP del servidor TCP
- Subir el código del Arduino #1 al Arduino #1
- Abrir el Monitor Serial en el IDE de Arduino #1
- Mantén presionado el botón en el Arduino #1 → observa el estado del LED en el Arduino #2 (ENCENDIDO)
- Suelta el botón en el Arduino #1 → observa el estado del LED en el Arduino #2 (APAGADO)
- Presiona, mantén y suelta el botón varias veces.
- Ver la salida en ambos Monitores Serial
- Monitor Serial del Arduino #1
- Monitor Serial de Arduino #2
- (): Si abres la ventana del IDE de Arduino #2 a través de "Archivo" → "Nuevo" o "Abrir" desde la ventana del IDE de Arduino #2, NO podrás abrir dos monitores de serie para dos Arduino en la misma PC al mismo tiempo.
- Existe una alternativa a este protocolo autodefinido. Es Modbus TCP. El protocolo Modbus está estandarizado; tiene muchas ventajas sobre el protocolo autodefinido. Véase más en el tutorial Arduino - Modbus.
※ Nota:
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.
Cómo conectar dos Arduinos a través de Internet
Hay dos tipos de direcciones IP: direcciones IP privadas y direcciones IP públicas. La dirección IP que estás utilizando en la red doméstica suele ser una dirección IP privada.
Puedes identificar fácilmente la dirección IP privada. La dirección IP privada tiene tres patrones: 10.x.x.x, 172.16.x.x, 192.168.x.x
No importa usar la dirección IP privada en el siguiente caso:
- Si dos Arduinos están en la misma red LAN, independientemente de si se comunican directamente o a través de un servidor centralizado, independientemente de si tu red LAN está conectada a Internet o no.
- Si dos Arduinos están en redes LAN diferentes y se comunican entre sí a través de un servidor centralizado.
En el caso de que dos Arduinos estén en diferentes redes LAN y se comuniquen entre sí directamente. El cliente TCP de Arduino puede usar la dirección IP privada. Sin embargo, el servidor TCP de Arduino DEBE usar ya sea:
- Una dirección IP pública
- Una dirección IP privada con "Redirección de puertos" en Router/AP
El proceso de realizar el 'reenvío de puertos' es diferente en cada router/punto de acceso. Está fuera del alcance de este tutorial.