nRF24L01 wireless transceiver
The Nordic Semi nRF21L01+ is a single-chip, 2.4GHz band wireless transceiver, capable of up to 2Mbps air data rate, multi-point reception, and auto-acknowledge / auto-retransmit. The nRF24L01+ consumes only 11.3mA while transmitting, and 13.5mA while receiving. It has a simple 6-pin digital connection, including a 4-wire SPI interface, an interrupt pin and dedicated transmit/receive enable pin. Sparkfun's module includes a chip antenna, and claims a range of 100m.
Hello World!¶
Import program
00001 #include "mbed.h" 00002 #include "nRF24L01P.h" 00003 00004 Serial pc(USBTX, USBRX); // tx, rx 00005 00006 nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq 00007 00008 DigitalOut myled1(LED1); 00009 DigitalOut myled2(LED2); 00010 00011 int main() { 00012 00013 // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's 00014 // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) 00015 // only handles 4 byte transfers in the ATMega code. 00016 #define TRANSFER_SIZE 4 00017 00018 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; 00019 int txDataCnt = 0; 00020 int rxDataCnt = 0; 00021 00022 my_nrf24l01p.powerUp(); 00023 00024 // Display the (default) setup of the nRF24L01+ chip 00025 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); 00026 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); 00027 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); 00028 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); 00029 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); 00030 00031 pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); 00032 00033 my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); 00034 00035 my_nrf24l01p.setReceiveMode(); 00036 my_nrf24l01p.enable(); 00037 00038 while (1) { 00039 00040 // If we've received anything over the host serial link... 00041 if ( pc.readable() ) { 00042 00043 // ...add it to the transmit buffer 00044 txData[txDataCnt++] = pc.getc(); 00045 00046 // If the transmit buffer is full 00047 if ( txDataCnt >= sizeof( txData ) ) { 00048 00049 // Send the transmitbuffer via the nRF24L01+ 00050 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); 00051 00052 txDataCnt = 0; 00053 } 00054 00055 // Toggle LED1 (to help debug Host -> nRF24L01+ communication) 00056 myled1 = !myled1; 00057 } 00058 00059 // If we've received anything in the nRF24L01+... 00060 if ( my_nrf24l01p.readable() ) { 00061 00062 // ...read the data into the receive buffer 00063 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); 00064 00065 // Display the receive buffer contents via the host serial link 00066 for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { 00067 00068 pc.putc( rxData[i] ); 00069 } 00070 00071 // Toggle LED2 (to help debug nRF24L01+ -> Host communication) 00072 myled2 = !myled2; 00073 } 00074 } 00075 }
nRF24L01+ Signal Name | mbed pin |
---|---|
Vcc | VU* |
Gnd | Gnd |
MOSI | p5 |
MISO | p6 |
SCK | p7 |
CSN | p8 |
CE | p9 |
IRQ | p10 |
(* Note: the SparkFun board has an onboard voltage regulator, so the nRF24L01+ Module's Vcc must come from either the Vu pin if the mBed is powered from the USB bus, or from Vin if powered from an external power supply, which MUST NOT EXCEED 7V).
API¶
Import library
Public Member Functions |
|
nRF24L01P (PinName mosi, PinName miso, PinName sck, PinName csn, PinName ce, PinName irq=NC) | |
Constructor.
|
|
void | setRfFrequency (int frequency=DEFAULT_NRF24L01P_RF_FREQUENCY) |
Set the RF frequency.
|
|
int | getRfFrequency (void) |
Get the RF frequency.
|
|
void | setRfOutputPower (int power=DEFAULT_NRF24L01P_TX_PWR) |
Set the RF output power.
|
|
int | getRfOutputPower (void) |
Get the RF output power.
|
|
void | setAirDataRate (int rate=DEFAULT_NRF24L01P_DATARATE) |
Set the Air data rate.
|
|
int | getAirDataRate (void) |
Get the Air data rate.
|
|
void | setCrcWidth (int width=DEFAULT_NRF24L01P_CRC) |
Set the CRC width.
|
|
int | getCrcWidth (void) |
Get the CRC width.
|
|
void | setRxAddress (unsigned long long address=DEFAULT_NRF24L01P_ADDRESS, int width=DEFAULT_NRF24L01P_ADDRESS_WIDTH, int pipe=NRF24L01P_PIPE_P0) |
Set the Receive address.
|
|
void | setTxAddress (unsigned long long address=DEFAULT_NRF24L01P_ADDRESS, int width=DEFAULT_NRF24L01P_ADDRESS_WIDTH) |
Set the Transmit address.
|
|
unsigned long long | getRxAddress (int pipe=NRF24L01P_PIPE_P0) |
Get the Receive address.
|
|
unsigned long long | getTxAddress (void) |
Get the Transmit address.
|
|
void | setTransferSize (int size=DEFAULT_NRF24L01P_TRANSFER_SIZE, int pipe=NRF24L01P_PIPE_P0) |
Set the transfer size.
|
|
int | getTransferSize (int pipe=NRF24L01P_PIPE_P0) |
Get the transfer size.
|
|
bool | getRPD (void) |
Get the RPD (Received Power Detector) state.
|
|
void | setReceiveMode (void) |
Put the nRF24L01+ into Receive mode.
|
|
void | setTransmitMode (void) |
Put the nRF24L01+ into Transmit mode.
|
|
void | powerUp (void) |
Power up the nRF24L01+ into Standby mode.
|
|
void | powerDown (void) |
Power down the nRF24L01+ into Power Down mode.
|
|
void | enable (void) |
Enable the nRF24L01+ to Receive or Transmit (using the CE pin)
|
|
void | disable (void) |
Disable the nRF24L01+ to Receive or Transmit (using the CE pin)
|
|
int | write (int pipe, char *data, int count) |
Transmit data.
|
|
int | read (int pipe, char *data, int count) |
Receive data.
|
|
bool | readable (int pipe=NRF24L01P_PIPE_P0) |
Determine if there is data available to read.
|
|
void | disableAllRxPipes (void) |
Disable all receive pipes.
|
|
void | disableAutoAcknowledge (void) |
Disable AutoAcknowledge function.
|
|
void | enableAutoAcknowledge (int pipe=NRF24L01P_PIPE_P0) |
Enable AutoAcknowledge function.
|
|
void | disableAutoRetransmit (void) |
Disable AutoRetransmit function.
|
|
void | enableAutoRetransmit (int delay, int count) |
Enable AutoRetransmit function.
|
Library¶
Import librarynRF24L01P
Interface library for the nRF24L01+ chip (specifically the Transceiver nRF24L01+ Module with Chip Antenna from SparkFun, talking to their Nordic Serial Interface Board, but should work with any nRF24L01+).