VirtualWire
VirtualWire library for Arduino

This is the Arduino VirtualWire library.

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. All that is required is transmit data, receive data and (for transmitters, optionally) a PTT transmitter enable.

It is intended to be compatible with the RF Monolithics (www.rfm.com) Virtual Wire protocol, but this has not been tested.

Does not use the Arduino UART. Messages are sent with a training preamble, message length and checksum. Messages are sent with 4-to-6 bit encoding for good DC balance, and a CRC checksum for message integrity.

Why not just use the Arduino UART connected directly to the transmitter/receiver? As discussed in the RFM documentation, ASK receivers require a burst of training pulses to synchronize the transmitter and receiver, and also requires good balance between 0s and 1s in the message stream in order to maintain the DC balance of the message. UARTs do not provide these. They work a bit with ASK wireless, but not as well as this code.

This library provides classes for

Example Arduino programs are included to show the main modes of use.

The version of the package that this documentation refers to can be downloaded from http://www.airspayce.com/mikem/arduino/VirtualWire/VirtualWire-1.15.zip You can find the latest version at http://www.airspayce.com/mikem/arduino/VirtualWire

You can also find online help and disussion at http://groups.google.com/group/virtualwire Please use that group for all questions and discussions on this topic. Do not contact the author directly, unless it is to discuss commercial licensing.

Supported Hardware
A range of communications hardware is supported. The ones listed blow are available in common retail outlets in Australian and other countries for under $10 per unit. Many other modules may also work with this software. Runs on ATmega8/168 (Arduino Diecimila, Uno etc) and ATmega328 and possibly others. Also runs on on Energia with MSP430G2553 / G2452 and Arduino with ATMega328 (courtesy Yannick DEVOS - XV4Y). Also compiles and runs on ATtiny85 in Arduino environment, courtesy r4z0r7o3.
Installation
To install, unzip the library into the libraries sub-directory of your Arduino application directory. Then launch the Arduino environment; you should see the library in the Sketch->Import Library menu, and example code in File->Sketchbook->Examples->VirtualWire menu.
Open Source Licensing GPL V2

This is the appropriate option if you want to share the source code of your application with everyone you distribute it to, and you also want to give them the right to share who uses it. If you wish to use this software under Open Source Licensing, you must contribute all your source code to the open source community in accordance with the GPL Version 2 when your application is distributed. See http://www.gnu.org/copyleft/gpl.html

Commercial Licensing

This is the appropriate option if you are creating proprietary applications and you are not prepared to distribute and share the source code of your application. Contact info@.nosp@m.airs.nosp@m.payce.nosp@m..com for details.

Revision History
Version:
1.0 Original release
1.1 2008-06-24 Now can compile for atmega8 Reported by creatrope
1.2 2009-03-30 Fixed a problem that prevented compiling with arduino-0015 Reported by Jaime Castro
1.3 2009-04-01 Fixed a compatibility problem with ATMEGA328 of the new arduino Now use SIGNAL(TIMER1_COMPA_vect) instead of ISR(SIG_OUTPUT_COMPARE1A) as discussed in http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1237714550/11 and reported by Jaime Castro.
1.4 2010-01-29 Added vx_tx_active(), suggested by Alan Burlison.
1.5 2011-09-09 Added vx_tx_active() function.
1.6 2012-01-10 Fixed a problem where the receiver was always reenabled after transmission. Reported by David Bath
1.9 2012-02-07 Documentation updates Documentation updates
1.10 Updated CHANGES file with changes since 1.4.
1.11 Converted documentation to Doxygen. Moved CHANGES log to this version history. Ensure vw_rx_pin is not accessed unless receiver is enabled
1.12 Compiles and runs on on Energia with MSP430G2553 / G2452 and Arduino with ATMega328. Patches contributed by Yannick DEVOS - XV4Y
1.13 util/crc16.h needed for compiling on Energia with MSP430G2553 / G2452 was accidentally left out of the distribution
1.14 Added support ATtiny85 on Arduino, patch provided by r4z0r7o3.
1.15 Updated author and distribution location details to airspayce.com
Implementation Details
See: http://www.airspayce.com/mikem/arduino/VirtualWire.pdf
Performance
See: http://www.airspayce.com/mikem/arduino/VirtualWire.pdf
Connections
See: http://www.airspayce.com/mikem/arduino/VirtualWire.pdf