Arduino 433 MHz Wireless Module
·
Timo Denk
This post provides a quick reference for the 433 MHz wireless module, which is widely used in combination with the Arduino. The VirtualWire library is one possible way of utilizing the module.
Before you get started make sure you have attached antennas to both, transmitter and receiver. The wavelength can be calculated using the following formula.
$$\lambda = \frac{c}{f}$$
For $f=433\text{ MHz}$ this leads to $\lambda = 0.6923\text{ m}$. A monopole antenna would usually have a length of $l=\frac{1}{4}\lambda$ or $l=\frac{3}{2}\lambda$.
Wiring
Transmitter
VCC | 3.5 – 12 V | Power supply |
---|---|---|
ATAD | Arduino pin 12 | Serial data |
GND | GND | Ground (0 V) |
Receiver
VCC | 5 V | Power supply |
---|---|---|
DATA | Arduino pin 12 | Serial data |
GND | GND | Ground (0 V) |
Code
Transmitter
// library #include <VirtualWire.h> void setup() { Serial.begin(9600); // virtual wire vw_set_tx_pin(12); // pin vw_setup(8000); // bps } void loop() { sendString("message", true); delay(100); } void sendString(String message, bool wait) { byte messageLength = message.length() + 1; // convert string to char array char charBuffer[messageLength]; message.toCharArray(charBuffer, messageLength); vw_send((uint8_t *)charBuffer, messageLength); if (wait) vw_wait_tx(); Serial.println("sent: " + message); }
Receiver
// library #include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message void setup() { Serial.begin(9600); Serial.println("device is ready..."); vw_set_rx_pin(12); // pin vw_setup(8000); // bps vw_rx_start(); } void loop() { if (vw_get_message(message, &messageLength)) // non-blocking { Serial.print("received: "); for (int i = 0; i < messageLength; i++) { Serial.write(message[i]); } Serial.println(); } }
Range Extension
There are three primary factors affecting the overall range. With optimisation one can get ranges of up to 150 m (source).
- Antenna. Make sure you are using an adequate antenna, ideally one that is distinguished to be working with the frequency of your module.
- Transmitter voltage. The higher the transmitter voltage, the stronger the signal. For maximum range the voltage can be up to $U=12\text{ V}$.
- Transmission speed. Lower transmission speeds increase the transmission range. You can decrease the bits-per-second (bps) rate by changing the lines
vw_setup(8000);
in the transmitter and the receiver code. For a long range a value of approximately 500 bps is suitable.