Arduino Forum

International => Español => Hardware => Topic started by: Sergegsx on Mar 01, 2011, 10:19 am

Title: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 01, 2011, 10:19 am
Hola a todos, una duda que me ha surgido...

Es posible transferir gran cantidad de datos entre 2 arduinos de forma inalambrica? como medio de transmisión habia pensado usar 2 Xbee+modulos.

la idea es la siguiente, un arduino 'remoto' esta recolectando datos durante 1 o 2 horas, llegado a cierto punto, si tiene el otro Xbee al alcance, le transfiere todos los datos guardados para que el Arduino 'base' procese los datos y los guarde en una memoria usb, los suba a un servidor mysql, o lo que sea.

queria saber si alguno tiene experiencia en algo asi, y si es fiable enviar linea tras linea de datos.

inicialmente las lineas serian asi (aunque quiero usar esto para otro proyecto que no serian asi, pero lo mismo da)

Code: [Select]
2011-03-01 05:12:20;1298956340000;391.47;358.36;229.28;1.71;0.92;0.00;0;4
2011-03-01 05:12:30;1298956350000;391.55;358.81;229.16;1.71;0.92;0.00;0;4
2011-03-01 05:12:40;1298956360000;388.74;357.28;229.27;1.70;0.92;0.00;0;4
2011-03-01 05:12:50;1298956370000;386.52;355.68;229.34;1.69;0.92;0.00;0;4
2011-03-01 05:13:00;1298956380000;390.99;358.77;229.32;1.70;0.92;0.00;0;4
2011-03-01 05:13:10;1298956390000;390.43;358.64;229.31;1.70;0.92;0.00;0;4
2011-03-01 05:13:20;1298956400000;389.39;357.74;229.20;1.70;0.92;0.00;0;4


muchas gracias
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 01, 2011, 01:49 pm
Los XBee se basan en el standar ZigBee que establece un sistema de corrección de errores y los paquetes se reenvían hasta que se reciban correctamente en el destino.
No debería existir problema alguno para hacer lo que comentas.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 01, 2011, 02:47 pm
gracias chiva!

he visto que existen Xbee con versión 802.14.2 (o algo asi) y otros con version ZB

me recomiendas unos u otros? creo que he visto que los programas con el  802.14.2 parecen mas simples de escribir.

lo que veo tortuoso es que hay que enviar 1 variable por mensaje, y encima he visto que en un ejemplo que lo pasaba a int para transmitirlo.

no se pueden enviar tramas como las de arriba? asi el arduino receptor solo tiene que romperla usando ";" y hacer lo que necesite con los datos.

gracias por tu comentario.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 01, 2011, 11:53 pm
Si lo pones en modo AT puedes mandar datos como si de un cable serie se tratara, independientemente de los serie 1, 2, 2.5, S2B.

Yo te recomiendo los que llevan ZigBee, que son las series 2, 2.5 y S2B y tampoco son mucho más caros que los de la serie 1.
Si de verdad vas a meterte con XBee no estaría mal que te hicieras con una copia de "Building Wireless Sensor Networks" que trata desde qué comprar a cómo usar la Serie 2/2.5, con muchos ejemplos y paso a paso, muy completo la verdad.

Hace un par de días lo estaban sorteando en la página de Digi en Facebook, a lo mejor te podrías haber hecho con uno, ya que no participó mucha gente, si lo hubieras posteado antes... XD

Un saludo
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 01, 2011, 11:59 pm
vaya que lastima !!!
bueno a ver si hay otro sorteo pronto jeje
pues pensaba no coger ZB pero porque habia visto codigos de uno y otro, y siempre me parecio mas complejo el de ZB. igual estoy equivocado.
se supone entonces que ZB es mejor o mas actual por lo que dices de las series? bueno eso ya lo puedo mirar yo por internet, sorry.

