4 emisores nrf24l01 a un receptor


hola todos, después de leer un montón, probar muchísimos sketch, librerías y demás, y no encontrar lo que busco, os pregunto los entendidos si hay alguna manera de hacer lo que os voy exponer.

dispongo de un arduino due, que es el receptor y 4 arduinos nano que son los emisores, en cada nano tengo un nrf24l01 para que pueda comunicarse con el receptor, si conseguido que se comunique pero no los 4 la vez.

os pongo el código ultimo que probado ver si alguno de vosotros me puede orientar.
de momento solo tengo 3 puestos

emisor1
code: [select]
/*
 * getting started example sketch nrf24l01+ radios
 * basic example of how send data 1 node another
 * updated: dec 2014 tmrh20
 */

#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};
// used control whether node sending or receiving

struct lectura {
    byte id;
    byte angulo;
};

void setup() {
  serial.begin(57600);
  serial.println(f("emisor 1"));
  radio.begin();
  // set pa level low prevent power supply related issues since a
  // getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
  radio.setpalevel(rf24_pa_low);
  radio.setchannel (120);
  // open writing , reading pipe on each radio, opposite addresses
  radio.openwritingpipe(addresses[0]);
}

void loop() {
  lectura enviar;
  enviar.id=1;
  enviar.angulo=10;
 
  serial.println(f("enviando 1..."));
  if (!radio.write( &enviar, sizeof(lectura) )){
    serial.println(f("fallo al enviar"));
  }
  delay(1000);
} // loop



emisor2
code: [select]
/*
 * getting started example sketch nrf24l01+ radios
 * basic example of how send data 1 node another
 * updated: dec 2014 tmrh20
 */

#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};
// used control whether node sending or receiving

struct lectura {
    byte id;
    byte angulo;
};

void setup() {
  serial.begin(57600);
  serial.println(f("emisor 2"));
  radio.begin();
  // set pa level low prevent power supply related issues since a
  // getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
  radio.setpalevel(rf24_pa_low);
  radio.setchannel(121);
  // open writing , reading pipe on each radio, opposite addresses
  radio.openwritingpipe(addresses[0]);
}
void loop() {
    lectura enviar;
    enviar.id=2;
    enviar.angulo=20;
   
    serial.println(f("enviando 2..."));
    if (!radio.write( &enviar, sizeof(lectura) )){
      serial.println(f("fallo al enviar"));
    }
    delay(1000);
} // loop



emisor3
code: [select]
/*
 * getting started example sketch nrf24l01+ radios
 * basic example of how send data 1 node another
 * updated: dec 2014 tmrh20
 */

#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};

struct lectura {
    byte id;
    byte angulo;
};

void setup() {
  serial.begin(57600);
  serial.println(f("emisor 3"));
  radio.begin();
  // set pa level low prevent power supply related issues since a
  // getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
  radio.setpalevel(rf24_pa_low);
  radio.setchannel (122);
 
  // open writing , reading pipe on each radio, opposite addresses
  radio.openwritingpipe(addresses[0]);
 
}
void loop() {
    lectura enviar;
    enviar.id=3;
    enviar.angulo=30;
 
    serial.println(f("enviando 3..."));
    if (!radio.write( &enviar, sizeof(lectura) )){
      serial.println(f("fallo al enviar"));
    }
    delay(1000);
} // loop




receptor
code: [select]
//lee de 3 sensores distintos, cada uno debe enviar un byte con su id (1 2 3) en ascii
#include <spi.h>
#include "rf24.h"

/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};

struct lectura {
    byte id;
    byte angulo;
};

void setup() {
  serial.begin(57600);
  radio.begin();
  // set pa level low prevent power supply related issues since a
  radio.setpalevel(rf24_pa_low);
  // getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
}

void loop() {
  lectura recibido;
  uint8_t canal=0;
 
  (canal=120;canal < 123;canal++){
    radio.setchannel (canal);
    radio.openreadingpipe(1,addresses[0]);
    radio.startlistening();
 
    serial.print("leyendo en canal "); serial.print(canal); serial.println();
    if( radio.available()){
      radio.read( &recibido, sizeof(lectura) ); // payload
      serial.print("recibido id "); serial.print(recibido.id); serial.print("recibido angulo "); serial.print(recibido.angulo); serial.println();     
    }
    radio.stoplistening(); // first, stop listening can talk
  }
  delay (300);
} // loop


quizá haya alguna manera mejor de hacerlo, solo necesito que cada emisor envié al receptor 4 variables diferentes.

un saludo.




prueba con las librerías que expliqué en esa guía: http://forum.arduino.cc/index.php?topic=325087.0


Arduino Forum > International > Español > Hardware (Moderators: surbyte, Hector_A) > 4 emisores nrf24l01 a un receptor


arduino

Comments