# Comunicar USB-ZigBee



## Morpheo1983 (Sep 7, 2009)

Buenos días!

    Estoy realizando un proyecto en el que quiero trabajar con ZigBee y tengo un montón de dudas que me gustaría aclarar previamente.
  Mi intención es comunicar el PC mediante USB con un modulo ZigBee (Coordinador) para que éste pueda "hablar" con algunos Dispositivos Finales. Estos dispositivos trabajarán como simples detectores/sensores, de manera que la información que envíen/reciban se podrá ver en el ordenador mediante algún programa sencillo. La duda es que he visto en algunos esquemas que puedo comunicar con el XBee a través de un conversor USB-RS232, pero no sé si esto es suficiente, o si además necesito un micro para poder realizar todas las tareas de comunicación con el PC.
  ¿Quizá otra solución sea comunicar el XBee directo con un micro que lleve el USB incorporado? Tengo muchas dudas, y no sé por dónde empezar. 

Si alguien puede aportar algo de luz lo agradeceré enormemente. Gracias y enhorabuena por la web!! 

Saludos!


----------



## jordii84 (Feb 24, 2010)

Hola Morfeo.
Yo tambien estoy interesado en hacer algo similar y me encuentro en la misma situacion que tu. ¿Has podido averiguar algo?


----------



## Beamspot (Feb 24, 2010)

Una opción más o menos lista es el Raven USB Stick de Atmel, que incorpora el micro, bootloader, transceiver ZigBee, USB y todo lo necesario para hacer una comunicación, pero me temo que sin software propietario, poco más se puede hacer. Al menos el hardware está listo y funcionando, hay librerías para ZigBee y para el USB, pero para el PC hay muy poco, pero dado la funcionalidad explicada, de todas maneras te lo tendrás que currar.

Si no voy equivocado, el XBee no sirve para tales fines.


----------



## miguelangelcede (Mar 21, 2010)

Que tal Morpheo1983 yo estoy relizando algo similar en mi tesis un coordinador conectado al computador y los demas end device que me envien informacion sobre sensores conectados a ellos pero lo que eh podido averiguar es que necesitas un pic que vaya conectado al modulo zigbee y este a su vez al computador por usb encontre el pic 18F2550





aqui se muestra la manera de conectar usb al Pc DEL OTRO LADO PODEMOS CONECTAR EL ZIGBEE USANDO TX Y RX del pic










http://www.neoteo.com/conecta-tus-proyectos-al-puerto-usb.neo
http://www.decelectronics.com/html/XBEE/XBEE.htm


Espero que sea de utilidad lo que encontre.
Sabes si modulo zigbee normal se puede unir a otro pero Zigbee PRO


----------



## Morpheo1983 (Mar 22, 2010)

Buenas tardes @miguelangelcede:

Muchas gracias por la respuesta. Pues yo utilizo un micro muy similar, el PIC18F4550 (que es el que utilizan en el ejemplo que me adjuntas). Yo tengo las dos placas realizadas: 

- La que comunicará con el PC, y que lleva el PIC18F4550 y un XBee.
- Y la placa pequeña con los 2 sensores (Temp. y luz), el PIC24F08KA101 y otro XBee. 

Por si te interesa, el PIC24F08KA101 tiene una nueva tecnología de ultra bajo consumo. Es que en mi caso la placa pequeña va alimentada con batería de 9 V, no sé cual es tu caso.
La verdad, no se exactamente si un XBee y un XBee-PRO pueden comunicar entre si, pero como las conexiones son las mismas y lo unico que cambia es el radio de alcance, entiendo que no debería de haber problema en que se comuniquen. Yo utilizaré VB 6 para comunicar Micro-PC. Cuando vaya teniendo más datos lo iré posteando.
Si encuentras información del código necesario para los XBee, te agradeceré cualquier ayuda!

Gracias @Beamspot aunque espero que si que pueda comunicar con el PIC y el XBee, me habia parecido verlo en alguna web! 