gracias chiva !!!
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 02, 2011, 12:51 am
Si me dices donde has visto lo que comentas le hecho un vistazo, ya que una vez configurados es sólo hacer Serial.print sin más.
Es que hay varios firmware y cada firmware tiene el modo AT y el API, el AT es el que hace de "cable" serie.

Un saludo y de nada :P
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: flico on Mar 02, 2011, 12:57 pm
Tambien puedes usar el 24L01 de Nordic semiconductor, trabaja en 2,4Ghz

(http://www.satistronics.com/images/l/201005/12753009450.jpg)

Enlace ebay 2 x 10 Euros
http://cgi.ebay.es/2x-Mini-2-4Ghz-Wireless-NRF24L01-Transceiver-Module-Z-/160485402774?pt=LH_DefaultDomain_0&hash=item255dace896 (http://cgi.ebay.es/2x-Mini-2-4Ghz-Wireless-NRF24L01-Transceiver-Module-Z-/160485402774?pt=LH_DefaultDomain_0&hash=item255dace896)

Code
http://innerqube.com/?p=151 (http://innerqube.com/?p=151)
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: flico on Mar 02, 2011, 01:00 pm
y como no en el playground
http://www.arduino.cc/playground/InterfacingWithHardware/Nrf2401 (http://www.arduino.cc/playground/InterfacingWithHardware/Nrf2401)
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 02, 2011, 01:14 pm
flico gracias por el enlace, pero estoy buscando algo que sea lo mas sencillo de programar posible, mis conocimientos no son maximos y como quiero integrarlo en un proyecto bastante grande necesito que cada sección sea lo mas sencilla posible. pero me guardo el link !!

el ejemplo del playground parece muy muy sencillo de implementar,no? y encima el precio es muchisimo mas interesante que comprar 2 Xbee mas sus modulos
la duda es, se puede enviar un String completo como he puesto arriba?
esos modulos son emisores/receptores? porque tendre que conectar uno para enviar en un arduino y otro para recibir en el otro arduino.

chiva pues lo vi en coocking-hacks...
http://www.cooking-hacks.com/index.php/arduino-xbee-zb-2mw-onchip.html
http://www.cooking-hacks.com/index.php/arduino-xbee-802-15-4.html
como ves el coste es el mismo en ambos casos 39euros, el zb pone que son 2mw no se si hara que tenga mayor potencia, aunq esto no deberia ser un problema.
ahora mismo no consigo encontrar los codigos ejemplos que habia visto, solo este tutorial de coocking-hacks que parece que lo usa para ambos tipos.
http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-xbee-shield#step6

yo tan solo quiero enviar un String con toda la linea de datos, pero parece complicado encontrar ejemplos sencillos que hagan esto, siempre se trata de enviar un numero.
mi objetivo es...que cuando los dos XBee's se encuentren (esten en rango) y pasados 10 minutos...el XBee cliente le envie al XBee servidor todos los datos que ha recolectado durante 1 o 2 horas. es decir preparar una funcion que cuando se cumplan estas dos condiciones se pongo a enviar datos como un loco:
if ((hay conexión con el otro xbee)   &&  (tiempo transcurrido desde conexión> 10 minutos))
{ hacer funcion de volcado de datos
}




p.d. visto lo visto, me he propuesto hacer un minitutorial para megaprincipiantes de cada modulo que aprenda a usar ya que veo que muchos codigos ejemplo no son siempre los mas adecuados. ya estoy realizando uno de como usar el official ethernet shield en modo ethernet y SD en el mismo codigo.

muchas gracias a los dos !!!
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 03, 2011, 02:32 am
Gixxer,

utiliza dos Xbee, uno configurado como coordinador y otro como router (si no quieres utilizar el Sleep), en la dirección de destino de uno pones la dirección del otro y en el otro pones la del uno. Carga los firmwares más recientes AT (no API) con el XCTU.

Y ya tienes todo lo que necesitas, emulan una conexión serie de forma transparente, puedes mandar las cadenas de una en una o todas juntas a 250Kb.

http://www.zigbe.net/
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 03, 2011, 07:29 am

Gixxer,

utiliza dos Xbee, uno configurado como coordinador y otro como router (si no quieres utilizar el Sleep), en la dirección de destino de uno pones la dirección del otro y en el otro pones la del uno. Carga los firmwares más recientes AT (no API) con el XCTU.

Y ya tienes todo lo que necesitas, emulan una conexión serie de forma transparente, puedes mandar las cadenas de una en una o todas juntas a 250Kb.

http://www.zigbe.net/



gracias zigbe, vaya pedazo web que tienes, me acabo de enganchar a leerla !!

entonces tu me recomiendas la versión ZB o la version 802.15.4 ??? algun motivo en especial?

la opción que puso flico es muy atractiva por precio, porque los dos modulos XBee se suben a 80 eurazos !!! pero creo que los de flico ambos son receptores. si alguien me soluciona esta duda y por 10e es 'posible' crear una red con ellos, seguramente los compre tambien para ver que tal, aunque el proyecto usaria XBee.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 03, 2011, 08:27 am
Es lo que tiene comprar todo hecho, si estás dispuesto a sacar el soldador y buscar unos pocos componentes te lo puedes sacar por unos 40€.

Los XBee:
http://www.seeedstudio.com/depot/xbee%C3%82%C2%AE-rf-modules-znet-25-1-mw-chip-antenna-p-226.html?cPath=139_142&zenid=a1c96526e81f00fc9f72571728fc7264
Las shields:
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=19_21&products_id=298&zenid=uu00d391n7sm2rqh6kv5lrb8s3

Creo que merece un poco la pena por 40€ de diferenci, no?
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 03, 2011, 11:26 am
Gixxer,

que sean de un tipo o otro simplemente determina el protocolo de la red, es algo que gestionan los firmwares de los Xbee y que en el modo AT es prácticamente transparente. Al final que sean ZB unicamente añade una capa encima del protocolo 802.15.4 que permite toda una serie de cosas interesantes para redes con muchos nodos.

Dicho de otra forma para hacer una comunicación punto a punto es suficiente con los 802.15.4, tienes todas las prestaciones que necesitas, pero si pones unos módulos ZB puedes ir añadiendo más nodos y comunicando entre ellos, una de las ventajas es que puedes crear una red mesh, ampliando la cobertura, que busque caminos alternativos para llegar al coordinador si se "muere" un nodo, etc.

No hay demasiada diferencia de precio entre unos y otros (si la hay)

He visto que hay otro hilo en el que preguntas como mirar si un equipo está encendido, te pongo algo de info en ese hilo.

http://www.zigbe.net
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 04, 2011, 01:24 am
hola zigbe, me has aclarado mucho en tu ultimo mensaje.

me decido por tanto hacia los XBee ZB ya que por lo que veo despues de configurarlos correctamente (la red que comentas), la forma de enviar y recibir datos es igual de sencilla. pensaba que eran mas complicados. es tipo esto,no? ->  Serial.print("hola mundo");

he visto esto, seria lo que necesito,no?
http://www.seeedstudio.com/depot/xbee%C3%82%C2%AE-rf-modules-znet-25-1-mw-chip-antenna-p-226.html?cPath=139_142#productReview
http://www.seeedstudio.com/depot/xbee%C3%82%C2%AE-shield-v11-by-seeedstudio-p-419.html?cPath=132_134

lo que no entiendo con esto de la RED de Xbee, es que si tu envias   Serial.print("hola mundo");   entonces todos los que esten en la red lo reciben?? no se supone que con los ZB le puedes decir quien tiene que recibir el mensaje?
yo quiero tener un XBee router que cuando el XBee cliente este cerca se encuentren y el cliente le envie los datos recogidos.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 04, 2011, 02:33 am
Gixxer,


no es bien bien así, independientemente de que elijas los 802.15.4 o los ZB (es bastante trasparente a nivel de aplicación) puedes configurar los módulos en el modo AT o en el modo API.

Lo primero es elegir la función en la red, por lo menos uno debe de ser coordinador (que es el que se encargará de formar la red de modo casi tranparente para ti), el otro debe de ser router o end node (solo un coordinador por red). El router está siempre encedido y puede hacer de repetidor con otros nodos para incrementar la distancia, el end node puedes ponerlo en modo sleep si necesitas una solución de bajo consumo. La función de uno o de otro depende de la versión de firmware que le cargues, con una aplicación que se llama XCTU.

Lo segundo es elegir el idioma que hablarán los Xbee con tu Arduino, puede ser el modo AT o el modo API, también se hace con la versión de firmware, si te decides por el modo AT deberás de cargar el firmware Coordinador AT en un módulo y router AT en el otro.

Independientemete del modo puedes configurar toda una serie de parámetros desde el XCTU, uno de ellos es el Destination Address, tu módulo siempre va a hablar con el destination address que tenga configurado, habitualmente en una red zigbee la dirección 0000000000 siempre es el coordinador (independientemente de su dirección real). Ten en cuenta que las direcciones vienen en dos parámetros DH destination Address Higth y DL Destination Address low, para saber la dirección de un módulo tienes que ver el SH y el SL. En un Xbee tienes que poner en el destino el origen del otro y viceversa.

Si has elegido el modo AT los Xbee se comunican con tu Arduino con cadenas de texto, es decir, una vez hecho o que te indico arriba si tu haces un Serial.print ("Hola mundo") por uno te saldrá por el puerto serie del otro y al revés.Los Xbee se pueden poner en modo comando enviando la cadena "+++" , despues de esa cadena podrías enviar con comandos At un comando para (por ejemplo) cambiar el nodo de destino.

Sigo en oro mensaje porque esel forum no va muy bien....
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 04, 2011, 02:42 am
sigo....

Si utilizas el modo API tienes que construir un paquete con un formato concreto que envías desde el Xbee de origen, el paquete contiene el nodo de destino, indicadores si quieres que te mande un acknoledge, etc. es bastante más complicado, pero una vez implementado puedes comunicar con cualquier nodo de la red simplemente indicando la dirección en el paquete.

Una cosa importante es que tu pones la dirección del nodo de destino (normalmente el coordinador) y el mensaje pasa por todos los nodos que sean necesarios hasta llegar al nodo de destino, si se apaga un nodo la propia red buscaría otra ruta de forma tranparente.

Es un poco más complicado, pero en cada Xbee puedes leer el valor de RSSI, que es la potencia con la que le llega la señal de un determinado nodo, de forma que podrías saber si está cerca del coordinador o no y en función de eso decidor enviar o no. De hecho si no tienes más nodos en la red que estos dos si el que envía está a más distancia de la que cubre la red no estará enganchado, cuando te metas en el área de cobertura se enganchará y puedes enviar los datos.

Los productos que has puesto son correctos, yo personalmente utilizo la shield de Libelium, pero te vale cualquiera. Los módulos tienen 4 tipos de antena, yo suelo usar la cerámica.Hay además módulos con dos niveles de potencia diferentes, los de potencia más baja te cubren 30 metros en interiores y 100 en exteriores, si tienes un nodo móvil consumen bastante menos.

http://www.zigbe.net
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 04, 2011, 02:24 pm
impresionante aportación zigbe !!!
no entiendo como un producto como Zigbee no tiene mas tutoriales, documentación, ejemplos, etc por internet.
hay cosas pero no veo mucha calidad. lo mejor que encontre fue este video tutorial, que junto con vuestras recomendaciones me han animado a usar ZigBee

http://www.youtube.com/watch?v=vKVNmA8C6m8&feature=relmfu

en relación a lo de los tutoriales o la escasa información, una pregunta.
es posible utilizar ZigBee y ademas tener el arduino conectado al PC para tener un hiperterminal en modo diagnostico. algo asi...

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("linea debug enviada al ordenador por el cable usb");
[font=Verdana]ZigBee[/font].println("datos transferidos de un arduino a otro mediante ZigBee");
delay(5000);
}

