How to use nRF24l01 trancievers with arduino like repeater, to extend network range. If you have sensors far from base node, you will need some repeater in the "middle". Here is shown working code for Base node 00, repeater node 01 and sensor node 011. Please take care, what the addresses in the code have OCT format, not DEC or BIN. network.update() must be at beginning of the loop, in order to make repeaters.
For Base 00 node:
For Base 00 node:
//node 0 #includeFor repeater 01 node:#include #include RF24 radio(8,9); RF24Network network(radio); const uint16_t node0 = 00; const uint16_t node1 = 01; const uint16_t node11 = 011; struct payload_t { unsigned long ms; unsigned long counter; }; void setup(void) { Serial.begin(115200); Serial.println("RF24Network/examples/helloworld_rx/"); SPI.begin(); radio.begin(); network.begin(/*channel*/ 90, /*node address*/ node0); } void loop(void) { network.update(); while ( network.available() ) { 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); } }
//node 1 #includeFor sensor 011 node:#include #include RF24 radio(9,10); RF24Network network(radio); const uint16_t node0 = 00; const uint16_t node1 = 01; const uint16_t node11 = 011; void setup(void) { Serial.begin(115200); Serial.println("Rf24Network Relay"); SPI.begin(); radio.begin(); network.begin(/*channel*/ 90, /*node address*/ node1); } void loop(void) { network.update(); }
//node 11 #include#include #include RF24 radio(9,10); RF24Network network(radio); const uint16_t node0 = 00; const uint16_t node1 = 01; const uint16_t node11 = 011; const unsigned long interval = 2000; //ms unsigned long last_sent; unsigned long packets_sent; struct payload_t { unsigned long ms; unsigned long counter; }; void setup(void) { Serial.begin(115200); Serial.println("RF24Network/examples/helloworld_tx/"); SPI.begin(); radio.begin(); network.begin(/*channel*/ 90, /*node address*/ node11); } void loop(void) { network.update(); 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*/ node0); bool ok = network.write(header,&payload,sizeof(payload)); if (ok) Serial.println("ok."); else Serial.println("failed."); } }