Sure thing, here are the code’s for the NRF nodes:
It sends the millis() and a certain value to the other NRF. As you can see they are handled in the loop because they need to constantly pull info from the NRF network.
There is one case I think of that this will work fine and that is by using an ESP32 (which has two cores). You could run the Blynk loop on one core and the NRF loop on the second core. Three LEDs with Dirty Delay (ESP32) this topic has some pointers for that case
Based on the RF24 lib (excuse the comments, they are in Dutch)
Node 0
// ONTVANGER NODE, RF24 SENSOR NETWERK
// PROGRAMMEERVOORBEELD BITS & PARTS, WWW.BITSANDPARTS.EU
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
// we definieeren de structuur van het te ontvangen bericht (het envelopje met daarin de gegevens)
struct sensor_bericht
{
unsigned long ms; // de huidige tijd in milliseconden
unsigned long sensor_waarde; // de uitgelezen sensor-waarde
};
RF24 radio(9,10); // nRF24L01(+) transceiver aangesloten met pins 9 en 10
RF24Network network(radio); // netwerk definiëren
const uint16_t deze_node = 0; // adres van onze (ontvanger) node
const uint16_t andere_node = 1; // adres van de andere (sensor) node
//*******************************************************************************
// SETUP
//*******************************************************************************
void setup()
{
Serial.begin(57600);
SPI.begin();
radio.begin();
radio.setDataRate(RF24_1MBPS);
radio.setPayloadSize(24);
network.begin(90, deze_node);
Serial.println("Sensor netwerk ontvanger start...");
Serial.print("Datarate: ");
Serial.println(radio.getDataRate());
Serial.print("Power level: ");
Serial.println(radio.getPALevel());
Serial.print("Payload size: ");
Serial.println(radio.getPayloadSize());
}
//*******************************************************************************
// HOOFD LOOP
//*******************************************************************************
void loop()
{
// houdt het netwerk aan de gang
network.update();
// is er data beschikbaar op het netwerk voor ons?
while ( network.available() )
{
// zo ja, pak de data en print het
// we geven aan dat 'header' de structuur heeft van 'RF24NetworkHeader' (voorgedefinieerd in de RF24network library)
RF24NetworkHeader header;
// we geven aan dat 'bericht' de structuur heeft van 'sensor_bericht'
sensor_bericht bericht;
// we lezen het bericht van het netwerk
network.read(header,&bericht,sizeof(bericht));
// de ontvangen gegevens die in het sensor bericht zaten printen
Serial.print(" Sensor waarde: ");
Serial.print(bericht.sensor_waarde);
Serial.print(" Tijd: ");
Serial.println(bericht.ms);
}
}
Node 1
// ZENDER (SENSOR) NODE, RF24 SENSOR NETWERK
// PROGRAMMEERVOORBEELD BITS & PARTS, WWW.BITSANDPARTS.EU
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
// we definieeren de structuur van het te sturen bericht (het envelopje met daarin de gegevens)
struct sensor_bericht
{
unsigned long ms; // de huidige tijd in milliseconden
unsigned long sensor_waarde; // de uitgelezen sensor-waarde
};
RF24 radio(9,10); // nRF24L01(+) transceiver aangesloten met pins 9 en 10
RF24Network network(radio); // netwerk definiëren
const uint16_t deze_node = 1; // adres van onze (sensor) node
const uint16_t andere_node = 0; // adres van de andere (ontvanger) node
const unsigned long interval = 2000; //om de hoeveel tijd we de sensorwaarde naar de ontvanger node sturen (2 seconden)
unsigned long tijd_laatste_bericht; // wanneer we voor het laatste een bericht hebben gestuurd
//*******************************************************************************
// SETUP
//*******************************************************************************
void setup(void)
{
Serial.begin(57600);
SPI.begin();
radio.begin();
radio.setDataRate(RF24_1MBPS);
radio.setPayloadSize(24);
network.begin(90, deze_node);
Serial.println("Sensor netwerk zender (sensor node) start...");
Serial.print("Datarate: ");
Serial.println(radio.getDataRate());
Serial.print("Power level: ");
Serial.println(radio.getPALevel());
Serial.print("Payload size: ");
Serial.println(radio.getPayloadSize());
}
//*******************************************************************************
// HOOFD LOOP
//*******************************************************************************
void loop(void)
{
// houdt het netwerk aan de gang
network.update();
// als het tijd is om een bericht te sturen dan gaan we sturen
unsigned long tijd_nu = millis();
if( tijd_nu - tijd_laatste_bericht >= interval )
{
Serial.print("Verzending gegevens...");
// we geven aan dat 'header' de structuur heeft van 'RF24NetworkHeader' (voorgedefinieerd in de RF24network library)
RF24NetworkHeader header(/*naar node*/ andere_node);
// de sensor waarde uitlezen van analoge input A0
unsigned long sensor_waarde = analogRead( A0 );
unsigned long mv = (sensor_waarde ) * (5000/1024);
unsigned long cel = (mv - 500)/10;
// nog even laten zien welke waarde we versturen
Serial.print("sensor_waarde:");
Serial.print(cel);
Serial.print("...");
// we geven aan dat 'bericht' de structuur heeft van 'sensor_bericht'
// en zetten er gelijk de gegevens in
sensor_bericht bericht = { millis(), cel };
// we sturen het bericht het netwerk op
bool ok = network.write(header,&bericht,sizeof(bericht));
if( ok )
{
Serial.println("gelukt.");
} else
{
Serial.println("mislukt.");
}
// onthouden wanneer we het laatste bericht hebben verzonden
tijd_laatste_bericht = millis();
}
}