si esto no es posible, entonces se pierden todas las opciones de poder introducir codigo de debug en los programas??? seria catastrofico!

gracias una vez mas
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 05, 2011, 12:06 am
Gixxer,

El Arduino duemilanove o uno solo tiene una UART, pero puedes emular por software por ejemplo con la librería New Soft Serial. Las shiedls de Xbee suelen utilizar la UART, por lo que se vuelve un poco "rollo" el tema de cargar los sketchs al Arduino, tienes que desconectar el módulo para cargarlos (o en la de Libelium hay unos jumpers para desconectarlo cuando usas el USB)

A cambio, como el Xbee está conectado a las mismas patas del micro que el puerto USB si montas una placa con la shield y el Xbee habiendo sacado el microprocesador del Arduino tienes un adaptador del Xbee al puerto USB. Eso facilita mucho la depuración.

Si cojes dos Arduinos sin micro, con la shield del Xbee, los configuras como te indiqué y conectas cada placa a un PC con el Putty o el hiperterminal (o a dos sesiones del putty en el mismo PC con dos puertos USB diferentes) podrás ver como lo que escribes en un terminal te aparece en el otro, esa es la forma más fácil de verificar que los Xbee están conectando entre ellos y emulando un puerto serie de forma transparente.

Hay bastante información del tema en la web de Digi, de hecho tanta, sobre tantos productos que se hace complejo. Casi toda es accesible desde el ftp, pero los nombres de los ficheros no son muy explicativos.

