For a long time I’ve had the plan to make all my projects wirelessly controllable, but I never really found a cheap, reliable module. I experimented with simple 433Mhz RF modules, zigbee modules, and wifi modules before I found the 2.4GHz NRF module I ended up using.
With the simple RF modules the arduino had to do the encoding and such itself, this didn’t work really well for me and meant less processing power for other stuff. The zigbee modules were all quite expensive, but did work well. Wifi became pretty interesting when the ESP modules started coming up, but having 20 wifi devices on my router might become somewhat impractical, and I didn’t feel like I needed all the TCP handshakes and such.
The 2.4Ghz (NRF24l01+) modules were really cheap, and worked straight out of the box with a pretty clear library. The downside to these were that the library I picked used the hardware SPI pins, which I also used in the shiftPWM library to control a bunch of LEDs in the first project I wanted to make wireless. At the time I didn’t really get all the C++ stuff in the library, so I didn’t think of touching the library itself. It was a few months later when I had an actual C++ course at my study and tried to implement software SPI instead. This did take quite some time to get right, apparently the atmega locks the use of the hardware SPI pins once you have initialized the SPI mode. Once I got this sorted out and the software SPI worked the modules became pretty flexible to use. I made the room lighting I had at the time wireless with these modules, but it always turned into a big wirey mess. To solve this, and make it really easy to add new devices, I started designing PCBs for the module.