Go Down

Topic: 2 emisores y 1 receptor NRF24l01 (Read 355 times) previous topic - next topic

FABIANC26

Sep 10, 2018, 06:24 pm Last Edit: Sep 10, 2018, 06:54 pm by surbyte Reason: Agregado de etiquetas de código y errores.
Como puedo enviar la Información recibida desde un sensor de flujo de agua y un sensor de humedad esto utilizando módulos nrf24l01, tomando en cuanta que tengo 2 emisores cada uno en 2 arduinos diferentes  y 1 receptor en otro arduino totalmente aparte?.

Esta el la programación que tengo por ahora, lo que pasa es que  el receptor no puede recibir datos de los 2 emisores al mismo tiempo.

Alguien con alguna solucion? GRACIAS!.


EMISOR1:

Code: [Select]
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

#define CE_PIN 9
#define CSN_PIN 10

//Variable con la dirección del canal por donde se va a transmitir
byte direccion[5] ={"1Node"};

//creamos el objeto radio (NRF24L01)
RF24 radio(CE_PIN, CSN_PIN);

//vector con los datos a enviar
float datos[3];

//sensor de flujo
volatile int flow_frequency;
unsigned int l_hour;
unsigned char flowsensor = 2;
unsigned long currentTime;
unsigned long cloopTime;
void flow ()
{
  flow_frequency++;
}


void setup()
{
 //inicializamos el NRF24L01
 radio.begin();
 //inicializamos el puerto serie
 Serial.begin(9600);

//Abrimos un canal de escritura
radio.openWritingPipe(direccion);

//sensor de flujo
pinMode(flowsensor, INPUT);
 digitalWrite(flowsensor, HIGH);
 Serial.begin(9600);
 attachInterrupt(0, flow, RISING);
 sei();
 currentTime = millis();
 cloopTime = currentTime;

}

void loop()
{

//sensor de flujo
currentTime = millis();

  if(currentTime >= (cloopTime + 1000))
  {
     cloopTime = currentTime;
     l_hour = (flow_frequency * 60 / 7.5);
     flow_frequency = 0;
     Serial.print(l_hour, DEC);
     Serial.println(" L/hour");
  }


 
//cargamos los datos en la variable datos[]
datos[1]=(l_hour);

//enviamos los datos
bool ok = radio.write(datos, sizeof(datos));
 //reportamos por el puerto serial los datos enviados
 if(ok)
 {
    Serial.print("Datos enviados: ");
    Serial.print(datos[1]);
   
 }
 else
 {
    Serial.println("no se ha podido enviar");
 }
 delay(1000);
}





EMISOR2:


Code: [Select]
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

#define CE_PIN 9
#define CSN_PIN 10

//Variable con la dirección del canal por donde se va a transmitir
byte direccion[5] ={"2Node"};

//creamos el objeto radio (NRF24L01)
RF24 radio(CE_PIN, CSN_PIN);

//vector con los datos a enviar
float datos[3];

void setup()
{
 //inicializamos el NRF24L01
 radio.begin();
 //inicializamos el puerto serie
 Serial.begin(9600);

//Abrimos un canal de escritura
radio.openWritingPipe(direccion);

}

void loop()
{
//cargamos los datos en la variable datos[]
datos[0]=((analogRead(0)/1023.0) * 100.0);

//enviamos los datos
bool ok = radio.write(datos, sizeof(datos));
 //reportamos por el puerto serial los datos enviados
 if(ok)
 {
    Serial.print("Datos enviados: ");
    Serial.print(datos[0]);
   
 }
 else
 {
    Serial.println("no se ha podido enviar");
 }
 delay(1000);
}



RECEPTOR:

Code: [Select]
#include <RF24.h>
#include <RF24_config.h>

#define CE_PIN 9
#define CSN_PIN 10

//Variable con la dirección del canal que se va a leer
byte direccion[5] = {"1Node","2Node",};



//creamos el objeto radio (NRF24L01)
RF24 radio(CE_PIN, CSN_PIN);

//vector para los datos recibidos
float datos[3];

{
//inicializamos el NRF24L01
void setup()
 radio.begin();
 //inicializamos el puerto serie
 Serial.begin(9600);
 
 //Abrimos el canal de Lectura
 radio.openReadingPipe(1, direccion);
 radio.openReadingPipe(1, direccion2);

 
   //empezamos a escuchar por el canal
 radio.startListening();

}

void loop() {
uint8_t numero_canal;
//if ( radio.available(&numero_canal) )
if ( radio.available() )
{    
    //Leemos los datos y los guardamos en la variable datos[]
    radio.read(datos,sizeof(datos));
   
    //reportamos por el puerto serial los datos recibidos
    Serial.print("humedad= " );
    Serial.print(100-datos[0]);
    Serial.print(" % ");
    Serial.print("flujo de agua= " );
    Serial.print(datos[1]);
    Serial.println(" L/h ");

}
else
{
    Serial.println("No hay datos de radio disponibles");
}
delay(1000);
}

surbyte

Hay un tutorial de gepd que creo se llama algo asi como RF24 Mesh donde hay un ejemplo de como hacerlo.

Es mucho mas facil usando las librerias de Tmrh20 sea la versión Network o la versión Mesh.
Esta preparadas justamente para esto que quieres hacer.

FABIANC26

Muchas gracias!! lo voy a intentar


surbyte


Go Up