http://www.zigbe.net
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 05, 2011, 01:58 am
Zigbe, veo que hay información pero esta todo expuesto de forma muy comercial/profesional. yo me referia a ejemplos sencillos de programas. diferentes ideas plasmadas en codigo, tutoriales de como hacer esto o lo otro.

entiendo lo que dices del newsoftserial, vere que se puede hacer en este caso. pero una vez mas veo que no hay mucho en la web, siendo xbee tan famoso, como es que no se encuentran ejemplos de algo tan sencillo cmo lo que he dicho?

todavia no entiendo muy bien como funciona la red de xbee's .
si yo tengo 2 clientes xbee con arduino y 1 arduino con xbee que actua de estación base en casa. los clientes estan configurados para comunicar sus datos al xbee estación base. pero como contesta la estación base? porque si esta quiere pedirle un dato al cliente 1, y luego un dato al cliente 2...como se especifica ? porque supongo que algo tan basico podra hacerse,no?

respecto al PC+Xbee he entendido...
usar comunicación normal -> Arduino1+XBee para comunicar con Arduino2+XBee
usar newsoftserial para - > arduino1+XBee para comunicar por usb al ordenador
es correcto?

no tengo problema en desconectar el xbee del shield para cargar el sketch, tampoco es que esto vayas a hacerlo muy amenudo cuando terminas un proyecto y lo dejas funcionando,no?
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 05, 2011, 12:41 pm
buff tantas preguntas...
otra mas...

