Radio (NRF24L01 Module)

The NRF24L01 is an RF transceiver module, which means it can transmit and receive data using Radio Frequency (RF) signals.

NRF24L01 Pipes and Addresses

NRF24L01 modules (radios) have six "pipes" (virtual pipes managed by the device firmware, with no physical part) used for sending or receiving data to and from other radios. Pipe 0 is used to send (or write) data and is the "writing pipe". Pipes 1 to 5 are used to receive (or read) data and are the "reading pipes". Pipe 0 may be used for reading as well, but to minimize complexity, we will keep it as a dedicated writing pipe.

The number of pipes as used above means that one radio can send to any other radios (in sequence, not at the same time) and can listen to five other radios at the same time to receive the data they send. Each pipe has an "address". A radio specifies addresses for the five pipes it is listening on, and other radios must send data to one of those five addresses. The NRF24L01 modules typically use a 40-bit address format, requiring 5-bytes of storage space per address. For a radio, pipes 1 to 5 should have addresses that differ only in the least significant (right-most) byte. In a set of radios that exchange data, each pipe address must be unique.

The listening pipe address configuration for three radio modules using the HEX format is shown in the table below. While any addressing convention can be used, we use the following: The first three bytes are all F0. The fourth byte is A1, A3, and A3 for circuits/radios 1, 2, and 3 respectively. And the fifth byte is A1 to A5 for pipes 1 to 5 respectively.

PipeRadio 1 Addresses
Pipe 0Writing only, no address
Pipe 1F0F0F0A1A1
Pipe 2F0F0F0A1A2
Pipe 3F0F0F0A1A3
Pipe 4F0F0F0A1A4
Pipe 5F0F0F0A1A5
PipeRadio 2 Addresses
Pipe 0Writing only, no address
Pipe 1F0F0F0A2A1
Pipe 2F0F0F0A2A2
Pipe 3F0F0F0A2A3
Pipe 4F0F0F0A2A4
Pipe 5F0F0F0A2A5
PipeRadio 3 Addresses
Pipe 0Writing only, no address
Pipe 1F0F0F0A3A1
Pipe 2F0F0F0A3A2
Pipe 3F0F0F0A3A3
Pipe 4F0F0F0A3A4
Pipe 5F0F0F0A3A5

The pipes used for communicating between radios must be pre-defined and fixed. The transmitting radio must agree with the receiving radio which of the receiver's reading pipes it should send data on. The receiver radio expects data from anyone specific transmitting radio on each of its pipes. For a radio that intends to transmit, pipe 0 is the fixed writing pipe so avoid listening on that.

In this project, the circuits/radios will use the following pipes to exchange data with each other.

TransmitterReceiverReceiver Pipe Address
Radio 1Radio 2F0F0F0A2A1
Radio 1Radio 3F0F0F0A3A1
Radio 2Radio 1F0F0F0A1A2
Radio 2Radio 3F0F0F0A3A2
Radio 3Radio 1F0F0F0A1A3
Radio 3Radio 2F0F0F0A2A3