RF24Network for Wireless Sensor Networking

17-Node Party

RF24Network is a network layer for Nordic nRF24L01+ radios running on Arduino-compatible hardware. It’s goal is to have an alternative to Xbee radios for communication between Arduino units. It provides a host address space and message routing for up to 6,000 nodes. The layer forms the background of a capable and scalable Wireless Sensor Network system. At the same time, it makes communication between even two nodes very simple.

Today, I managed to get 17 nodes running on a single network. Now I need to build some more nodes, because the system worked great with 17, and could likely handle thousands of nodes.


Hardware

The fastest way to get RF24Network-compatible hardware is to build the Getting Started board, or the ProtoShield board as explained in other posts, attached to commercially-available Arduino. These are used for nodes 03 and 043 in the picture above.

Ultimately, I wanted something smaller, cheaper and more power-efficient, so I built a Low Power Wireless Sensor Node. That blog post covers the V3 version of that unit, which is used by nodes 04, 011, and 021. Nodes 01 and 02 use an earlier revision, and the rest use a later version. Building them, I was surprised how almost all of them were built slightly differently. It took a ton of experimentation to figure out physically how best to package these. In the end, Node 031 is the winner, so for the upcoming V5 iteration, I’ll build 10 nodes using the PCB-mounted 2AA battery holder.

Simple Transmit/Receive

The Hello World examples illustrate how simple it is to communicate between two nodes. The receive example goes on one node, and the transmit example on the other.

There are three simple sections:

Static Initialization

First, the static setup to prepare the radio, and set the addresses. In this case, we consider ourself “Node #1″, and will communicate with “Node #0″. Of course, it’s important to get the pins right. To use the boards from the Getting Started example, you’d use pins 9 & 10.

// nRF24L01(+) radio attached using Getting Started board
RF24 radio(9,10);
 
// Network uses that radio
RF24Network network(radio);
 
// Address of our node
const uint16_t this_node = 1;
 
// Address of the other node
const uint16_t other_node = 0;
 
// How often to send 'hello world to the other unit
const unsigned long interval = 2000; //ms
 
// When did we last send?
unsigned long last_sent;
 
// How many have we sent already
unsigned long packets_sent;
 
// Structure of our payload
struct payload_t
{
  unsigned long ms;
  unsigned long counter;
};

setup()

Second, the ‘setup()’ simply prints out a quick salutation, and initializes the radio layers.

void setup(void)
{
  Serial.begin(57600);
  Serial.println("RF24Network/examples/helloworld_tx/");
 
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

Transmitter loop()

Finally, the ‘loop()’ regularly sends a message to the other unit. Note that RF24Network requires a regular call to “update()” to process packets from the radio. It’s best to avoid calling delay() anywhere in a sketch that uses this system.

void loop(void)
{
  // Pump the network regularly
  network.update();
 
  // If it's time to send a message, send it!
  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    last_sent = now;
 
    Serial.print("Sending...");
    payload_t payload = { millis(), packets_sent++ };
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,&payload,sizeof(payload));
    if (ok)
      Serial.println("ok.");
    else
      Serial.println("failed.");
  }
}

Receiver loop()

Also, we can look at the receiver example, which is equivalent to the transmitter sketch, with the difference of the loop(). It keeps a look out for packets, pulls them off the radio, and prints them to the console.

void loop(void)
{
  // Pump the network regularly
  network.update();
 
  // Is there anything ready for us?
  while ( network.available() )
  {
    // If so, grab it and print it out
    RF24NetworkHeader header;
    payload_t payload;
    network.read(header,&payload,sizeof(payload));
    Serial.print("Received packet #");
    Serial.print(payload.counter);
    Serial.print(" at ");
    Serial.println(payload.ms);
  }
}

Addressing in Detail

RF24Network Addressing

RF24Network works great with a few nodes, but it was designed for a house-full of nodes. Nodes are automatically configured in a tree topology, according to their node address. Nodes can only directly communicate with their parent and their children. The network will automatically send messages to the right place.

Node 00 is the ‘base’ node. Nodes 01-05 directly communicate with Node 00, but not with each other. So for Node 01 to send a message to Node 02, it will travel through Node 00. Nodes 011, 021, 031 and so on are children of Node 01. So for Node 011 to send to 02, it will send to 01, then to 00, then to 02. Therefore, if you put a Node 011 on your network, be sure that there is a Node 01 on the network, and it’s powered up, and it’s in range!

