Primeros pasos en XBee, usando arduino

Para concretar la internet o la Internet de las cosas necesitamos conectar distintos equipos entre sí. Una forma muy interesante es a través de comunicación inalámbrica. Por ejemplo, usando ZigBee

 

Este es el primero de una serie de articulos para presentar un ejemplo de comunicación inalámbrica entre distintos equipos y  con posibilidad de conectar en malla.

 

Mas información después del salto

 

ZigBee es un protocolo de comunicación inalámbrica que se implementa a traves de XBee

Xbee , por su parte, son módulos de RF fabricados por Digi International que se conectan en modo punto a punto o en malla. Hay diversidad de modulos pero nosotros escogimos la Serie 2. Una discusión de los distintos tipos de módulos se encuentra en este link

Usamos un arduino Uno así que necesitamos un medio para adaptar al XBee, como es de esperar este adaptador es el XBee shield.

Para configurar un módulo XBee necesitamos un adaptador llamado explorer USB,  del cual existen varios tipos, aquí hay un ejemplo. El adaptador se conecta mediante un cable mini usb a un PC con Windows donde usaremos el programa X-CTU para leer escribir y probar la configuración de un Xbee

El objetivo de este primer artículo sobre XBee es usar 2 XBee series2, uno de ellos conectado a Arduino y el otro a un PC para recibir información. El énfasis esta puesto en la configuración de los equipos y no en la variable sensada.

Materiales

  • Arduino Uno
  • Fuente de poder 9V @ 1000mA
  • Xbee shield para arduino
  • 2 Xbee serie2
  • Explorer USB
  • Software X-CTU
  • PC con puerto USB disponible
  • Cable miniUSB a USB
  • Sensor de temperatura LM35 ( aunque puede ser de otro tipo)

En la foto 1 se muestran los elementos fundamentales de trabajo

Foto 1. Se muestra lo necesario para conectar XBee a un Arduino

Procedimiento

1.- Instalar el software X-CTU, hay información adicional en este  link  y el programa lo puedes bajar desde este link

2.- Conectar XBee al XBee Explorer USB, conectar cable a la interfaz USB disponible en el PC, como se ve en la foto

Foto 2. Se muestra la forma de conectar XBee, XBee Explorer al notebook

3.- Abrir Administrador de Dispositivo (o Device Manager): presiona Windows R, escribe devmgmt.msc y presionas enter. Expandes la sección de Puertos (COM & LPT) y anotas el número de Puerto serial que XBee esta ocupando.

Puede que necesites conectar y desconectar el XBee para notar el cambio.

En Windows 7 el XBee Explorer USB es reconocido y se auto instala, por lo que debes colocar atención cuando termine de instalar porque indica el puerto COM que fue asignado (En este ejemplo COM14).


En el Device Manager de Windows 7 el XBee Explorer se ve como una nueva puerta COM4.- Inicia la aplicación X-CTU, mas detalles sobre este programa ver en este link

5.- Selecciona la puerta serial identificada en el paso anterior y presiona el botón “Test / Query”, el resultado debe ser Ok

6.- Ir a la pestaña Modem Configuration, presionar READ

7.- En la sección FUNCTION SET elegir ZIGBEE COORDINATOR AT

8.- Click en el menú versión y selecciona la versión más alta de firmware disponible, (paciencia esta parte toma tiempo, como 10 minutos)

9.- Click en Show Defaults

10.- Cambia los siguientes valores

11.- PAN ID debe ser el mismo numero en ambos XBee

12.- Destination Address High (DH), debe ser la dirección Alta (SH) del otro XBee, normalmente 13A200

13.- Destination Address Low (DL), debe ser la dirección Baja (SL) del otro XBee.

Nota: Tanto SH como SL se encuentran impresas en la etiqueta bajo el XBee, por lo tanto puedes escribirlo con anticipación, esto se ve en la foto 3.

Foto 3. Direcciones usadas por XBee estan impresas en la parte inferior del equipo

14.- Ahora, con los valores actualizados presiona Write

