Hello,
I would like to implement a big network of nRF24l01 talking to one base and I'm interrested in your experiences, feasibility of such project and possible critical limitations to take care of from the beginning.
The use case is to monitor general mood of up to 100 people audinece of a lecture/concert/whatever. I'd like to distribute 100 cheap modules with nRF24l01, some microcontroller (arduino pro mini or bare ATmegaxxxx) and a simple switch labeled "Agree - Disagree". Whenever any participant swithes eitherway, her module sends message to the base. The base tracks realtime mood statistics.
I have chosen the nRF24l01 for the price, the relative big community and because I don't know anything with better price/feature ratio ![]()
I've done some research on this forum and elswhere:
- There is probably brilliant RF24Network form maniacbug supporting up to 3,125 nRF24l01 nodes. But the tree network layout might be a good fit for a big house, but it is not for my use case GitHub - maniacbug/RF24Network: Network Layer for nRF24L01(+) Radios
- There is the nRF-IoT library. Seems like not many people used that. I might borrow some concepts from there, but the layout with relays is also not a perfect fit. Please review my RF24 IoT network - Networking, Protocols, and Devices - Arduino Forum
- There are many posts promoting the http://embeddedcoolness.com/, but I'd rather go with something more open source/DIY.
Anyway even with the sources above, there is vary little information about successfull projects getting even close to 100 nodes talking to one base. What are the limitations and problems I will probably face?
My idea is to have one nRF24l01 at each node and one nRF24l01 at the base. This means that the nRF24l01 native mechanism of pipes being unique between one transmitter and one receiver cannot be used (6 pipes maximum for the receiver, having 100/6=17 nRF24l01s at the base is ugly and would probably cause problems if put on one SPI together). Instead I plan a layout with one pipe address shared by all nodes to send information to the base. And 100 unique pipe addresses for each node to get "application level" ack from the base (instead of using the nRF24l01 auto ack features).
Overall the bandwith is not such an issue - each node only needs to transmit its id (to calculate the ack pipe address) and 1 bit of "mood information". But there will be collisions which have to be handled by the application level ack and retransmission. I imagine this as the base sending an ack message to the node on unique pipe address calculated form the node's id. If the node does not receive an ack within a few millis, it will try to retransmit the original message after small random delay.
Has anybody tried many nRF24l01s on one pipe? Can 100 nodes share one pipe address if I expect single units of change broadcasts per second, but sometimes massive peaks of tens of broadcasts in the same second, which would lead to many collissions and lost acks?
I am aware this is very open ended set of questions. I'm not seeking a definite answers, but I would appreciate any brainstorming level feedback.
I have no electronics education and I'm quite new to arduino. I'm aware that this is a big project and I should go slowly step by step. So far I have managed to have a bit faulty proof-of-concept with 2 nodes (Arduino Uno R3 and Arduino Nano) talking to one base (Raspberry Pi). Now I'm tweaking the ack-retransmit logic. But I'm always wondeing if a haven't missed something big, if I'm not gonig in a completly wrong direction or reinventing the wheel.
Any feedback will be appreciated. Thanks.