| Parameter | Startup Range | GK Range | |-----------|--------------|-----------| | Max distance (LOS, outdoors) | ~30 m | ~80 m (with PA/LNA) | | Indoor (2 walls) | ~10 m | ~25 m | | Packet loss at max range | 0% (init only) | <5% | | RSSI at limit | -60 dBm | -85 dBm | | Retransmits/sec | 0 | <2 |
Note: Actual values depend on PA/LNA, antenna, interference.
Here is an advanced gateway script that dynamically adjusts parameters to extend keep-alive range.
#include <RF24.h> RF24 gateway(7, 8);struct Packet uint8_t id; float sensorValue; char deviceName[12]; uint32_t timestamp; ; Script RF24- alcance de arranque- alcance de GK...
void setupGateway() gateway.begin(); gateway.setPALevel(RF24_PA_MAX); gateway.setDataRate(RF24_250KBPS); gateway.setChannel(100); gateway.setAutoAck(true); gateway.enableDynamicPayloads(); gateway.openReadingPipe(0, 0xF0F0F0F0D2LL); // 40-bit address gateway.startListening();
void loopGateway() if(gateway.available()) Packet p; uint8_t len = gateway.getPayloadSize(); gateway.read(&p, len);
// Compute RSSI (if using a module that reports it) uint8_t rssi = gateway.getRSSI(); // Requires custom function float distanceEstimate = estimateDistance(rssi); // If RSSI is weak (> -80dBm), send a keep-alive command if(rssi > 80) // Stronger negative value means weaker signal sendKeepAlive(&p);
void sendKeepAlive(Packet *p) gateway.stopListening(); gateway.openWritingPipe(p->id); // Per-device pipe char keepAliveCmd[] = "GK_ALIVE"; for(int i=0; i<5; i++) // Burst keep-alive gateway.write(&keepAliveCmd, sizeof(keepAliveCmd)); delay(20); gateway.startListening();
#include <RF24.h> RF24 radio(7, 8); uint8_t address[6] = "RNG01"; unsigned long lastSend = 0;void setup() Serial.begin(115200); radio.begin(); radio.openWritingPipe(address); radio.setAutoAck(true); | Parameter | Startup Range | GK Range
void loop() if (Serial.available()) char c = Serial.read(); if (c == 'L') radio.setPALevel(RF24_PA_LOW); Serial.println("PA LOW (startup range)"); else if (c == 'M') radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); Serial.println("PA MAX + 250kbps (GK range)");
// Send test packet if (millis() - lastSend > 1000) RSSI: "); Serial.println(radio.testRPD() ? ">64dBm" : "<64dBm"); lastSend = millis();