Controlling Two (or More) 433 Mhz Receivers Using a Single 433 Mhz Transmitter

Droiduino Blog
5 min readSep 20, 2020

Creating a system that can control and monitor multiple remote devices using Android and Arduino requires adding wireless capability to the devices that are to be controlled. And for that, using RF is one of the logical choices.

For the project that I am about to start, WIFI and IOT are out of options since the scenario is to use the system in an off the grid situation, independent from an external network. Also, the system needs to be self-contained but compact to make it portable and mobile.

There are many possible configurations of RF devices that can be used, and I plan to experiment with those configurations to find the most suitable hardware combination for my usage scenario.

I will start with the most common and inexpensive one which is the 433Mhz transmitter and receiver.

433Mhz Transmitter (left) and 433Mhz receiver (right)

The experiment that I perform is whether a single 433Mhz transmitter can control multiple 433Mhz receivers. The mechanism that I have in mind is something like this:

  1. The transmitter broadcasts a unique command message string, let’s say “XYZ”.
  2. All receivers receive the same message.
  3. However, each receiver is programmed with a logic to only activate if a command that is specific for that receiver is received.
  4. So, only the receivers that have been programmed to activate with command “XYZ” that will be switched on (i.e. do some actions e.g. turn on light, lock the door, etc). The rest will stay idle.

Components

We need one Arduino board for each transmitter and receiver module. In my experiment, I use one 433Mhz transmitter and two 433Mhz receivers, so I need 3 Arduino boards. These are the components I use:

  1. 3 Arduino boards ( I use 1 Mega ADK and 2 Uno)
  2. 1 433Mhz Transmitter
  3. 2 433Mhz Receivers
  4. Some jumper cables
  5. 2 9V batteries and battery clip to power the receivers

Schematic

The hardware connection is pretty much straightforward. The idea is to control the built-in LED on each Arduino board that acts as a receiver. The states of LED that will be controlled are ON, OFF, and Blinking.

For the transmitter, the schematic is shown in the picture below.

And for the receivers, the schematic is shown below.

To be compatible with the external library used in this project (Radiohead library), “Data” pin from 433 Mhz transmitter must be connected to pin 12 on Arduino, while “Data” pin from 433 Mhz receiver must be connected to pin 11 on Arduino.

Arduino Code

For the transmitter, the purpose of the code is to manage the signal that is transmitted i.e. signal content (or payload) and also signal duration. And to do that, we use external library called Radiohead.

Note: You should check with local law about signal transmission in 433Mhz frequency since it might interfere with other equipment that uses the same frequency. For that reason, the signal used in this project is transmitted intermittently (instead of continuously) and the power is quite low.

You can use any signal payload to be used as the activation command for the receiver. I use a UUID string that is generated by this website for the signal payload to make sure it is unique.

This is the code for the Transmitter.

After initializing the required libraries, we need to create the Radiohead object.

RH_ASK driver;

The “state” represents conditional check that will trigger signal transmission. In the snippet below, we are defining the trigger command as “A1” and “B3” that will turn on LED in Arduino receiver “A” and make the LED blinking in Arduino receiver “B”.

This is actually just something that I come up with. You can change it whatever you want.

Now, this snippet is what actually defines the signal payload and then transmits the payload. The example below is for controlling Arduino receiver “A”.

You can have any String data for the payload. I use UUID that is generated online to ensure uniqueness.

char msg[23] = "a74f689c-a66c-11ea-bb37-0242ac130002";

For the receiver, the purpose of the Arduino code is to define which signal payload that will become the activation command, and the actual action that the signal will trigger. In this case, it controls the built-in LED on the receiver’s Arduino board.

This is the code for one of the receivers.

Receiver configuration must be in sync with the signal payload that is defined in the transmitter code.

const String cmdOff = "744c7b04-a65f-11ea-bb37"; 
const String cmdOn = "a74f689c-a66c-11ea-bb37";
const String cmdBlink = "08d9d004-a675-11ea-bb37";

For the second receiver, the code is similar. The difference is on the signal payload that will activate its functions.

Running the System

In this experiment, I’m not using any physical buttons to trigger signal transmission. So the command that will control the receivers is hard coded into Arduino code and need to be manually changed if I want to send a different command.

The command that we want to transmit is defined in this snippets:

String cmd1 = "A1"; 
String cmd2 = "B3";

The transmitter will broadcast 2 commands. The first one is the command to turn on LED on receiver “A” and the second one is the command to make the LED on receiver “B” blinking.

Since we cannot broadcast the signal payload all at once, the signal payload needs to be alternately transmitted. The snippet below manages which payload that will be transmitted.

When we upload the transmitter code, it should automatically transmit alternately between the payload for “cmd1” and payload for “cmd2”.

If I want to execute other command, then I need to manually change the payload for “cmd1” and “cmd2” directly in the code. I deliberately didn’t provide any physical interface to the transmitter like push buttons because it’s intended to be controlled by an Android phone.

Experiment Result

This setup proofs that a single 433Mhz transmitter can be used to control multiple receivers. The next step is to give the transmitter module a Bluetooth capability so that it can connect to an Android phone and be controlled from the phone.

Note on Range

433Mhz Transmitter and Receiver are quite inexpensive Arduino modules. So, if you want to improve the transmission range, an antenna should be added to the transmitter module. Otherwise, the max transmission module is around 3 meters.

--

--

Droiduino Blog

Droiduino is about sharing knowledge in the realm of Android app programming, Arduino project creation and using R for processing data.