Nrf24l01+ pipe

Hello

I am now using nrf24l01 for wireless and know that the channel of it is what frequention it uses. But i dont know much about the pipes of it. I know there are 6 pipes. But is it 6 pipes per channel or 6 pipes for all channels? What does a pipe do? Do i need it?

Can anyone explain it for me?

Thanks

.

http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P

Its a starting point. Read the documentation.

Readed it. It says that i give each nrf24l01 module its own pipe addres and then can choose to which one i want to send? If yes: can i give them all the same adres so i sent to them all at the same time? Or will it not work?

Probably you should read the dokumentation/datasheet again. I've done it many times and still do not fully understand it.

There is one send queue and six receive queues (the restrictions on the addresses and usage in the documentation).

So one of the six addresses could be dedicated to broadcasts in each node (for sends without acknowledgement).

The addresses are less node adresses but more something like a communication slots. The term pipe is IMHO too "point to point".

Ok i understand you. But i dont realy understand why they cannot all have the same adress.

I want to sent the same message to more than 6 nrf24l01s at a time. How can i do that?

I did read a post where someone says:

RF24Network is pretty specialized and bare-bones. Any given node will only listen to 6 other nodes at once, taking advantage of the chip's built in pipes. If you weren't worried about collisions, you could have many nodes with the same node address. So the parent node would listen to all of those nodes thinking it was a single node.

So it i can listen to more than 6 nrfs.

Is s it true what he sayed

leds_are_cool: Any given node will only listen to 6 other nodes at once, taking advantage of the chip's built in pipes. If you weren't worried about collisions you could have many nodes with the same node address.

This is both plain wrong, because pipeaddresses are not nodeaddresses.

  1. You can listen to 6 channels at a time, there could be thousands of nodes sending/receiving on these.

  2. Collisions happen regardless of the pipeaddress used, its a shared medium and the WiFi band. If there are nodes using the same address, acknowledge can not be used, as it would force collisions.

leds_are_cool: I want to sent the same message to more than 6 nrf24l01s at a time. How can i do that?

Let all nodes you want to reach listen to one pipe with your broadcast address, disable autoacknowledge on this pipe. Let the broadcasting node switch off autoacknowledge while sending to that pipe, so it wont wait for an acknowlegde.

So you wont know whether somebody copied your message, but you could have thousands of listeners. If you programm the nodes to reply to such a broadcast, you have to ashure that they wont do that at the same time.

Hi

I'm also in the same situation, i simply have to send "hello" to 10 nodes in broadcast and i didn't found an example in the RF24 lib

So how about trying it?

The standard NRFlibrary (at least the ManicBug variant that I'm using) makes it hard to run the chip at all, if used unchanged.

  1. The chip is powered up and down all the time which costs 1.5 ms blindness (easy changed, just power it up and leave it there).

  2. Tx fifo-flush scattered throughout the code.

  3. No support for interrupts (which I regard as essential)

So I suggest reading the code of the library.

candelwick: Hi

I'm also in the same situation, i simply have to send "hello" to 10 nodes in broadcast and i didn't found an example in the RF24 lib

You can give them all the same addres and then send to that adres

Whandall: This is both plain wrong, because pipeaddresses are not nodeaddresses.

  1. You can listen to 6 channels at a time, there could be thousands of nodes sending/receiving on these.

  2. Collisions happen regardless of the pipeaddress used, its a shared medium and the WiFi band. If there are nodes using the same address, acknowledge can not be used, as it would force collisions.

Let all nodes you want to reach listen to one pipe with your broadcast address, disable autoacknowledge on this pipe. Let the broadcasting node switch off autoacknowledge while sending to that pipe, so it wont wait for an acknowlegde.

So you wont know whether somebody copied your message, but you could have thousands of listeners. If you programm the nodes to reply to such a broadcast, you have to ashure that they wont do that at the same time.

I can listen to 6 channels at a time!? I whas thinking i could only listen to 6 pipes at a time! Does this mean i can have more than 6 pipes? If that answer is yes: can i listen to more than 6 pipes at a time? And what is the difference between a node and a pipe?

So you wont know whether somebody copied your message, but you could have thousands of listeners. If you programm the nodes to reply to such a broadcast, you have to ashure that they wont do that at the same time.

Well they are gonna to send back so would nrf24network be a good option?

leds_are_cool: I can listen to 6 channels at a time!? I whas thinking i could only listen to 6 pipes at a time! Does this mean i can have more than 6 pipes? If that answer is yes: can i listen to more than 6 pipes at a time? And what is the difference between a node and a pipe? Well they are gonna to send back so would nrf24network be a good option?

  1. You can listen to 6 channels/pipes/addresses at a time, yes.

  2. As channels/pipes/addresses are in this contect synonyms, yes, see one.

  3. No, there are only 6 pipes builtin.

  4. No, there are only 6 pipes.

  5. What is the difference between a name and a man using that name?

  6. nrf24network, if it works for you, use it. For a simple data-exchange I prefer acknowledgments with payload. That way you can exchange 32 bytes per acknowledged transaction, including retries, all handled by the hardware. But this obviously can work only in a point to point communication.

And if I forgot to mention it:

there are only 6 pipes that can be active at the same time.

Ok understand it.

Now i want that the transmitter transmits to all receivers and the receivers transmits what it needs to transmit back. But if they do that at the same time the message is corrupt. How can i make it so they wont get corrupted? It are like 30 receivers and 1 transmitter.

You could embed information in the broadcast packet that spreads the client responses over time, so they wont collide.

You could wait a random time in the client before contacting the master, and let the chip handle possible collisions.

You could contact the master regulary with your data from the client, getting configuration/commands back from the master.

You could use all/some of the mechanisms.

You could invent a former unknown very clever mechanism. (not kidding)