NRF24 to blynk

Lol , I’m trying to use blynk as a controller of the mesh like a boss :sunglasses:

yah… don’t make a 10k long train… make a shorter train on a 10k track with multiple stations :stuck_out_tongue:

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 :slight_smile:

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();
  }
}

damn
thank you so much @Lichtsignaal and @Gunner :blush:
I have found that “mysensor” library is stable and easy to use for NRF24 + gateway
but in case of using with blynk app needs to translate data; I think someone in your topic has done it before.
I don’t have time to test it, I have to present my project in a week…
anyway I love blynk