es posible determinar si dos XBees estan en rango?? he intentado Serial.available pero claro de este modo tengo que tener el arduino base enviando por serial constantemente.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 06, 2011, 07:48 pm
Gixxer,

El modo API está más pensado para comunicaciones en red con varios nodos, el modo AT es un sustituto excelente de una conexión serie para una comunicación punto a punto. Hay un proyecto en sourceforge o en google code paa comunicar con Arduino y Xbee via API.

Si lo que quieres es leer un sensor analógico y enviarlo a intervalos regulares te ahorras el arduino en el nodo que envía, porque el propio Xbee tiene varios puertos AD (mira en nuesto blog el esquema del mote de temperatura y humedad), puedes programar el Xbee para que envie a intervalos regulares al coordinador.

Tambien puedes hacer esto en modo AT, aunque para una red de varios nodos no es la mejor manera, pero te ponho un ejemplo:
Nodo1-> Dirección del Xbee ->1; Dirección de destino -> 3
Nodo2-> Dirección del Xbee ->2; Dirección de destino -> 3
Coordinador-> Dirección del Xbee->3; Dirección de destino -> 1 (o 2, la que prefieras)

Cualquier cosa que envie cualquier nodo irá aparecerá por la UART del coordinador, porque la dirección de destino es la tres.

