How to install virtualwire library in Arduino IDE?

VirtualWire en Arduino: Guía Completa y su Sucesor

14/10/2022

Valoración: 4.67 (14280 votos)

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.

How do I compile virtualwire?
From version 1.22 the library can be compiled by a C compiler (by renaming VirtualWire.cpp into VirtualWire.c) and can be easily integrated with other IDEs like 'Atmel Studio' for example (courtesy of Alexandru Mircescu).

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.

Índice de Contenido

¿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:

  1. 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.
  2. 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.
  3. Navega al Gestor de Librerías: En el menú superior de Arduino IDE, ve a Sketch > Incluir Librería > Añadir Librería .ZIP....
  4. Selecciona el Archivo ZIP: Se abrirá una ventana de diálogo. Navega hasta la carpeta donde descargaste el archivo VirtualWire-X.XX.zip y selecciónalo. Haz clic en "Abrir" o "Elegir".
  5. 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ía y deberías ver "VirtualWire" listada entre las librerías disponibles. Además, puedes ir a Archivo > Ejemplos y 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() y delay(), 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.

How do I use virtualwire vs Radiohead?
VirtualWire is superseded by the RadioHead library. Download the VirtualWire library from the author's site as a .zip file and use the library manager to add it to the libraries folder. Don't worry about the End of Life notice. It works fine and there are no known bugs.

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 1ConexiónArduino 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ísticaVirtualWireRadioHead
Estado ActualFin de vida (No mantenida)Activamente mantenida y actualizada
Tipo de MensajeUnaddressed, Unreliable (UDP-like)Unaddressed, Reliable Datagrams, Addressed, Routing, Meshes
Modulación PrincipalASK (Amplitude Shift Keying)ASK, FSK, OOK, LoRa, GFSK, otros
DireccionamientoNo (Broadcast)Sí (a nodos específicos)
Confirmación (ACK)NoSí (para Datagramas Confiables)
Enrutamiento/MallasNo
ChecksumCRCCRC (y otras verificaciones según el controlador)
Codificación de Datos4 a 6 bits (para DC balance)Varios esquemas (según el controlador)
Compatibilidad HardwareMódulos ASK básicos (RX-B1, TX-C1, DR3100) y varios AVRsGran variedad de módulos y transceptores RF, incluyendo VirtualWire's hardware
Funciones AvanzadasBásicasExtensas (manejo de potencia, modos de bajo consumo, etc.)
Recomendación ActualNo para nuevos proyectosSí, 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.

What is virtualwire & how does it work?
VirtualWire is an Arduino library that provides features to send short /// messages, without addressing, retransmit or acknowledgment, a bit like UDP /// over wireless, using ASK (amplitude shift keying). Supports a number of /// inexpensive radio transmitters and receivers.

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

Subir