14/10/2022
La comunicación inalámbrica es la columna vertebral de innumerables proyectos electrónicos modernos, permitiendo que dispositivos interactúen sin la necesidad de cables. Para los entusiastas de Arduino, lograr esta conectividad a menudo implicaba el uso de librerías especializadas que simplificaran la complejidad subyacente de la radiofrecuencia. Una de estas librerías, que gozó de gran popularidad por su simplicidad y eficacia para módulos de bajo costo, fue VirtualWire. Este artículo te guiará a través de su instalación, funcionamiento y, crucialmente, te presentará a su sucesora, RadioHead, la opción recomendada para tus proyectos actuales y futuros.

Acompáñanos en este recorrido para entender cómo VirtualWire facilitó la comunicación ASK (Amplitude Shift Keying) y por qué, a pesar de su legado, la evolución tecnológica nos lleva hacia soluciones más robustas y completas como RadioHead.
- ¿Qué es VirtualWire y Cómo Funciona la Comunicación Inalámbrica ASK?
- Guía Paso a Paso: Instalación de la Librería VirtualWire en Arduino IDE
- Hardware Compatible y Pruebas de Conexión
- El Futuro es RadioHead: La Sucesora de VirtualWire
- Preguntas Frecuentes (FAQ)
- ¿Por qué usar VirtualWire en lugar de una conexión UART directa a los módulos RF?
- ¿VirtualWire es compatible con todos los módulos RF?
- ¿Puedo usar VirtualWire en otros microcontroladores además de Arduino?
- ¿Cuál es la diferencia principal entre VirtualWire y RadioHead?
- ¿Cómo puedo compilar VirtualWire si no uso Arduino IDE?
- ¿Cómo puedo probar mi configuración de VirtualWire sin módulos RF?
- Conclusión
¿Qué es VirtualWire y Cómo Funciona la Comunicación Inalámbrica ASK?
VirtualWire es una librería diseñada para microcontroladores como Arduino, que permite enviar y recibir mensajes cortos de forma inalámbrica utilizando módulos de radiofrecuencia de bajo costo. Su funcionamiento se asemeja al protocolo UDP (User Datagram Protocol) en redes, lo que significa que los mensajes se envían sin un direccionamiento específico, sin retransmisiones automáticas y sin confirmación de recepción. Esto la hace ideal para aplicaciones donde la velocidad y la simplicidad son prioritarias sobre la fiabilidad garantizada.
El corazón de VirtualWire reside en su implementación de la comunicación mediante ASK (Amplitude Shift Keying). En ASK, la información se codifica variando la amplitud de una onda portadora. Simplificando, se transmite una señal de radio con una amplitud alta para representar un '1' binario y una amplitud baja (o nula) para un '0'. Esto contrasta con otras modulaciones como FSK (Frequency Shift Keying) o PSK (Phase Shift Keying).
¿Por Qué VirtualWire y No una Conexión UART Directa?
Muchos se preguntan por qué no simplemente conectar el pin TX de un Arduino a un módulo de transmisión RF y el pin RX del módulo receptor al RX de otro Arduino, utilizando la comunicación UART (Universal Asynchronous Receiver/Transmitter) estándar. La razón es fundamental y radica en las características inherentes de los módulos ASK y la naturaleza de la transmisión de datos binarios:
- Preamble de Entrenamiento: Los receptores ASK requieren una ráfaga inicial de pulsos de entrenamiento (un preámbulo) para sincronizarse con el transmisor. Esto permite que el receptor ajuste su ganancia y umbral de detección para interpretar correctamente los datos entrantes. Las UARTs no añaden este preámbulo automáticamente.
- Balance de DC (Corriente Continua): Para mantener la integridad de la señal y evitar el desplazamiento de la línea base, es crucial que haya un buen equilibrio entre los '0' y los '1' en el flujo de datos. Si se envían muchas '0's o '1's consecutivas, la línea base del receptor puede desviarse, dificultando la detección de los siguientes bits. VirtualWire utiliza una codificación especial de 4 a 6 bits (4B/6B) que asegura un buen balance de DC, transformando cada 4 bits de datos en 6 bits de señal transmitida para garantizar que no haya secuencias largas de bits idénticos.
- Checksum CRC: Para asegurar la integridad del mensaje, VirtualWire añade un checksum de redundancia cíclica (CRC). Esto permite al receptor detectar si el mensaje ha sido corrompido durante la transmisión debido a ruido o interferencias. Las UARTs básicas no ofrecen esta capacidad de verificación de errores.
En resumen, mientras que una UART directa podría "funcionar" en distancias muy cortas y con poco ruido, VirtualWire añade la inteligencia y la robustez necesarias para una comunicación inalámbrica más fiable y efectiva.
Guía Paso a Paso: Instalación de la Librería VirtualWire en Arduino IDE
Instalar VirtualWire en el entorno de desarrollo de Arduino (IDE) es un proceso sencillo. Sigue estos pasos para tener la librería lista para tus proyectos:
- Descarga la Librería: La versión más reciente y el aviso de fin de vida de VirtualWire se pueden encontrar en el sitio oficial de AirSpayce. Busca el archivo
VirtualWire-X.XX.zip(donde X.XX es el número de versión, por ejemplo, 1.27) y descárgalo a una ubicación fácil de recordar en tu ordenador. - Abre Arduino IDE: Inicia tu entorno de desarrollo de Arduino. Asegúrate de tener una versión 1.0 o posterior, aunque se recomienda la más actual.
- Navega al Gestor de Librerías: En el menú superior de Arduino IDE, ve a
Sketch>Incluir Librería>Añadir Librería .ZIP.... - Selecciona el Archivo ZIP: Se abrirá una ventana de diálogo. Navega hasta la carpeta donde descargaste el archivo
VirtualWire-X.XX.zipy selecciónalo. Haz clic en "Abrir" o "Elegir". - Verifica la Instalación: Una vez que la librería se haya instalado correctamente, Arduino IDE te mostrará un mensaje de confirmación en la barra de estado inferior. Para verificar que todo está en orden, ve nuevamente a
Sketch>Incluir Libreríay deberías ver "VirtualWire" listada entre las librerías disponibles. Además, puedes ir aArchivo>Ejemplosy buscar la sección "VirtualWire", donde encontrarás sketches de ejemplo que demuestran su uso.
¡Felicidades! VirtualWire ya está instalada y lista para ser utilizada en tus proyectos. Sin embargo, antes de sumergirte, es crucial entender el panorama actual de esta librería.
Hardware Compatible y Pruebas de Conexión
VirtualWire fue diseñada para ser altamente compatible con una amplia gama de microcontroladores y módulos RF de bajo costo, lo que contribuyó a su popularidad. Esto la hizo accesible para muchos proyectos de aficionados y prototipos.
Microcontroladores Compatibles
La librería VirtualWire puede ejecutarse en una gran variedad de plataformas, incluyendo:
- Arduino: Funciona con la mayoría de las placas Arduino que utilizan procesadores ATmega8, ATmega168, ATmega328 (como Arduino Uno, Diecimila, Nano, Pro Mini), y también en ATmega32u2, ATmega32U4, At90USB162.
- ATtiny: Soporte para ATtiny85 y ATtiny84. Es importante notar que en el ATtiny85, VirtualWire utiliza el Timer 0, lo que inhabilita funciones como
millis()ydelay(), aunque permite el uso de salidas analógicas (PWM) a través del Timer 1. - Teensy: Compatibilidad con Teensy 3.0 y 3.1.
- Maple: Funciona con placas como Maple y Flymaple 1.1 (basadas en STM32F103RE).
- Energia: Soporte para MSP430G2553 / G2452.
Módulos de Radiofrecuencia (RF) Comunes
VirtualWire es compatible con muchos módulos ASK de 433.92 MHz, que son muy económicos y fáciles de conseguir. Algunos de los más comunes incluyen:
- Receptores: RX-B1 (también conocido como ST-RX04-ASK).
- Transmisores: TX-C1.
- Transceptores: DR3100.
Estos módulos generalmente solo requieren conexiones para datos de transmisión (TX), datos de recepción (RX) y, opcionalmente para transmisores, un pin PTT (Push-To-Talk) para habilitar la transmisión.