Wireless Sensor Node With Power

In practice, I’ve gotten in the habit of designating a ‘router’ node numbered 01-05 on each floor, using a high-power antenna, and connected to wall power. Then all the nodes on that floor communicate with the ‘floor parent’. The picture above is a standard V3 node with a special ‘power pack’ added on to let it plug into the wall, and a radio unit with an amplified antenna.

Building a Wireless Sensor Network

The ‘sensornet’ example is the place to start from when building out a network of sensors. This example demonstrates how to send a pair of sensor readings back to the base from any number of nodes. The readings are a temperature sensor connected to Analog input 2, and a voltage sensor connected to Analog input 3. Every node will send a ping to the base every 4 seconds, which is a good interval for testing, while in practice you’ll want a much longer interval. Leaf nodes will sleep in between transmissions to conserve battery life.

The base simply dumps the ping to the console, and tracks the packet loss. This way we can monitor the health of the network while testing it. In a real application, you’d want to store or transmit those values somewhere, for example up to Pachube.

Payload Details

RF24Network sends two pieces of information out on the wire in each frame, a header and a message. The header is defined by the library, and used to route frames to the correct place, and provide standard information. This is defined in RF24Network.h.

/**
* Header which is sent with each message
*
* The frame put over the air consists of this header and a message
*/
struct RF24NetworkHeader
{
  uint16_t from_node; /**< Logical address where the message was generated */
  uint16_t to_node; /**< Logical address where the message is going */
  uint16_t id; /**< Sequential message ID, incremented every message */
  unsigned char type; /**< Type of the packet.  0-127 are user-defined types, 128-255 are reserved for system */
  unsigned char reserved; /**< Reserved for future use */
 
...

The message is application-defined, and the header keeps track of the TYPE of message using a single character. So your application can have different types of messages to transmit different kinds of information. For the sensornet example, we’ll use only a type ‘S’ message, meaning “Sensor Data”.

This message is defined in the example, in S_message.h:

/**
* Sensor message (type 'S')
*/
 
struct S_message
{
  uint16_t temp_reading;
  uint16_t voltage_reading;
  S_message(void): temp_reading(0), voltage_reading(0), counter(next_counter++) {}
  char* toString(void);
};

This simply contains a temperature and voltage reading. These values are 8.8-bit “fixed point” values, which is to say that the high byte is the decimal part and the low byte is the fractional part. For example, 3.5V is represented as 0×380. Also included is a method to convert it to a string for easy printing.

Voltage Sensor

I like to monitor the battery level of each node, so I can see when it’s time to track one down and replace its batteries. To do so, I connect the VIN from my power source, to the ‘voltage sensor’ input, via a voltage divider:

Battery Voltage Measurement.sch

I use a 1M/470k divider circuit, which will reduce 3.44V down to 1.1V, and then use the 1.1V internal voltage reference. This is perfect for my uses because I don’t use voltages over 3.44V. Of course, if you do, you’ll want a larger divider. In my case, when analogRead(A3) returns 1024, I have 3.44V. In the sensornet example it works like this:

// What voltage is a reading of 1023?
const unsigned voltage_reference = 5 * 256; // 5.0V
// How many measurements to take.  64*1024 = 65536, so 64 is the max we can fit in a uint16_t.
const int num_measurements = 64;
...
    // Take the voltage reading
    i = num_measurements;
    reading = 0;
    while(i--)
      reading += analogRead(voltage_pin);
 
    // Convert the voltage reading to volts*256
    message.voltage_reading = ( reading * voltage_reference ) >> 16;

First, I take 64 readings, to get a good sample size. The other advantage to 64 readings is that it uses the full 16-bits of a uint16_t, so a value of 0×8000 is half of the max 1.1V. Next, I multiply it by the voltage reference. That reference considers the voltage divider I have in place, telling me what voltage I ‘really‘ have on the battery if I get an 0xFFFF reading. In the case of the example, it’s 0×500, or 5V. Finally, I shift it down so the decimal point is in the correct place for an 8.8 fixed point value.

Temperature Sensor

The sensornet example uses the MCP9700 temperature sensor, which is my sensor of choice. You could change it to anything you like, just be sure to modify the calculations accordingly. The way the MCP9700 works is it emits 0.5V at 0 Celsius and increases 0.01V every 1 Celsius above that. Perfect for the 1.1V internal analog reference. Here’s how its used in the example:

