1
\$\begingroup\$

I want to communicate with multiple Arduinos over RF. Price is important, and so is power use.

So I've ordered a couple of nRF24L01 modules which seemed up to the task. One thing I like is that they allow setting a channel (0-127). They also cost very little and use little current.

However as I will communicate with one master device (PC endpoint), I need to use a single channel for all those slaves (think in the dozens), which would mean I'd have to share bandwidth, which I'd rather not do.

My last resort is having a master transceiver for each individual slave.

Is there a better solution than that?

Update

Required bandwidths, single connection:

Client -> Master: 80kbit (single packet: 360 bytes)(could be without CRC and ACK)

Master -> Client: 5kbit~, very little (single packet: 20 bytes)(needs CRC and ACK)

There is no communication needed among clients.

I would like to stay off Wifi/Bluetooth, as they consume more current, are pricier and the range is shorter.

But I would like to keep master-client ratio as high as possible (1:5 at least). A Pi is a possible alternative if throughput is an issue only for master.

\$\endgroup\$
  • \$\begingroup\$ OK, you just changed the central aspect (arduino used to be master, now is PC)! That's not really cool, considering I've answered this for Arduino, but let's deal with that. \$\endgroup\$ – Marcus Müller Aug 4 '17 at 21:10
  • \$\begingroup\$ It'll probably end up being an Arduino hooked up to PC, but for sake of clarity I changed it. So I can hook up multiple Arduinos for supporting multiple channels, or perhaps use a Pi instead. \$\endgroup\$ – LongLog Aug 5 '17 at 9:00
3
\$\begingroup\$

Well, no, if you have a fixed RF channel width (which is the case here), than if you share that bandwidth, you share the bandwidth. So, no way around that.

Since the IC can't send on multiple channels simultaneously, you'd need to increase the number of ICs to send on multiple channels.

Anyway, your consideration is off-point. You're controlling the nRF24 with an Arduino. You simply won't be able to do offer more than the 2Mb/s that the nRF24 can deal with! Let alone process received data, unless you're really doing impressive things with your Arduino – like throwing out everything that makes Arduino, and low-level DMA'ing data at high rates to the SPI peripheral.

Update: You changed the master node to a PC. Well, it doesn't change the fact that per channel, you only get one channel worth of bandwidth. So if you don't want to share bandwidth, see my first two paragraphs, and by more transceivers to attach to your PC. Or, of course, buy something that was meant to do high-rate networking, like WiFi.

| improve this answer | |
\$\endgroup\$
  • 3
    \$\begingroup\$ The problem here is that the Arduino software is not optimized. Any interface using SPI for data transfers will be inherently slow. You are probably limited to about 500kbps at best without tinkering with the low level libraries. The burst data rate for the 24L01+ can be 2 Mbps, but overall your throughput will be much less. Look up any of the performance specs for Arduino Ethernet shields (SPI interface) and you'll see the problems you face. Adding multiple Host side transceivers won't help at all. The maximum SPI clock rate is 8 MHz (with a 16 MHz osc),see: SPISetClockDivider. \$\endgroup\$ – Jack Creasey Aug 4 '17 at 18:02
  • \$\begingroup\$ I am now considering sharing some of the bandwidth. Having a couple of master nodes, but still less than the slaves. I'm hoping I'll get close to the 2Mbit per master. But thanks for the headsup, I might have to squeeze bits then. \$\endgroup\$ – LongLog Aug 5 '17 at 8:51
  • \$\begingroup\$ Also, with multiple hosts I meant different channels too. \$\endgroup\$ – LongLog Aug 5 '17 at 8:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.