Overview
The NRF24L01 is a wireless transceiver (transmitter and receiver) module used with Arduino boards to provide circuits the capability to communicate with other circuits using Radio Frequency (RF). It uses the 2.4 GHz band and can operate with baud rates from 250 kbps to 2 Mbps. If used in open space and with a lower baud rate, its range can reach up to 100 meters.
Each module can communicate with 6 other modules. Using this capability, you can create a network of boards that communicate with each other directly. Such a network is known as a mesh network and reduces the dependency on a single router. In IoT solutions, where boards are close to each other (such as in a Smart Home) radio can be an effective communication protocol without requiring WiFi infrastructure.
The nRF24L01 module is very useful but a bit tricky to set up and program. There is a lesson on using NRF24L01 for radio communication between the three circuits. While the instructions and the sketch work perfectly fine, it may be difficult for everyone to follow and work with the module.
As an alternative, we are using I2C as a straightforwards option for communication between circuits. If you are feeling adventurous, you can try to add radio communication using the NRF24L01.
Components
Circuit Diagram
Assembly
The NRF24L01 has a 3.3V operating voltage. When using it with a Nano, ensure it is connected to the 3.3V supply and not the 5V supply. Any kind of noise in the power supply can interfere with the radio, but this can be easily overcome by connecting a 10uF and 0.1uF capacitor in parallel to the Vcc and Ground pins.
It communicates with the board over the Serial Peripheral Interface (SPI) protocol, so pins D10 to D13, which are SPI pins on the Nano, need to be used.
The way an NRF24L01 module works and the concept of pipes and addresses required for RF communication between modules is explained in detail in the lesson in Circuit One. The connections and the changes to the sketch for Circuit Two are explained here.
In this project, the circuits/radios will use the following pipes to exchange data with each other.
Transmitter | Receiver | Receiver Pipe Address |
---|---|---|
Circuit/Radio 1 | Circuit/Radio 2 | F0F0F0A2A1 |
Circuit/Radio 1 | Circuit/Radio 3 | F0F0F0A3A1 |
Circuit/Radio 2 | Circuit/Radio 1 | F0F0F0A1A2 |
Circuit/Radio 2 | Circuit/Radio 3 | F0F0F0A3A2 |
Circuit/Radio 3 | Circuit/Radio 1 | F0F0F0A1A3 |
Circuit/Radio 3 | Circuit/Radio 2 | F0F0F0A2A3 |
Code