    // Take the temp reading
    i = num_measurements;
    uint32_t reading = 0;
    while(i--)
      reading += analogRead(temp_pin);
 
    // Convert the voltage reading to celsius*256
    // This is the formula for MCP9700.
    // V = reading * 1.1
    // C = ( V - 1/2 ) * 100
     message.temp_reading = ( ( ( reading * 0x120 ) - 0x800000 ) * 0x64 ) >> 16;

Same as above, I first take 64 samples to get a reading in the range of 0×0000-0xFFFF. Then convert it using these steps:

  • Multiply by 0×120, which is 1.1 in 8.8-fixed point. This converts the reading into volts, and increases the decimal place by 8 bits.
  • Subtract 0×800000, which is 0.5, because the decimal point is way out at 24 bits.
  • Multiply by 0×64 which is 100
  • Shift right 16, which reduces the decimal point from 24 bits to 8 bits which is where we need it.

All of this is done in a 32-bit integer so there are plenty of bits to do this calculation.

Deploying

Put the sketch on every node. Start it first while connected to the serial port, so you can give it an address:

RF24network/examples/sensornet/
PLATFORM: Getting Started Board
VERSION: 013b4d3
*** No valid address found. Send node address via serial of the form 011<cr>

Once you get a bunch of them going, you’ll see the whole spew:

1733003: APP Received #16 24.23C / 3.21V from 053
1733709: APP Received #37 23.82C / 2.70V from 043
1734297: APP Received #109 24.46C / 3.06V from 013
1735108: APP Received #55 25.16C / 3.06V from 033
1735224: APP Received #134 22.66C / 2.71V from 031
1735286: APP Received #287 25.10C / 3.24V from 01
1735565: APP Received #299 24.79C / 3.36V from 03
1736871: APP Received #71 25.78C / 3.07V from 023
1737094: APP Received #137 22.89C / 3.01V from 041
1737119: APP Received #120 23.69C / 2.98V from 011
1737247: APP Received #17 24.23C / 3.21V from 053
1738025: APP Received #38 23.82C / 2.70V from 043
1738361: APP Received #110 24.45C / 3.06V from 013
1739286: APP Received #288 25.11C / 3.24V from 01
1739404: APP Received #56 25.16C / 3.06V from 033
1739565: APP Received #300 24.78C / 3.36V from 03
1739574: APP Received #135 22.68C / 2.71V from 031
1741043: APP Received #72 25.77C / 3.07V from 023
1741213: APP Received #138 22.87C / 3.01V from 041
1741490: APP Received #121 23.68C / 2.98V from 011
1741492: APP Received #18 24.21C / 3.21V from 053

Setting the sleep interval

Once it’s up and running, you can change the sleep interval to something more rational. For production networks, I shoot for one reading from each node every minute, which is probably overkill but it gives me some flexibility because sometimes nodes have trouble reaching the base for several minutes at a time. These are the values to adjust:

// Sleep constants.  In this example, the watchdog timer wakes up
// every 4s, and every single wakeup we power up the radio and send
// a reading.  In real use, these numbers which be much higher.
// Try wdt_8s and 7 cycles for one reading per minute.> 1
const wdt_prescalar_e wdt_prescalar = wdt_4s;
const int sleep_cycles_per_transmission = 1;

Next Steps

The sensornet example can get a large number of sensor nodes up and running. But then what do you do with the data? Probably, you want to transmit or store them somewhere. That will be the topic of a future post.

  • Posting to Pachube‘. Combined with NanodeUIP, we can post sensor readings to Pachube from all thousand-some nodes connected. (Or at least 17 for starters :) )
  • PC application to monitor the network‘. The serial port is quite a cacophony of node information. I am also working on a C# WPF application to give an overall view of how the network is doing. It’s quite nice, so when it’s done I’ll put that up too.
  • My Personal Pachube Lite‘. Pachube is awesome, but there are times I may want to just capture the readings on my own database. It will do less than Pachube, but I can do whatever I want with the data. I’ve written my own solution using PHP and MySQL, but it’s not exactly easy for someone else to replicate. My latest idea is to build a server using Ruby on Rails which looks ideally suited for the purpose.
About these ads

49 Comments

Filed under Arduino, RF Radio