Pruebas de Conexión y Funcionamiento
Para probar la funcionalidad de VirtualWire sin necesidad de módulos RF, o para depurar la lógica de tu código, puedes conectar dos instancias de VirtualWire directamente:
Puedes conectar el pin de transmisión de un Arduino al pin de recepción del otro y viceversa para una comunicación dúplex (bidireccional):
| Arduino 1 | Conexión | Arduino 2 |
|---|---|---|
| Pin D11 (TX) | ----------------------------- | Pin D12 (RX) |
| Pin D12 (RX) | ----------------------------- | Pin D11 (TX) |
| GND | ----------------------------- | GND |
Esta configuración te permite simular la comunicación inalámbrica y verificar que tu código de envío y recepción funciona correctamente antes de añadir los módulos RF.
Además, VirtualWire puede ser utilizada no solo con módulos RF, sino también a través de otras conexiones analógicas, como el canal de audio de un transmisor/receptor A/V. Esto podría requerir buffers en cada extremo para adaptar los niveles de voltaje digital (0-5V) a un voltaje analógico adecuado para la conexión.
El Futuro es RadioHead: La Sucesora de VirtualWire
Es fundamental que, si estás considerando iniciar un nuevo proyecto de comunicación inalámbrica con Arduino, prestes mucha atención a esta sección. Aunque VirtualWire fue una librería pionera y muy útil, ha llegado al final de su ciclo de vida. Esto significa que ya no se mantiene ni se actualiza, y se recomienda encarecidamente migrar a su sucesora: la librería RadioHead.
RadioHead es también desarrollada por Mike McCauley (el mismo autor de VirtualWire) y ofrece todas las características que VirtualWire proporcionaba, ¡y mucho más! Fue creada para ser una solución más completa y robusta para la comunicación inalámbrica, abordando las limitaciones de VirtualWire y ofreciendo capacidades avanzadas que son cruciales para proyectos más complejos y fiables.
¿Por Qué Migrar a RadioHead?
RadioHead no solo replica la funcionalidad básica de VirtualWire (como el controlador RH_ASK para comunicación ASK), sino que la expande con características vitales para una comunicación inalámbrica moderna:
- Datagramas Confiables: A diferencia de VirtualWire, RadioHead puede implementar datagramas confiables, lo que significa que puedes tener confirmación de que un mensaje ha sido recibido.
- Direccionamiento: Permite enviar mensajes a un nodo específico en una red, en lugar de una transmisión "broadcast" (a todos) como en VirtualWire.
- Enrutamiento: Facilita la creación de redes donde los mensajes pueden pasar a través de nodos intermedios para llegar a su destino final.
- Mallas (Meshes): Soporte para topologías de red de malla, lo que aumenta la robustez y el alcance de la red al permitir múltiples rutas para los mensajes.
- Amplia Compatibilidad: Soporta una gama aún más amplia de módulos RF y chips transceptores (incluyendo FSK, OOK, LoRa, nRF24L01, entre otros), no solo los módulos ASK básicos.
- Mantenimiento Activo: RadioHead es una librería activamente mantenida y actualizada, lo que garantiza soporte continuo, corrección de errores y nuevas funcionalidades.
En resumen, si bien VirtualWire cumplió su propósito en su momento, RadioHead es la elección lógica y superior para cualquier nuevo desarrollo. Ofrece mayor flexibilidad, fiabilidad y un camino de crecimiento para tus proyectos.
Tabla Comparativa: VirtualWire vs. RadioHead
| Característica | VirtualWire | RadioHead |
|---|---|---|
| Estado Actual | Fin de vida (No mantenida) | Activamente mantenida y actualizada |
| Tipo de Mensaje | Unaddressed, Unreliable (UDP-like) | Unaddressed, Reliable Datagrams, Addressed, Routing, Meshes |
| Modulación Principal | ASK (Amplitude Shift Keying) | ASK, FSK, OOK, LoRa, GFSK, otros |
| Direccionamiento | No (Broadcast) | Sí (a nodos específicos) |
| Confirmación (ACK) | No | Sí (para Datagramas Confiables) |
| Enrutamiento/Mallas | No | Sí |
| Checksum | CRC | CRC (y otras verificaciones según el controlador) |
| Codificación de Datos | 4 a 6 bits (para DC balance) | Varios esquemas (según el controlador) |
| Compatibilidad Hardware | Módulos ASK básicos (RX-B1, TX-C1, DR3100) y varios AVRs | Gran variedad de módulos y transceptores RF, incluyendo VirtualWire's hardware |
| Funciones Avanzadas | Básicas | Extensas (manejo de potencia, modos de bajo consumo, etc.) |
| Recomendación Actual | No para nuevos proyectos | Sí, para todos los nuevos proyectos |
Preguntas Frecuentes (FAQ)
¿Por qué usar VirtualWire en lugar de una conexión UART directa a los módulos RF?
VirtualWire implementa un protocolo que añade un preámbulo de sincronización, codificación de 4 a 6 bits para balance de DC y un checksum CRC. Estas características son esenciales para una comunicación inalámbrica robusta y fiable con módulos ASK de bajo costo, ya que las UARTs directas no ofrecen estas optimizaciones, lo que resultaría en transmisiones inestables o con errores.
¿VirtualWire es compatible con todos los módulos RF?
VirtualWire está diseñada específicamente para módulos de radiofrecuencia que utilizan la modulación ASK (Amplitude Shift Keying), como los populares módulos de 433.92 MHz (RX-B1, TX-C1). No es compatible con módulos que usan otras modulaciones (como FSK, LoRa, u otros protocolos como NRF24L01) sin un controlador específico, algo que sí ofrece su sucesora, RadioHead.