15.- Cierras el X-CTU y retiras el XBee del USB explorer.

16.- En el segundo XBee sigues el procedimiento con los siguientes cambios: en el paso 7 debes elegir ZIGBEE ROUTER AT , en el paso 10 debes usar los valores correspondientes al otro módulo XBee y modificar el parametro JV a 1. Esto ultimo para asegurar que equipo intente conectarse al coordinador desde el inicio.

En Arduino puedes cargar el siguiente sketch de prueba, mas información sobre el uso del sensor en nuestro articulo anterior

// Declaración de variables
float tempC;
int tempPin = 0; // Definimos la entrada en pin A0
void setup()
{
    // Abre puerto serial y lo configura a 9600 bps
    Serial.begin(9600);
}
void loop()
{
    // Lee el valor desde el sensor
    tempC = analogRead(tempPin); 

    // Convierte el valor a temperatura
    tempC = (5.0 * tempC * 100.0)/1024.0; 

    // Envia el dato al puerto serial
    Serial.print(tempC);
    Serial.print(" grados Celsius\n");

    // Espera cinco segundo para repetir el loop
    delay(5000);
}

Ahora tienes los XBee configurados

Conectas el XBee shield al Arduino y sobre el, el modulo XBee, como se muestra en la foto 4.

Foto 4. Se muestra como se conecta arduino con Xbee shield y Xbee

 

En el lado del PC conectas el Xbee con el Explorer USB  tal como se muestra en la foto 2.

Para verificar que todo esta funcionando puedes usar el Arduino IDE o el software X-CTU. Recuerda que debes seleccionar la puerta COM correcta

Vas a empezar a recibir los datos en la pantalla del PC, recuerda que estos datos podrian ser posición, presión, distancia, presencia, luminosidad, etc.

Bibliografía

Margolis, Michael. “Arduino CookBook”,2da edición, O’Reilly. Link aquí
Faludi, Robert. “Building Wireless Sensor Networks: A practical guide to the ZigBee Mesh Networking Protocol”. Link aquí
Tutorial de XBee, aquí, consultado el 24/08/2012
Ladyada tutorial, haz click aquí, consultado el 25/08/2012.

 

 

 

 

Author: manuel

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