Si quieres hablar desde el coordinador con el nodo1 envias al Xbee la cadena "+++" para entrar en el modo de configuración y el comando para cambiar la dirección de destino "ATDH[Destino1]ATDL[Destino2]", lo que envies a partir de ahora aparecerá en el nodo configurado, si quieres cambiar de nodo envías de nuevo el comando con la dirección del otro nodo.

Sigo en otro mensaje, porque no me funciona bien el cuadro de texto del forum...
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 06, 2011, 07:58 pm
Continuo...

lo que te he descrito es la forma de comunicar con varios nodos en modo AT, en modo API simplemente cuando envías el paquete ya estás poniendo la dirección del destino, por lo que no tienes que cambiar configuraciones.

Si vas a hacer una red de dos o tres nodos te sirve hacerlo de la forma que te indico, si tienes pensado integrar más nodos busca la librería Xbee para Arduino que te comentaba arriba, es de Rob Faludi, que tiene un libro (descargable creo) sobre el tema bastante interesante.

Para saber si están en el rango puedes entrar en modo comando enviando "+++" y enviar el comando ATAI (asociation indication), o enviar el comando ATDB (RSSI of last packet), el primero te dirá si está asociado, el segundo te dirá la potencia con la que se ha recibido el último paquete (lo cual te puede incluso dar la idea de la distancia).

Si tu objetivo final es enviar la info al PC para manejarla puedes poner un USB Dongle de Zigbee, lo que salga por la UART del Zigbee se envía al puerto del PC (lo mismo que si pones la tarjeta Arduino son micro)

Ánimo, te garantizo que cuando te pones en ello es más sencillo de lo que parece.

http://www.zigbe.net
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 06, 2011, 08:14 pm
eres un fenomeno !!
que cantidad de informacion super util
seguro que cuando me ponga sera mas sencillo de lo que parece, como tu dices, pero como hasta dnetro de 10 dias no tendre el hardware disponible pues estoy intentando documentarme al maximo ahora.

Entonces si que hay solucion para lo que yo mas temia. Tener 2 clientes (ard+xbee) y 1 servidor(ard+xbee) y que los clientes puedan hablar con el servidor y el servidor con AMBOS clientes. estupendo. no puedo esperar para probarlo.

entonces desde el cliente 1 puedo comprobar si el servidor esta en rango asi...
Code: [Select]

void setup() {                
 // initialize the digital pin as an output.
 // Pin 13 has an LED connected on most Arduino boards:
 pinMode(13, OUTPUT);    
}

void loop()
{
int servidor_enrango = 0;         // incoming serial byte
int servidor_potencia = 0;

Serial.println("+++");
Serial.println("ATAI");      //te dirá si está asociado
servidor_enrango = Serial.read();    // get incoming byte:
Serial.println("ATDB");      //te dirá la potencia con la que se ha recibido el último paquete
int servidor_potencia = Serial.read();    // get incoming byte:

if (servidor_enrango == 1)
{
 digitalWrite(13, HIGH);   // set the LED on
}
else
{
 digitalWrite(13, LOW);   // set the LED on
}
}


eso es a lo que te refieres con modo comando? porque despues de escribirlo todo no estoy seguro.


y para enviar a los dos clientes
Code: [Select]

/*
modo AT
Nodo1-> Dirección del Xbee ->1; Dirección de destino -> 3
Nodo2-> Dirección del Xbee ->2; Dirección de destino -> 3
Coordinador-> Dirección del Xbee->3; Dirección de destino -> 1 (o 2, la que prefieras)

Cualquier cosa que envie cualquier nodo irá aparecerá por la UART del coordinador, porque la dirección de destino es la tres.


Si quieres hablar desde el coordinador con el nodo1 envias al Xbee la cadena "+++" para entrar
en el modo de configuración y el comando para cambiar la dirección de destino "ATDH[Destino1]ATDL[Destino2]",
lo que envies a partir de ahora aparecerá en el nodo configurado, si quieres cambiar de nodo envías de nuevo
el comando con la dirección del otro nodo.

*/

