Transferir bastantes datos de forma inalambrica.

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)

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

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.

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.

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

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 !!!

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

Tambien puedes usar el 24L01 de Nordic semiconductor, trabaja en 2,4Ghz

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

Code
http://innerqube.com/?p=151

y como no en el playground
http://www.arduino.cc/playground/InterfacingWithHardware/Nrf2401

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 !!!

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/

zigbe31416:
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.

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®-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?

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

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®-rf-modules-znet-25-1-mw-chip-antenna-p-226.html?cPath=139_142#productReview
http://www.seeedstudio.com/depot/xbee®-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.

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....

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

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

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");
ZigBee.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

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

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?

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.