49 Responses to RF24Network for Wireless Sensor Networking

  1. Gary

    Hi

    Excellent article, just wondered if you had considered using SQLite, for your database as its easy to setup, does not need a server, is fast and compact and easily transportable. I am currently using it to back up my data when using RF24. http://www.sqlite.org/

    Also I use this database freeware viewer to set up and monitor the database http://www.sqliteexpert.com/

    Regards

    Gary

    • Thanks! Yeah, sqlite is interesting if you’re storing data from an app running on a PC and the base node is connected by serial. My personal preferred approach is to connect the base node directly to Ethernet, and then store them on a server using MySQL. But sqlite would work just as well for personal use, especially as Rails comes with it by default.

  2. kurtnelle

    Awesome dude. When farmers have large fields and they want to monitor it I can use this system can’t they. I’m sure if we use motion sensors it will make a very nice farm alarm system (against raiders and stray animals)

  3. kurtnelle

    This would make an awesome field alarm system so that farmers can monitor their crops and produce. Awesome work dude.

    • Thanks! Yes, this should work great for farmers. They would need to have an enclosed node, though :) By my calculations, 2 AA batteries can last for well over a year.

  4. Fcaeiro

    Great maniacbug …
    My network is now with 11 devices 6 in beta stage working perfect still some boxes missing…
    The others are in alpha mode still testing some stuff I’m using the dth11 humidity and temp sensor .. For the battery voltage I’m using the internal atmega trick not so accurate but enough to understand when mine 18650 batts are running down.
    Still have a issue with the main sensor 00 being directly connected to internet by the ether shield. When I got some time out updating the pachube I miss some readings …
    Solution create a pc app that gets all the data locally and update pachube ( almost done)
    Once again thanks a million for your work with rf24 lib.
    I have to check your enhancements and reflash all my noses, still using arduino IDE 22
    Regards

  5. Grag38

    Nice job ManiacBug, I follow all of your works from the Arduino forum and I love these nrf24 modules. So from can you give us the schema of the V3 ‘power pack’.

    I plan to use 10 of these modules to drive a tally wireless camera system. I need to send informations up to 80 meters in ‘real time’ (from few ms up to 500ms, not more).

    I plan to use high power antenna modules with battery pack with arduino nano v3 board.

    Thanks if you can give us some advices and power schema

    Best Regards Grag38

  6. First off, thank you for these great tutorials, ManiacBug! It truly gives novices like myself a jump start with Arduino and the nRF24L01 modules. Are there plans on porting this library over to IDE 1.0.1 in the future?

    • Thanks! Does it not work with the IDE 1.0.1??

      • It does for me just fine, I used the lib this morning in IDE 1.0.1.

      • Oeloe

        RX, TX example works under 1.0.1, Sensornet does not. (or I am missing something) Can it have something to do with the jamfiles? What is their purpose? I only have the bare Arduino IDE, do I need something else. (errors seem to be abouth the EEPROM part)

        Thank you for all the great work you have done on this library. Now posting on COSM from 3 nodes, more to come….

      • Yes, the sensornet doesn’t compile under all versions of the avr tools. I do need to fix that. The jamfiles can be safely ignored.

  7. Wes

    I am only just starting off in the land of Adruino, but it is exactly for this type of project I have got involved. I am disabled and have been installing an irrigation system in garden and greenhouse that I want to be able to control via RF when I am too poorly to go out to look after the plants myself, fingers crossed I don’t struggle too much following what you have explained !

    Hope it does work with 1.0.1 !
    Thanks a lot for a massive help with what I need to do !!!

  8. mdellen

    Great work on this, I am loving it !
    Hello world works right away, but I am not getting the sensornet example to work.

    The sensornet example gives a lot of compile errors in IDE1.0.1, am I missing something ?

    eeprom_update_block whas not declared in this scope (in nodeconfig.cpp)
    S_message has not been declared (in S_message.cpp)
    temp_reading was not declared in this scope (in S_message.cpp)
    voltage_reading was not declared in this scope (in S_message.cpp)
    ………..

    Hope I will figure it out soon, or that someone can point me in the right direction.
    Parts for 10 dedicated nodes are starting to get in, build 3 testnodes using Aruino Nano V3. (no soldering) :)

    Keep up the great work !

  9. smitjjohan

    Hi there,

    How did you manage to get the ENC28J60 module and the NRF24L01+ module to work together? Did you have do do any SPI specifics? It also seems that the MOSI and MISO pins required in the specific libaries are different and not consistant. For example. the NRF24L01

  10. Hi!
    I have a question about sending strings with your RF24 (network) library. I managed to successfully transmit integers, but I have some problems with strings. At the moment, my structure looks like this:

    struct Sensor_message
    {
    char* sensor;
    int temp_reading;
    };

    I can read the integer value on the receiving side, but “sensor” field is blank.

    Thank you for all of your work and great articles.

  11. This is great inspiration – I’m looking very much forward to getting the time on my hands to do a set-up myself! Internet of things is really only feasible for us lower-income house-holds if it doesn’t involve xbee or wi-fi :-) Great stuff, well done!

  12. Johann

    Hi Maniac

    Im trying to load the sensornet code but get eeprom block not declared error any idea?

  13. saleve

    This is excellent stuff – congratulations! Any chance that you’d be prepared to share schematics and Gerbers for your V3 node boards? Thanks.

  14. Hi – right – ignore previous message about meshping – all working – I wonder if you could clarify a few points.. am I right in saying the largest single message the chip can handle is 32 bytes…. and if so how many are left once your header is used? ie what is the maximum length the message could be? Also may I suggest making a public override for the data rate – 250KB increases the range and it would save people poking your source code as I’ve done to slow it down. Finally – at a guess… things like the Dallas chips have delays in them, do you know the maximum time (at 250k for example) that you could leave in between calls to pump the radio network without losing anything?

  15. Nick H

    I’m excited to have found your site. You have provided a wealth of knowledge and I’m very grateful for it. Also, I am really interested in starting a project that will utilize these sensor nodes. I was curious if you had the parts list and PCB schematics for your v5 node put together yet?

    • Hi, I haven’t posted V5 yet. (I’m up to V6, and it’s pretty sweet). But really it’s just incremental refinements. I recommend to start with what I have already posted, and then you can tweak it to meet your own unique requirements as you go along. Good luck!

      • Nick H

        Thanks for the reply. I’ve been busy the last few weeks learning how to build my own boards in Eagle. I’ve actually submitted my first design to Iteadstudio. Hopefully I will get them in here in the next week or so. I’ve been working controlling an electromagnetic strike plate to open my front door. I’ll put together a write up once I’ve got it completed and send it your way.

        Thanks again for all your hard work on these libraries.

        Nick

  16. Simon

    Hi,
    I’ve another question: How send a string with your class. Using this “network.write(header,&message,sizeof(unsigned long));” I can send only numbers, right? Taken from meshping example.

    Simon

    • You wouldn’t send a string, per se, you’d send an array of characters. So instead of a ‘float’, you’d send a char[18], for example. Then you’d need to copy the string into that, and extract it on the other end. This would be a good time to move over to char arrays instead of strings in your designs. Using the string class on such a memory-constrained environment as Arduino is the path to running out of memory (and getting random crashes).

      • Simon

        Hello!
        As you suggested I’ve moved to a char array. Until here ok, I can send and receive messaged between nodes. A char array is used to create a sequence of numbers, separated by semicolons that contains sensor values. The same variable is then sent out with network.write and populated by network.read in case a node receives these informations from other nodes. It happens often the char-array is overwritten or cutted-off. Without posting the code, I only would like to know how these 5 PIPES are working. It’s possible in case two nodes sends simultaniuosly to node00 a message they would be overwritten? Or how network.read reads these pipes? Do I need different headers? Thank’s for the help!

        Simon

  17. Sergey

    Compilation errors:

    nodeconfig.cpp: In function ‘void nodeconfig_listen()’:
    nodeconfig.cpp:73: error: ‘eeprom_update_block’ was not declared in this scope
    nodeconfig.cpp:82: error: ‘eeprom_update_block’ was not declared in this scope
    nodeconfig.cpp:100: error: ‘eeprom_update_block’ was not declared in this scope

  18. Zim

    First up thanks++

    Some advice please. I am developing a project that requires about 200 temperature sensors. Each sensor will be a self contained aduino + nrf24l01 + sensor. All fine so far but this is where my problem comes. This project requires 1 control node and all 200 boards to talk directly* to it. The best way I can describe the situation is a bag full of marbles being scattered in a room. This will rule out using the sensornet example as nodes could be anywhere in the room.

    Things to work with:
    Arduino pro mini 3.3v
    The sensor I have chosen to use is a ds18b22**
    Nrf24l01 module
    A very basic understanding of arduino and c/c++ so any advice would be great.

    *or have a dynamic mesh.
    ** each one wire device has its own unique id that could be used as an address.

    • Hi. I don’t see an obvious solution for your problem. You have a complex problem, with no obvious off-the-shelf solutions, and limited c/c++ expertise. Perhaps the thing to do is start small and build up your expertise one step at a time until you’re at the point where you can undertake something of this scope?

  19. patricio

    How many nodes can the base have? By simply seeing the notation of the names i can only have 9? I wish i could have a very large amount of children from the base node, actually that is the only connection i want.

    Another question, what happens when a node is out of range? Is there a way for the base to detect when their children is in range?

    • The base can have 5 children.

      As to range detection, the library will not do this for you. However, it’s not so hard to design an application that builds in range checking. For example, leaf nodes can send an “I’m alive” message on a regular interval. The base can for example post that message to a server. Then from a web page, you could see how long its been since the system heard from a particular leaf node. This could tell you it’s out of range (or out of batteries!).

      • patricio

        Why is it that 5 is the limit? Is it because of the Enhanced Shockburst? is there a way i could get this number higher? i just need 1 nrf recevier being the “server” and many sensors reporting to it.

      • patricio

        I’ve been thinking, what i really need is a star network, but i need a big network. i need to have maybe 100 leaf nodes, which if i am getting my calculations correct i could create this by using 3 layers as my “base” node, meaning having 31 modules being my “base” 1 base, 5 relays, and 5 relays beneath each relay.

        This would give me a total of 125 possible leaf nodes. but if i have that config that would be pretty expensive because every module would need an arduino attached to it would it?

        Is this aproach to achieve my solution not being good? maybe zigbee would be a better option?

        Thanks!

  20. Hello maniacbug,

    I didn’t understand one thing. If you have the receiver/transmitter code separated, how can my node 01 send message to 02? All the not leaf stations should be listening (waiting for their children and his father) to communicate. Does the RF24Network network(radio); takes the pipes automatically based on station ID?

    And multiceiver is able to use 6 pipes, so the base station can have 6 childs, all his childs can have just 5 (one to talk with him and 5 childs)… and this keep going right? So the limitation are the “addressing” size?

    Best Regards,
    Matheus

    • Good question, which can hopefully clarify things for some people. For node 02 to send to 01, the message goes through 00. This is transparent to the application code. The library sets up a (potentially large) tree network, where nodes can only communicate directly with their parents or their children.

      The base can only have 5 children, so yes a pipe is wasted on the base unit. This was a conscious choice to keep the design as simple as possible.

  21. One other little question, If I’m using interruptions, my board will just get interrupt when one of the pipes that the station is waiting for ? Or any network message? For example, if a leaf (022) want to talk with his father(02), and send a message but the base station is in the range. Does the base station (00) will wake up to?

    • So, I don’t typically use interrupts with RF24Network. Base and relay nodes are expected to be on wall power, so I don’t sleep those nodes, ergo no big need for interrupts.

      If you do have interrupts hooked up, you’ll get an interrupt any time there is a message that the node needs to process. For example, consider node 01. If node 021 wants to send a message to the base (00), it will send it first to 01, which will relay it to the base. So in this case, node 01 will get an interrupt when 021′s message arrives which needs to be relayed.

      • So for example, in the case that you said, when 021 sends the message to 01 just 01 will wake up then, 01 will send to the base 00, and then just it will wake up. So, the interrupts just work when you’re actively participating on transmission, if you’re not for example node 031 it will not wake up. :D Thanks!

  22. Grag38

    “Why is it that 5 is the limit? Is it because of the Enhanced Shockburst? is there a way i could get this number higher? i just need 1 nrf recevier being the “server” and many sensors reporting to it.”

    Look at the specs of nRF24 (http://www.nordicsemi.com/eng/nordic/download_resource/8041/1/12853037) , you will discover that there is 6 pipes actives at the same time. If considering that a master takes one pipe, there is 5 free. If you just want one master that send packet without ‘return’ as UDP protocol do, it will works without trouble.

    I already use 1 master that sends datas to 12 receivers. But there is no protocol about to know if a receiver had received the datas.

    You can read in the specs (ref done above, around the 7.7 part of the document).

    Best regards.

  23. Simon

    Hi maniacbug,

    As written before, thank’s for your library, it’s great. I’m trying a bidirectional comunication, as descrived here on Arduino forum:

    http://arduino.cc/forum/index.php/topic,136588.0.html

    If you could help me would be nice. In case you can answer me here or on forum directly.

    Thank’s! Simon

  24. Hei Maniacbug, i’m just curious, how far nrf24 can transmit to another node?peer to peer, without bridge.
    thanks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s