Go Down

Topic: Red Nrf24l01 (Read 1 time) previous topic - next topic

Jun 26, 2012, 03:57 pm Last Edit: Jun 26, 2012, 04:22 pm by cacharreante Reason: 1
Hola a todos,

Estoy intentando hacer una red inalámbrica con varios arduinos. La distancia que pueden alcanzar estos chips no es alta (unos 10 metros) por lo que se me ha ocurrido y ya que va a haber unos cuantos se envíen entre ellos la señal, si es para ellos que se la queden y ejecuten lo que tenga que ejecutar, y si no es suya, la reboten. Para ellos se me ha ocurrido (con algo de ayuda de unas cuantas web todo) enviar 3 paquetes o como se le diga. En el primero ira el numero de nodo para el que es la señal, en el segundo el numero de orden, y el tercero si esta ejecutada o no, ya que si esta ejecutada no tendrán que rebotarla. Me he puesto a escribir un código con copia pega de varios códigos mas algo propio... compilar compila otra cosa es que funcione. Os lo pego para que si alguno sabe algo del tema o se le puede ocurrir algo postee. He buscado un montón de información sobre este chip y ponerlo en modo red mallada pero no hay mucho.

Un saludo a todos

Code: [Select]
#include "Nrf2401.h"

byte numnodolocal; //declaro variables
byte ordenodo;
byte numnodo;
byte realizado; //realizado=01 Si    realizado=00 No

Nrf2401 Radio;

void setup(void)
{
 Radio.localAddress = 1;
 Radio.remoteAddress = 1;
 Radio.txMode(3);
 Radio.rxMode(3);
 
 byte numnodolocal = 01; //Numero de nodo
 
 Radio.data[0]=numnodo;
 Radio.data[1]=ordenodo;
 Radio.data[2]=realizado;
   
}

void loop(void)
{
 
 while(!Radio.available());
 Radio.read();
 if(Radio.data[0] == numnodolocal && Radio.data[2] == 00)
 {
 if (Radio.data[1] == 01){
 // Orden 1 y pones a 01 el Radio.data[02]
 }  
 else if (Radio.data[1] == 02){  
 // Orden 2 y pones a 01 el Radio.data[02]
 }
  else if (Radio.data[1] == 03){  
 // Orden 3 y pones a 01 el Radio.data[02]
 }
else if (Radio.data[1] == 04){  
 // Orden 4 y pones a 01 el Radio.data[02]
 }
 
 }
else if (Radio.data[1] != numnodolocal && Radio.data[02] == 00){
 Radio.write ();
 delay (1000);
 
}

}


Actualizo:
Creo que la ultima parte la de cambiar el tercer bloque a "tarea recibida y ejecutada" no vale para nada, ya que quien lo cambia es el nodo que tiene que ejecutarla, asi que si por lo que sea le viene de otro nodo, le vendria como "no ejecutada" y por tanto se volveria a ejecutar.

Ayuda! :)

curro92

Hola,
No conozco esa librería. Yo estoy usando la librería RF24Network de James Coliz, con la que se puede crear una red tipo mesh, que posibilita enviar mensajes desde cualquier nodo (sensor) a la base siguiendo las ramificaciones de la red. Y se pueden enviar mensajes desde la base a los nodos (actuadores).





#2
Jun 26, 2012, 10:34 pm Last Edit: Jun 26, 2012, 10:43 pm by cacharreante Reason: 1
Eskerrik asko!!!

Cuando termine examenes investigare en esa direccion. ;)

Edito: Aun así lo que estoy buscando es justo lo contrario... Desde el nodo 00 enviar comandos a los nodos 01,02 etc...
Alguna idea?

pacojarcia

No es una MESH real. Solo una emite y los otros escuchan (limitado a 6).

En realidad lo que busco es algo asi:

Nodo 0 ---> Envia ordenes...
Nodos 1,2,3.. las reciben...

Si no hubiese el problema de la distancia pondria al 0 como emisor y a los demas de oyentes. Pero la distancia al ultimo punto es mas grande. De ahi que lo interesante seria que ya que el 1 recibe bien la transmita al 2 y el 2 al 3... asi sucesivamente.

Un saludo y gracias a todos.

curro92

#5
Jun 27, 2012, 03:28 pm Last Edit: Jun 27, 2012, 03:32 pm by curro92 Reason: 1
Hola,
La librería que mencioné se explica aquí
http://maniacbug.github.com/RF24Network/index.html

En los ejemplos de la librería hay uno sobre una red mesh construída con estos módulos, y que puede contener cientos de nodos
http://maniacbug.github.com/RF24Network/meshping_8pde-example.html
Periódicamente cada nodo envía mensajes a la base, y la base envía a cada nodo la lista de nodos activos. No hay problema para que la base envíe mensajes a nodos actuadores.

Hay casos prácticos en el foro
http://arduino.cc/forum/index.php/topic,84135.msg630230.html#msg630230





Vaya currada tio. Eskerrik!! La libreria esa ya he empezado a leerla pero hasta dentro de un par de semanas no me metere a tope, que demasiado estoy mirando ya, tendria que estar a otras cosas.

Go Up