In the past few weeks, I noticed that data transmitting from one of sensor nodes got dropped dramatically. This sensor node is an Arduino Micro using nRF24L01+ as the transmitter.

NRF20L01+

Well, it’s supposed to send data to the base station once every 30 seconds; however the transmitting recurrence time exceeded 2 minutes. By default the transmitting rate is at 1 Mb/s, so I dropped it to 250 Kb/s to see if had any better improvement. It didn’t help.

Fortunately, while searching for an unrelated topic, I landed on this page http://blog.surserv.at/nrf24l01_wireless_modules/ which talked about nrf24l01+ and some issues with the Arduino libraries I used.

If you have free time, go and read that post; however to jog my memory this is the changed I made in libraries/RF24/RF24.cpp:

333 void RF24::begin(void)
...
357   //write_register(SETUP_RETR,(B0100 << ARD) | (B1111 << ARC));
358   write_register(SETUP_RETR,(B0101 << ARD) | (B1111 << ARC));
...

509 void RF24::startWrite( const void* buf, uint8_t len )
...
513   // [2014-08-12:SS] http://blog.surserv.at/nrf24l01_wireless_modules/
514   //delayMicroseconds(150);
515   delayMicroseconds(500);
...

After the change to the library is made, I recompiled the Arduino sketch and uploaded to the mentioned sensor node. Now, the base station is able to receive data from that node every 30 seconds as expected. Yay!