¿Puedo usar VirtualWire en otros microcontroladores además de Arduino?
Sí, VirtualWire es compatible con una variedad de microcontroladores más allá del ecosistema Arduino, incluyendo ATtiny85/84, Teensy 3.x, Maple y MSP430. La librería puede configurarse mediante el archivo 'VirtualWire_Config.h' para adaptarse a diferentes plataformas AVR8 incluso sin el framework de Arduino, y puede compilarse con un compilador C renombrando VirtualWire.cpp a VirtualWire.c.
¿Cuál es la diferencia principal entre VirtualWire y RadioHead?
La diferencia principal es que RadioHead es la librería sucesora y más avanzada. Mientras que VirtualWire ofrece comunicación ASK básica sin direccionamiento ni fiabilidad, RadioHead expande estas capacidades para incluir datagramas confiables, direccionamiento, enrutamiento, soporte para redes de malla y compatibilidad con una gama mucho más amplia de módulos RF y tipos de modulación. Además, VirtualWire ya no se mantiene, mientras que RadioHead recibe actualizaciones activas.
¿Cómo puedo compilar VirtualWire si no uso Arduino IDE?
Si no utilizas Arduino IDE, puedes compilar VirtualWire renombrando el archivo VirtualWire.cpp a VirtualWire.c. Esto permite que sea compilada por un compilador C estándar. Además, deberás configurar la librería adecuadamente utilizando el archivo de encabezado VirtualWire_Config.h para definir el acceso a los pines de E/S y la configuración del temporizador de tu microcontrolador. Esto facilita su integración con otros IDEs como Atmel Studio.
¿Cómo puedo probar mi configuración de VirtualWire sin módulos RF?
Para probar tu código sin módulos RF, puedes conectar dos placas Arduino directamente. Conecta el pin D11 (TX) de un Arduino al pin D12 (RX) del otro, y el pin D12 (RX) del primer Arduino al pin D11 (TX) del segundo. Asegúrate de conectar también los pines GND de ambas placas. Esto simula una conexión dúplex y te permite verificar la lógica de transmisión y recepción de tu programa.
Conclusión
La librería VirtualWire fue una herramienta invaluable para la comunidad de Arduino, democratizando el acceso a la comunicación inalámbrica por radiofrecuencia a través de módulos económicos. Su enfoque en la simplicidad y la eficacia para mensajes cortos la hizo un punto de partida excelente para muchos proyectos. Hemos explorado cómo se instala, sus principios de funcionamiento basados en ASK, y por qué sus características internas la hacen superior a una simple conexión UART para la comunicación RF.
Sin embargo, el mundo de la tecnología avanza rápidamente, y con él, las herramientas que utilizamos. Es crucial reconocer que VirtualWire ha cumplido su ciclo y ha sido superada por RadioHead. Esta librería no solo hereda y mejora las capacidades de VirtualWire, sino que introduce un abanico de funcionalidades avanzadas como el direccionamiento, los datagramas confiables y el soporte para redes de malla, lo que la convierte en la opción predilecta para cualquier nuevo desarrollo. Al optar por RadioHead, te aseguras de trabajar con una librería activamente mantenida, robusta y preparada para las exigencias de proyectos de comunicación inalámbrica más complejos y fiables.
Así que, mientras recordamos con gratitud el legado de VirtualWire, te animamos a mirar hacia el futuro y a explorar las vastas posibilidades que RadioHead te ofrece para llevar tus proyectos de Arduino al siguiente nivel de conectividad inalámbrica.
Si quieres conocer otros artículos parecidos a VirtualWire en Arduino: Guía Completa y su Sucesor puedes visitar la categoría Librerías.