void setup() {               
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop()
{
// enviar mensaje desde coordinador hasta cliente1
//ATDH[Destino1]ATDL[Destino2]
Serial.println("+++");
//[Destino1] = coordinador
//[Destino2] = cliente1
Serial.println("ATDH[000]ATDL[001]");
Serial.println("mensaje enviado desde coordinador hasta cliente1");
// enviar mensaje desde coordinador hasta cliente2
//ATDH[Destino1]ATDL[Destino2]
Serial.println("+++");
//[Destino1] = coordinador
//[Destino2] = cliente2
Serial.println("ATDH[000]ATDL[002]");
Serial.println("mensaje enviado desde coordinador hasta cliente2");

}

Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 07, 2011, 12:49 pm
Gixxer,

en realidad no es bien bien así...

Cada xbee tiene un identificador de 64 bits, que está escrito en dos parámetros de 32 bits, una especie de MAC address. Los datos del Xbee al que estás conectado son el SH y el SL (Serial High y Serial Low),los datos del Xbee de destino son DH y DL (Destination High y Destination Low). Destino 1 y destino2 son dos palabras de 32 bits que se refieren a un único nodo. La dirección lleva un identificador del fabricante (como las MAC ethernet), por lo que la SH o la DH siempre son la misma para cualquier Xbee, porque todas son de Digi.

He encontrado un documento en español http://www.scribd.com/doc/34935976/XBee-Guia-Usuario, olvídate de toda la parte de red, es más complejo, pero se lo gestionan las radios.

Por otro lado el firmware de Digi implementa en una patilla una salida digital para un LED, uno de los parámetros que puedes configurar es la frecuencia del led en función de si está en la red o no (creo que hay algo más o menos normalizado, medio segundo si está enganchado y es un nodo, el doble si es coordinador, etc). Poniendo un pulsador en la patilla 20 del Xbee implementas un circuito de comisioning, con el que puedes forzar la conexión a la red, etc.

La verdad es que no tengo demasiada experiencia con los modos AT, pero con los módulos y el XCTU verás que es fácil. OJO!!! porque todo lo que te estoy indicando son comando basados en las direcciones de HW, al formarse la red se les asigna una dirección de red más corta que luego se puede traducir a la de HW, hay direcciones de broadcast, etc.

En este link tienes algunos de los comandos más usuales, no te he comentado nada, pero hay uno para grabar la configuración de forma permanente ATWR, uno para salir del modo comando ATCN, etc.

http://www.zigbe.net
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 09, 2011, 01:55 pm
hola zigbe, ya que me has solucionado tantas dudas, llega la hora d ela compra.

iba a comprar esto...
XBee® Shield V1.1 by seeedstudioXBee® Shield V1.1 by seeedstudio
   $13.50    $27.00

XBee® RF Modules ZNet 2.5 - 1 mW, Chip Antenna
   $24.95    $49.90


pero me he dado cuenta que no son ZB si no ZNet, los de la pagina me dicen que se puede hacer lo mismo.
"The XBee module you asked can create a network and the topology structure is called cluster tree.
Data can be sent from one device to any device if there is a route path between them. If you have any other questions, please feel free to ask me."

pero no quiero meterme en un producto (ligeramente) distinto al que usa todo el mundo y que luego pueda darme problemas, o que el codigo q encuentre por internet no sea exactamente igual.

hago bien en olvidarme d elos ZNet y buscar los ZB en otra tienda? alguna preferencia de donde son mas economicos y tienen buen shield?

muchas gracias !!
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 09, 2011, 03:21 pm
Los ZNet y los ZB son iguales, lo único que cambia es el firmware con el que vienen cargados, y se puede pasar de uno a otro sin ningún problema.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 09, 2011, 03:45 pm
entraba justo ahora al foro para cambiar lo que habia puesto, porque he leido eso justamente en una pagina.
entonces puedo cambiar de ZB a ZNet yo mismo,no?

como es posible que haya esta diferencia de precios...
cooking-hacks
39+iva

y en seedstudio 38 dolares = 27 euros (y sn gastos de envio
http://www.seeedstudio.com/depot/index.php?main_page=advanced_search_result&search_in_description=1&zenid=e4ca78dcbb581b003f31e884025d7105&keyword=xbee&x=0&y=0&search_in_description=0 (http://www.seeedstudio.com/depot/index.php?main_page=advanced_search_result&search_in_description=1&zenid=e4ca78dcbb581b003f31e884025d7105&keyword=xbee&x=0&y=0&search_in_description=0)

en sparkfun solo el modulo (sin el shield) ya vale 40 dolares

pensaba que habia algo mas que el firmware debido a esta diferencia de precios.
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 09, 2011, 04:28 pm
Ten en cuenta que no estás comparando lo mismo:

- El de libelium lleva un XBee Series 2 con la placa incluida
- El de Seeedstudio es un XBee Pro Series 2 sin placa al igual que de Sparkfun
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: Sergegsx on Mar 09, 2011, 06:00 pm
chivas m referia a 38dolares (24.95+13.50) del modulo y el shield junto,mira el link. Por lo tanto si que seria el mismo pero mucho mas barato,no?
En este caso serian version 2.5 es decir la misma que libelum pero diferente firmware.
Cual comprarias tu?
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: chiva on Mar 09, 2011, 07:23 pm
Pues entonces en Sparkfun has mirado el modelo Pro, ya que cuesta $25.95
Los módulos cuestan en casi cualquier lado lo mismo, donde más puede cambiar es en las shields

Yo lo compraría en http://www.nkcelectronics.com
La shield del xbee es aplilable no como la de seeedstudio o la oficial de Arduino y cuesta la mitad que la de Sparkfun.

Aunque si no te importa comprar los componentes por separado tienes la placa sin más del adaptador XBee que está casi regalada
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=19_21&products_id=298

Un saludo
Title: Re: Transferir bastantes datos de forma inalambrica.
Post by: zigbe31416 on Mar 10, 2011, 12:42 am
Hola,

te confirmos que Digi tiene una política de productos un poco rara, hay diferentes referencias para el mismo HW y es actualizable el firware para convertir de uno al otro. Yo compre 5 de estos en amidata por 21€ hace un mes, pero veo que los precios han cambiado:
http://es.rs-online.com/web/search/searchBrowseAction.html?method=searchProducts&searchTerm=436-399
Resultaron ser diferentes (versión OEM), pero los actualicé el FW y sin problemas.

Si eres un poco habilidoso no te hace falta demasiada cosa para conectar al shiel que te propone chiva al Arduino, la parte del regulador de 3,3V la puedes cojer del Arduino, pasas del led y del pulsador y solo te hacen falta dos resistencia para adaptar el TX del Arduino (5V) al Xbee (3,3V).
Si te tienes que comprar los Arduinos para los nodos una muy buena opción es el Arduino FIO, 19,90€, es pequeño, no hace falta shield porque incorpora el zócalo, tiene cargador de barerías integrado, lleva un micro de bajo consumo, etc. Como contraprestación funciona a 8 MHz con el reloj interno (sin demasiada precisión), pero para este tipo de proyectos la capacidad de cálculo es más que sobrada.

Échale un ojo a esto: http://www.digi.com/pdf/chart_xbee_rf_features.pdf no te lo puedo jurar, pero la última columna es "hardware" tu buscas el S1, posiblemente sean actualizables entre ellos, ten en cuenta que cada versión del HW puede llevar las 4 antenas.

http://www.zigbe.net/