RF24

OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices (by nRF24)

RF24 Alternatives

Similar projects and alternatives to RF24

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a better RF24 alternative or higher similarity.

Suggest an alternative to RF24

Reviews and mentions

Posts with mentions or reviews of RF24. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2021-11-08.
  • I found an easy way to test 2.4GHz downconverters for RTL SDR using a nRF24L01 module
    2 projects | reddit.com/r/RTLSDR | 8 Nov 2021
    But I didn't know if it worked. I saw a lot of different random signals, but I had no way to know if it was just amplified noise, nor I had a way to know if the downconverter frequency was exactly 2.4GHz, or something else. I have a few cheap nRF24L01 modules around, and plenty of 3.3V Arduino boards, so after a quick read on the nRF24 library (https://github.com/nRF24/RF24), I had a super simple generator running using the carrier wave function of the nRF24.
  • Drone remote!?
    1 project | reddit.com/r/SteamDeck | 23 Oct 2021
    Heres a linux driver for a radio transmitter connected via sth. like a littlewire board, https://github.com/nRF24/RF24
  • RF24 ack payload
    1 project | reddit.com/r/arduino | 18 Sep 2021
    I'm trying to get acknowledgement payloads to work with an esp32 as the sender and an uno as the receiver. The code below works as a single way transmission, but uncommenting the commented code does not work. The example code works as intended but stops working when I try to modify the structs that contain the data, and I don't know why. How can I make my own code work?
  • Wemos D1 R2 + nRF24l01
    1 project | reddit.com/r/arduino | 12 Jul 2021
    From the beginning: -I have clone of arduino WEMOS D1 R2. -library i used https://github.com/nRF24/RF24 (the same as on te web from You) -Code for arduino (the same as on te web from You) To make it more interesting, exactly the same configuration (library, code) works on arduino nano (clone from aliexpress), it transmits and receives data.
  • Wireless Communication Between 2 Picos
    3 projects | reddit.com/r/raspberrypipico | 8 Apr 2021
    I'm using C right now with https://nrf24.github.io/RF24/
  • Float values giving overflow
    3 projects | reddit.com/r/arduino | 4 Apr 2021
    #include //library for transceiver (nrf24l01+ PA+LNA) https://github.com/nRF24/RF24 #include #include #include //library for multiplexer (74HC4067DB) https://github.com/stechio/arduino-ad-mux-lib using namespace admux; #include //library for display (SSD1306 128x64) https://github.com/adafruit/Adafruit_SSD1306 #include //library for I2C const int sig = A3; //signal pin const int s0 = 2; //address pin 0 const int s1 = 3; //address pin 1 const int s2 = 4; //address pin 2 const int s3 = 5; //address pin 3 const int up1pin = 1; //foward left motor const int down1pin = 0; //backwards left motor const int up2pin = 3; //foward right motor const int down2pin = 2; //backwards right motor const int modifierpin = 4; //pwm speed modifier const int trimmerpin = 5; //pwm trimmer const int navlightpin = 6; //navigation lights const int intlightpin = 7; //interior lights const int extlightpin = 8; //exterior lights const int camerapin = 9; //fpv camera const int autoModepin = 10; //autonomous mode const int CE = 9; //radio CE pin const int CSN = 10; //radio CSN pin const byte address[5] = "00001"; //pipe address float latFromSerial; //parsed lattitude from serial input float lonFromSerial; //parsed longitude from serial input float batteryVoltage; //calculated battery voltage float batteryPercentage; //estimated battery charge int timer; //millis timer const int waypointSize = 50; //number of waypoints const PROGMEM float waypoint[waypointSize][2] = { //waypoints for autoMode() {51.966571, 6.2743379}, {51.966772, 6.2744777}, {51.96699149689901, 6.274366197893084}, {51.9671527562416, 6.274120865412113}, {51.96729645199409, 6.273423270736089}, {51.96743080331666, 6.272665240634041}, {51.96754042621848, 6.271857581899409}, {51.96776236209548, 6.270915330645548}, {51.96798193464908, 6.270221004668555}, {51.96828516667115, 6.269413032485236}, {51.96872940066316, 6.268397202672209}, {51.9690764880844, 6.267825125563484}, {51.96951599079974, 6.267264642338533}, {51.97011340024988, 6.266554277598022}, {51.97066084143675, 6.265542763068586}, {51.97101162702417, 6.264465224751552}, {51.97133799766154, 6.263262306712254}, {51.97164036068298, 6.262353231049387}, {51.97207885573615, 6.261205467922246}, {51.97247264722145, 6.260387048788263}, {51.9730446081463, 6.259285804638093}, {51.97348333946684, 6.258252773125921}, {51.97383500264349, 6.257083089055559}, {51.97411491189212, 6.255751674816601}, {51.97421125024911, 6.254641997085617}, {51.97428144275973, 6.253337927743205}, {51.97438642575778, 6.252258957953291}, {51.97461230120062, 6.251185555711}, {51.97496391672023, 6.250073663806153}, {51.97535356652884, 6.249136612734796}, {51.97593199219659, 6.247849009012851}, {51.97673996614692, 6.246219928264511}, {51.97759975319016, 6.244774079377116}, {51.97970812227523, 6.24269840869726}, {51.98056951741261, 6.241148196857345}, {51.98138148466968, 6.238582344717527}, {51.98226488661611, 6.236909516229776}, {51.9828880442564, 6.236150123494202}, {51.98356664827293, 6.235581737840659}, {51.9846292540927, 6.235086763643169}, {51.98620084359441, 6.234541602496764}, {51.9869680375904, 6.233970146843246}, {51.9884155464398, 6.232522126238424}, {51.98950934373955, 6.231079775783453}, {51.99067711020479, 6.229346290429132}, {51.99142243067518, 6.228071305330573}, {51.99218280844037, 6.226417272538562}, {51.99276345055314, 6.224660968088269}, {51.9928317367713, 6.22340383146351}, {51.99303408040588, 6.222658471539628}, }; int waypointCounter = 0; struct values{ //structure for control values bool up1; bool down1; bool up2; bool down2; int trimmer; int modifier; bool navlight; bool intlight; bool extlight; bool camera; bool autoMode; float targetLat; float targetLon; }; struct info{ //structure for answer from boat int autoMode; int battery; int boatHeading; float boatSpeed; int targetDistance; int targetHeading; }; struct values control; //control values struct info answer; //answer from boat Mux mux(Pinset(s0, s1, s2, s3)); //multiplexer object Adafruit_SSD1306 display(128, 64, &Wire, -1); //display object RF24 radio(CE, CSN); //wireless object void setup() { radio.begin(); //start radio service as transmitter radio.setPALevel(RF24_PA_MIN); //transmission power radio.setDataRate(RF24_250KBPS); //data rate radio.enableAckPayload(); //enable ack payloads radio.setRetries(5,5); //delay, count radio.openWritingPipe(address); //set pipe address radio.stopListening(); //stop listening Serial.setTimeout(10); //set timeout for waiting for incoming data Serial.begin(115200); //set serial baudrate if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } delay(2000); //allow startup of display display.clearDisplay(); //clear the display display.setTextSize(1); //standard 1:1 pixel scale display.setTextColor(WHITE); //set white text display.cp437(true); //use full 256 char 'Code Page 437' font control.targetLat = 51.966451; //default target lattitude control.targetLon = 6.274279; //default target longitude } void loop() { if(millis() - timer >= 100){ //activate every 100 milliseconds timer = millis(); //new timestamp mux.signalPin(sig, INPUT_PULLUP, PinType::Digital); //read all digital switches control.up1 = !mux.read(up1pin); control.down1 = !mux.read(down1pin); control.up2 = !mux.read(up2pin); control.down2 = !mux.read(down2pin); control.navlight = !mux.read(navlightpin); control.intlight = !mux.read(intlightpin); control.extlight = !mux.read(extlightpin); control.camera = !mux.read(camerapin); control.autoMode = !mux.read(autoModepin); mux.signalPin(sig, INPUT, PinType::Analog); //read the analog potentiometers control.modifier = mux.read(modifierpin); control.trimmer = mux.read(trimmerpin); /* if(Serial.available()){ //get target location from serial input latFromSerial = Serial.parseFloat(); //read lattitude lonFromSerial = Serial.parseFloat(); //read longitude if(latFromSerial != 0) //only non zero values control.targetLat = latFromSerial; if(lonFromSerial != 0) //only non zero values control.targetLon = lonFromSerial; } */ control.targetLat = waypoint[waypointCounter][0]; //set target waypoint lattitude control.targetLon = waypoint[waypointCounter][1]; //set target waypoint longitude if(answer.autoMode == 1 && waypointCounter < waypointSize-1) //set next waypoint waypointCounter++; if(control.autoMode && control.camera) //if autoMode is activated use trim potmeter and camera button to override waypoint selection waypointCounter = map(control.trimmer, 0, 1023, 0, waypointSize-1); if(radio.write(&control, sizeof(control))){ //send control values Serial.println(F("Data sent successfully")); if(radio.isAckPayloadAvailable()){ //do we get an answer back? radio.read(&answer, sizeof(answer)); //read answer batteryVoltage = (batteryVoltage+(answer.battery*15.0/1023.0))/2.0; //calculate battery voltage (measured as 1/3th with voltage divider) batteryPercentage = (batteryVoltage-11.5)/(13.0-11.5)*100; //estimate battery charge remaining answerToDisplay(); //put all info on oled display } else{ Serial.println(F("Message received but no answer...")); display.clearDisplay(); //display message for no answer from boat display.setCursor(0, 1); display.print("RC Boat: no answer"); display.display(); } Serial.print((control.targetLat)); Serial.print((" ")); Serial.println((control.targetLon)); } else{ Serial.println(F("Data sending failed")); //display message for no connection to boat display.clearDisplay(); display.setCursor(0, 1); display.print("RC Boat: no contact"); display.display(); } } } void answerToDisplay(){ //function for putting answer from boat on display display.clearDisplay(); display.setCursor(0, 1); display.print("RC Boat: connected!"); display.setCursor(0, 15); display.print("Battery: "); display.print(batteryPercentage, 0); display.print("% "); display.print(batteryVoltage, 1); display.print("V"); display.setCursor(0, 29); display.print("Course: "); display.print(answer.boatHeading); display.print((char)248); display.print(" "); display.print(answer.boatSpeed, 1); display.print("km/h"); display.setCursor(0, 43); display.print("AutoMode: "); if(control.autoMode == 1) display.print(answer.autoMode); else display.print("off"); display.print(" "); display.print(waypointCounter); display.setCursor(0, 57); display.print("Target: "); display.print(answer.targetDistance); display.print("m "); if(answer.targetHeading >= 0) display.print("+"); display.print(answer.targetHeading); display.print((char)248); display.display(); }
  • Help! Need tester for nRF24L01 on a teensy
    1 project | reddit.com/r/Teensy | 28 Mar 2021
    I'm working on this feature to use a secondary SPI bus by overloading RF24::begin()... Its ready for testing, but I don't own a Teensy board (need testers). The overload-begin branch has the changes. I've also added example source code specific for the Teensy board (unsure about the Teensy4.0).
  • Designed a Raspberry Pi Zero 2.4 ghz RF Transceiver hat. Using it as a gateway for low power outdoor sensors. This is the first prototype, I've since made an improved circuit but still works!
    1 project | reddit.com/r/RASPBERRY_PI_PROJECTS | 19 Mar 2021
  • What is the best library for NRF24l01
    1 project | reddit.com/r/arduino | 19 Feb 2021
  • I'm trying to use the nRF24l01 module... Need help please.
    1 project | reddit.com/r/arduino | 17 Jan 2021
    One thing that I found semi-helpful was the "printDetails()" or "prettyPrintDetails()" function. The way you call these functions is a little odd (see example at https://github.com/nRF24/RF24/blob/master/RF24.h ), but this might help you see whether your chips are even kicking.
  • Having trouble with getting my nRF24L01 working, not sure what to try next
    1 project | reddit.com/r/arduino | 17 Jan 2021
  • Nrf24l01 Communication Has Stopped Working
    1 project | reddit.com/r/arduino | 4 Jan 2021
    Beware of 3rd-party tutorials. The doc's main page isn't really supposed to be a change log (using doxygen sucks). I don't control the releases' description, but it's difficult to summarize all the changes I submitted for v1.3.11
  • Learning To Program My Epaper Display
    2 projects | reddit.com/r/raspberry_pi | 29 Dec 2020
    I see a few people discussing the same issue on the pi4, if that's not helpful I can look a little deeper after I run to the store.

Stats

Basic RF24 repo stats
13
1,832
7.4
about 22 hours ago

nRF24/RF24 is an open source project licensed under GNU General Public License v3.0 only which is an OSI approved license.

Less time debugging, more time building
Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.
scoutapm.com
Find remote jobs at our new job board 99remotejobs.com. There are 30 new remote jobs listed recently.
Are you hiring? Post a new remote job listing for free.