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.
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!