Saludos!


----------



## Beamspot (Mar 22, 2010)

Si no me falla la memoria, el motivo de la no conexión de XBee con ZigBee era que los módulos XBee no usan el protocolo ZigBee si no su propio protocolo estándar propietario. Eso no quita que se puedan reprogramar con algún firmware que sí soporte dicho estándar.

Claro que usar un micro para pasar de USB a formato desconocido para comunicarse con otro micro que hace de puente del formato desconocido (por mi) a ZigBee, pues con eso se usa un micro que haga directamente de USB a ZigBee. En mi opinión esto último es lo óptimo, y lo primero una tontería, como usar un Bluetooth que lleva un ARM para comunicar por puerto serie. Pero yo soy así de raro.


----------



## miguelangelcede (Mar 22, 2010)

Beamspot:  tienes razon voy a conectar un 18f2550 a modulo XBEE y tambien usb por medio de D+ Y D- al computador estoy usando este codigo para mi pic.

Este es el que emisor , envia una señal que se genera por medio de un pulsador y el receptor lo interpreta y enciende un led.  Pero no me funciona tengo un problemas para programar en micro code usando  MPASM no entiendo esto muy bien.
EMISOR



```
' serial out is on portc.6
' serial in is on portc.7
' a digital input is on portb.0

'set a constant with the baudmode 9600-8-n-1-true (non-inverted):
                         true9600 con 84

' a byte to send out data:
                         thisByte var byte

' set portb.0 to input:
                         input portb.0
                         ' set portd.1 to output for status light:
                         output portd.1

 configure: ' label to jump back to if configuration times out

' blink status light once on startup
                         High portd.1
                         pause 200
                         low portd.1
                         PAUSE 200

' for some reason it seems to help to send an arbitrary character first
                         ' then pause for the guard time before requesting command mode
                         serout2 portc.6, true9600, ["X"]
                         pause 1500

' put the XBee in command mode
                         serout2 portc.6, true9600, ["+++"]

' wait for a response from the XBee for 2000 ms, or start
                         ' over at the configure label if no valid response comes
                         SERIN2 portc.7, true9600, 2000, configure, [WAIT ("OK")]

' set the PAN (personal area network) ID number
                         ' this example uses 0x3330, but you'll want to choose your own 
                         ' unique hexadecimal number between 0x0 and 0xFFFE
                         serout2 portc.6, true9600, ["ATID3330,"]

' set the Destination High to 0x0
                         ' to select 16 bit addressing mode. These addresses can
                         ' be assigned and changed by sending commands from a microcontroller
                         serout2 portc.6, true9600, ["DH0,"]

' set the Destination Low (16 bit address)
                         ' this example uses 0x0 for send and 0x1 for receive but you'll
                         ' want to choose your own hexadecimal numbers between 0x0 and 0xFFFE
                         serout2 portc.6, true9600, ["DL1,"]

' exit command mode 
                         serout2 portc.6, true9600, ["CN",13]

' wait for a response from the XBee for 2000 ms, or start
                         ' over at the configure label if no valid response comes
                         SERIN2 portc.7, true9600, 2000, configure, [WAIT ("OK")]
                         
main: 

 ' read the switch:
   thisByte = portb.0

 ' convert it to a readable ASCII value, send it out the serial port:
   serout2 portc.6, true9600, [DEC thisByte]
                       

goto main

RECEPTOR

' serial out is on portc.6
' serial in is on portc.7
' a digital input is on portb.0

'set a constant with the baudmode 9600-8-n-1-true (non-inverted):
                       true9600 con 84

' set a constant for timeout while waiting for serial input
                       timeout CON 2000

' a byte to receive data:
                       inByte var byte

' set portb.1 to output:
                       OUTPUT portb.1
                       ' set portd.1 to output for status light:
                       output portd.1

 configure: ' label to jump back to if configuration times out

' blink status light once on startup
                       High portd.1
                       pause 200
                       low portd.1
                       PAUSE 200

' for some reason it seems to help to send an arbitrary character first
                       ' then pause for the guard time before requesting command mode
                       serout2 portc.6, true9600, ["X"]
                       pause 1100

' put the XBee in command mode
                       serout2 portc.6, true9600, ["+++"]

' wait for a response from the XBee for 2000 ms, or start
                       ' over at the configure label if no valid response comes
                       SERIN2 portc.7, true9600, timeout, configure, [WAIT ("OK")]

' set the PAN (personal area network) ID number
                       ' this example uses 0x3330, but you'll want to choose your own 
                       ' unique hexadecimal number between 0x0 and 0xFFFE
                       serout2 portc.6, true9600, ["ATID3330,"]

' set the MY (16 bit address)
                       ' this example uses 0x0 for send and 0x1 for receive but you'll
                       ' want to choose your own hexadecimal numbers between 0x0 and 0xFFFE
                       serout2 portc.6, true9600, ["MY1,"]

' exit command mode 
                       serout2 portc.6, true9600, ["CN",13]

' wait for a response from the XBee for 2000 ms, or start
                       ' over at the configure label if no valid response comes
                       SERIN2 portc.7, true9600, timeout, configure, [WAIT ("OK")]
                       
main: 

 ' get any incoming data:
   SERIN2 portc.7, true9600, timeout, nodata, [DEC inByte]
   ' light the LED if a 1 has been received
   if inByte == 1 THEN
   HIGH portb.1
   ' douse the LED if anything else was received 
   ELSE
   LOW portb.1
   ENDIF
   
   nodata: ' label to jump to if no data was received
   
goto main
```


----------



## GusPS (Mar 7, 2012)

Hola a todos,

Espero que siga activo este tema a pesar de los más de 6 meses de inactividad.

Actualmente me encuentro desarrollando como hobby unos módulos zigbee con AVR y USB.

En la PC, he desarrollado una aplicacioncita de consola en C# Mono, que vía libusb se conecta al AVR. En el AVR tengo la librería V-USB que se encarga de todo lo relacionado al USB. También le he agregado un bootloader con el source de USBasp para que la reprogramación sea más simple. Al AVR, vía ISP, tengo conectada una Antena ZigBee que solo se encarga de la capa PHY.
De esta forma estaría armando lo que creo sería el coordinador. Dado que el stack de Freescale, para el armado del MAC, me pareció un poco "pesado" en tamaño y que no estaba hecho para AVR, buscando encontré a Anteeo Systems que desarrollaron código abierto AVR para ZigBee.
Basándome en este código, implementé el modo Packet para envío y recepción, (la gente de Anteeo implementó solamente el modo Stream) de forma tal de tener al MCU más liberado.

En los nodos, armados solo con la antena y el AVR, le he metido un bootloader de no más de 4k que me permiten reprogramar vía ZigBee al nodo en sí.

Todo esto es aún un "work in progress". Uno de los temas flojos es que el protocolo usado es propietario, un invento mio, y me gustaría poder adaptarlo a algo más estandar, para así poder interconectar a futuro módulos zigbee ya existentes adquiridos en comercios o tiendas online. He buscado información sobre cómo debería ser un paquete típico zigbee pero no lo encontrado con claridad.

Alguien tiene documentación sobre cual es el formato de un paquete a partir de la capa MAC y qué contiene cada una de las partes que lo compone y cuando se lo usa?

Por otro lado, si a alguien le interesa, puedo publicar el código en algún sitio público, etc. Me avisan si es que aún está activo este post.


----------



## COARITES (Sep 27, 2012)

Aqui algunas pagina que les pueden servir.

http://www.tecbolivia.com/index.php...category_id=14&option=com_virtuemart&Itemid=4

http://wiring.org.co/learning/tutorials/bluetooth/

http://translate.google.com.bo/tran...a=X&ei=gFZkUO6tIpHO8wS_iIGwCg&ved=0CDsQ7gEwAw


----------