32 thoughts

  1. que tanto rango puede llegar a tener un xbee y si el rango fuera muy corto se puede poner como otros xbee para hacerlo repetir la información?

    1. Estimado David:

      El alcance del XBee depende del hardware Xbee propiamente tal, la antena externa y las condiciones de visibilidad de los nodos. En este link hay una tabla comparativa http://www.digi.com/xbee/ . La serie 2 que usamos nosotros tiene un alcance efectivo de 50m en zona urbana pudiendo alcanzar los 120m en zona con linea vista.

      Si requieres repetidores se puedes usar la configuración en malla, ten presente que no todos los XBee lo soportan. Por ejemplo, la serie 1 no soporta este modo de operación

  2. Hola, antes que nada que buen tutorial, aunque tengo una duda, realizo los pasos que dices tanto para la configuración de los Xbee como la conexión del LM35, cargo el programa para medir temperatura en el Arduino pero al realizar las pruebas resulta que no me envía los datos del Xbee Router al Xbee coordinador, reviso el software X-CTU y en la pestaña terminal (del Xbee Router donde esta el Arduino, el Xbee Shield y el sensor) me muestra los valores de temperatura, pero al hacer “Test/Query” no me reconoce el Xbee.

    Tu hablas de cambiar un parámetro “jv” a “1”, pero no se a que te refieres con esto.

    Te agradecería tu ayuda.

    Saludos.

    1. Quizás sea porque los las configuraciones de mis Xbee están como:
      ZNET 2.5 Coordinator AT y ZNET 2.5 Router/End Device AT???
      Ya configure el “jv” a “1” pero nada aun sigue el problema de incomunicación entre ellos, y no me reconoce el X-CTU el Xbee Router.

      Espero tu ayuda.

    2. Estimado:

      Si es lo que parece, podria haber un conflicto de puerta COM, ante todo cuando conectas un Xbee con su adaptador USB debe comunicarse con el software X-CTU, debe dar Ok al test/Query de otra forma no podrás configurar

      Como recomendacion prueba lo siguiente
      1) Revisar la conexion del sensor , si corresponde la posicion de los pines con la hoja de datos y el sketch de Arduino
      2) Cuando cargas el sketch debes desconectar las puertas del XBee
      3) Alimentar el Arduino con una fuente externa , sin usar el PC
      4) Verificar la puerta COM a que esta el XBee conectado al PC ( windows-R y devmgmt.msc abren el device manager para chequear esto)
      5) revisar que la velocidad en Baudios sea consistente en el sketch y lo que indica X-CTU

      Aun hay mas cosas que probar, puedes ver el siguiente link http://www.faludi.com/projects/common-xbee-mistakes/

      El parámetro JV lo configuras en el nodo con la función Zigbee Router AT. Contando desde arriba es el séptimo parámetro a cambiar, el valor recomendado es 1 para que el router intente comunicarse inmediatamente con un Coordinador.

      Espero que estos comentarios te sirvan, si es necesario nos envias un diagrama a contacto@internetdelascosas.cl

  3. hola, en primer lugar decir que soy bastante novato.
    Tengo un problema a la hora de acceder a traves de internet a mi arduino, me explico, Conecto mi arduino mega con la placa Ethernet al router y en red local si controlo un LED desde otro ordenador pero desde internet cuando me conecto con mi IP publica se habre una ventana pidiendome usuario y clave del router.
    ¿Me podria ayudar a resolver el problema? Gracia

    1. Amigo, esta configuración escapa al Arduino en si, y corresponde a la configuración del router.

      En el router debes dirigir la puerta tcp/ip hacia la ip de la red local que tiene asignada el Arduino, en el Arduino no debes hacer nada.

      Luego desde fuera de la red local, es decir desde internet debes acceder a la ip publica de tu router, el cual te redireccionará al Arduino.

      La forma de configurarlo depende del modelo de cada router.

      Saludos.

  4. Muy buen trabajo. Me podrías ayudar con un trabajo?.
    Estoy trabajando con un modulo xBee XSC PRO 900MHZ pero no logro comunicarme a una taza de 9200 bps efectivos. El echo es que tengo que enviar un paquete de 32 bytes cada 1 segundo… puuufff una eternidad.
    Los requerimientos son de comnicar a un equipo a 2 km de la costa, con una tasa de 13 bytes cada 10 ms ojala.

  5. Amigo tengo un problema lo conecta a mi arduino mega, pero por mas que intento nunca recibo ningun dato ya revise la programacion y esta correcta de igual manera conecte el arduino sin el xbee para ver si me esta ejecutando bien el programa y si esta todo ok, pero cuando conecto el xbee shield con mi arduino y quiero recibir datos con mi xbee coordinado conectado a la pc nunca recibo ningun dato..
    Podrias ayudarme…

    1. Los Xbee deben ser capaces de comunicar sin necesidad de un Arduino, son como puertos seriales de un PC, primero prueba que se puedan conectar y luego conecta uno al Arduino para probar su funcionamiento.

  6. Es posible configurar Xbee sin necesidad de el USB explorer, seria posible configurarlo a traves de una Arduino UNO?

    1. Estimado Christian:

      Lo que se puede hacer es configurar los XBee a traves de comandos AT, de esta manera se comportan cómo un módem… pero inalámbrico. Así no necesitas el software x-ctu y también puedes ocupar Linux.

      Saludos

      Manuel Carrasco

  7. hola, buen tuto, pero me gustaria saber si seria posible controlar el coche mediante bluetooth y de este a un samtphone y añadir una web cam ya de paso jeje, un saludo

  8. hola de nuevo y gracias por tu interes, lo que pretendo es usar un viejo robot el Roboquad, del cual no tengo el mando a distancia, y me gustaria montarle algun tipo de modulo arduino para poder controlarlo y poder quiza incluso, dar uso a alguno de sus sensores y añadirle alguno nuevo, asi como tener control remoto sobre el , a ser posible desde el smartphone.

  9. Wow! si tuviera un Roboquad también me gustaría reciclarlo. Si quieres integrar el control con un smartphone o tablet, lo que describes parece mas apropiado para Bluetooth que para XBee.

    Si puedes relajar el requerimiento y necesitas un control analogico y digital. puedes implmentar XBee directo donde no es necesario un Arduino como se muestra en este caso, http://www.faludi.com/2006/12/03/xbee-direct-io-with-adc/

    Volviendo al bluetooth, te permite una integración más natural con el teléfono o tablet, eso mas la integracion de un arduino con bluetooth en el lado del robot y una GUI en tu equipo Android. Mi recomendación es averiguar por formas de integrar con Bluetooth, especialmente con BLE, la version de baja energía (la contraparte de esto es que, he leido que no opera bien con Android pero si con Apple)

    Saludos

    Manuel Carrasco

    1. ok, gracias de nuevo, con lo que me has comentado he buscado algo de informacion y me he encontrado con el BLEduino aunque no se si ya esta a la venta ni a que precio, parece que podria usar para controlar el roboquaq, espero que los problemas con android que comentas esten solucionados en este modelo, ahora creo que el reto sera distinguir componentes dentro del robot, empezare por desmontarlo y ver que me voy encontrando aunque sin algun esquema sera muy complicado supongo.Admito cualquier tipo de ayuda, un saludo manuel.

  10. Amigos… me lleve una tremenda sorpresa al ver la URL origen … era un sitio ChiLeno… digo sorpresa pues _generalmente_ la calidad, claridad y estructura es típico de sitios gringos/indios… Los felicito… son una excelente referencia para aquellos que quieren sumergirse en este micromundo… Soy ingeniero informático y hace mucho tiempo que estoy trabajando con estos equipos (desde el RPP hasta el BBB)… gracias a ustedes conocí los “cubieboard” ( voy a importar uno para ver que tal ‘anda’ )… Slds. desde el mar…

    Posdata: el límite para las aplicaciones/soluciones es nuestra imaginación…

    1. Gracias por los comentarios, buscamos distintas tecnologías relacionadas con la Internet de las Cosas que les puedan parecer interesantes.

      Si quieres ver algún tema en especial no dudes en preguntarnos. Siguen más novedades en el futuro

      Saludos

      Manuel Carrasco
      Co-founder

  11. hola me gustaría saber como configurar mis módulos xbee pro 868, pues la configuración que muestras en el tutorial es para otros módulos distintos.
    Gracias.

    1. Jesus

      La configuracion de modulos xbee es bastante similar en todos los modelos. Debes poner atencion en cual es el modulo que actua como coordinador y configurar los demas para que envien los mensajes a este nodo.

      Saludos

  12. Lo que pretendo es comunicar un arduino y una raspberry mediante los modulos xbee pro 868. El arduino leerá unas señales analógicas y estas serán enviadas a la raspberry, la cual las mostrara enuna pantalla y en función de estas señales le enviara otras a arduino.

    1. Jesus

      Es completamente factible, pero recuerda que el software X-CTU solo corre en Windows por lo cual debes configurar los xbee en Windows primero antes de montarlos en la Raspberry Pi y en el Arduino.

      Como conectas la Rapsberry Pi con el modulo xbee?

      Saludos

  13. hola joniuz disculpa tengo algunas dudas con respecto a los modulos zigbee y algo que proponerte tendras un correo al que pueda contactarte?

  14. Saludos,

    Estoy utilizando el sensor de temperatura DHT11 y funciona correctamente con el arduino y este esta leyendo los datos de manera correcta.
    Al momento de conectar los xbee y probarlo con xctu, me manda datos de manera erronea, mostrando codigos aleatorios y extraños.
    Quisiera que el sensor trabajara con los xbee y poder observarlo en el xctu

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *