Fuente www.blogelectronica.com
Desarrollando con Zigbee. Primera entrega.
Hoy voy a hablar un poco de Zigbee desde un punto totalmente practico. Hay mucha gente que sabe lo que es Zigbee, incluso un poco a nivel teórico, pero muchos tienen una idea un tanto difusa de cómo llevarlo a la practica. Voy a poner un par de articulos de este tema en dos entregas y espero que quien tenga actualmente dudas o simplemente no tenga claro cómo llevarlo a la practica, tras la lectura, tenga totalmente claro qua hacer para montar un sistema Zigbee.
Como digo es totalmente practico, si no sabes lo que es Zigbee te aconsejo que leas unos articulillos teóricos que puse ya hace tiempo en el blog sobre Zigbee y luego continues la lectura a partir de aqui.
Voy a utilizar un kit de desarrollo de Zigbee de MaxStream (distribuido en España por Matrix). Los módulos que vienen en este Kit de desarrollo son módulos llamados XBee Serie2 (con la serie 2 podemos hacer redes mesh, con la serie 1 no. Ya veremos en otra ocasión cuando elegir Xbee serie1 y cuando Xbee serie2, pero te avanzo que para trabajar con Zigbee necesitas la serie 2).
Os pongo un pequeño video (que he hecho de forma rapida) con lo que viene en un kit de desarrollo Zigbee de Maxstream, pues asto es mejor verlo que leerlo:
http://www.youtube.com/watch?v=ayXMEsPW6zY
Creo que la mejor forma de entender cómo utilizar estos módulos Zigbee va a ser a travas del matodo pregunta / respuesta. Ahi van:
1.- Estoy pensando en hacer una aplicación RF y barajo usar Zigbee, pero me han dicho que es muy complicado, ¿es asi?
En absoluto. La verdad es que es bastante sencillo utilizando los módulos de Maxstream. Toda la complejidad de las tramas Zigbee recae sobre el módulo. To, simplemente enviando unos comandos AT via serie puedes crear complejas redes zigbee y comunicar tus equipos a travas de ellas (me atreveria a decir que casi sin saber de Zigbee). Personalmente hace ya mucho tiempo proba un kit de desarrollo Zigbee de Chipcon. Utilizar aquello si que era complicado, nada que ver con esto, palabra.
2.- ¿Qua alcance tienen estos modulitos?
Pues como siempre depende. Dependera de si utilizas un módulo con antena chip integrada, o con antena dipolo integrada o con conector UFL para antena externa, de si tienes obstaculos o no, de si esta pegado al suelo o a cierta altura (fresnel), íƒÆ’í‚¢íƒÂ¢í¢â‚¬Å¡í‚¬íƒâ€ší‚¦ Como maximo, en un entorno urbano con obstaculos pueden llegar hasta unos 40m, y 120m si no hay obstaculos, pero como digo, depende de muchas variables, como con cualquier dispositivo RF.
3.- Bueno, ya he visto el kit desarrollo en el video, muy bonito, pero ¿cómo me comunico con estos módulos?
Pues la forma de comunicarte con estos modulitos es a travas de una comunicación serie por una uart. Puedes comunicarte de dos maneras, con comandos AT (modo transparente) o modo API (modo no transparente). Este modo de funcionamiento se configura con un parametro de configuración.
4.- ¿Y qua diferencia hay entre el modo de funcionamiento por comandos AT y API?
En modo Comandos AT (transparente) puedes configurar el módulo a travas de simples comandos AT. Ejemplo, imaginemos que queremos enviar datos desde nuestro módulo Zigbee A a un módulo Zigbee B con dirección X. En modo transparente, enviamos el comando +++ por el puerto serie del módulo A y el módulo saldra de modo datos para entrar en modo comandos. Establecemos entonces un parametro con la dirección destino X del módulo B y salimos del modo comandos al modo datos. A partir de entonces, todos los datos que enviemos por el puerto serie del módulo A saldran por el puerto serie del módulo B.
El modo API es algo mas complicado. No existe el modo datos y modo comandos. Se utiliza un protocolo, es decir, nos comunicamos con los módulos mediante unas tramas con su cabecera, datos, final de trama, íƒÆ’í‚¢íƒÂ¢í¢â‚¬Å¡í‚¬íƒâ€ší‚¦ es decir, con un protocolo.
5.- Entonces, si el modo API es mas complicado ¿para qua sirve?
Con el modo API tendremos mas control. Es decir, si enviamos una trama de A a B y asta no llega, obtendremos un código de error. Si necesitamos enviar datos a distintos equipos de la red (distintas direcciones destino), si utilizamos el modo Comandos AT, tendremos que estar continuamente saliendo a modo comandos, cambiar la dirección destino, volver a modo datos y enviar los datos, asi continuamente. Muy lento. En modo API la dirección destino forma parte de la trama, por lo que es mucho mas rapido comunicarnos con varios equipos.
6.- ¿Todos los módulos son iguales? Es decir, en el video has dicho que hay 5 módulos Zigbee, pero no si son Coordinadores, Routers o End devices ¿son distintos equipos o se pueden configurar para que actoen de un modo u otro?
El kit lo componen 1 Coordinador y 4 Routers / End devices. La diferencia hay que verla desde el punto de vista del firmware. El firmware del módulo que hace de Coordinador es distinto al firmware de los Routers o de los End devices. El fimware de los módulos Routers o End devices si que es el mismo.
7.- Y si el firmware de un Router y de un End device es el mismo, ¿cómo puedo hacer que un módulo se comporte de una manera u otra?
Pues con un parametro de configuración. Si configuras al módulo para bajo consumo, esto es, para que duerma y se despierte cada X segundos, el módulo se convierte automaticamente en End device, en cambio si siempre esta online, el módulo actoa como Router.
8.- ¿Y en base a qua decido configurar un equipo como Router o como End device?
Si tus equipos van a funcionar con pilas, y quieres que te duren, deberas configurarlos como End device, de esa manera los equipos pueden trabajar en modo Sleep (bajo consumo). Si algunos de tus equipos pueden obtener la alimentación de la red, configoralos como Routers.
9.- Hay una cosa que no entiendo. Si configuro un módulo como End device, es decir, si lo configuro para que entre en modo sleep y me quiero comunicar con al desde otro dispositivo de la red Zigbee, si esta durmiendo, no va a hacer caso a las tramas que le envie, ¿no?
Un End device siempre esta asociado a un Router (o a un Coordinador, pero recordemos que tras iniciar la red se comporta como un Router). Un End device no hace nada mientras esta durmiendo, pero cuando despierta hace un polling al Router al cual esta asociado para saber si hay algo para al. Y es que los Routers almacenan temporalmente en una tabla interna las tramas que le llegan a sus dispositivos asociados, de esa manera cuando un End device asociado a un determinado Router despierta y le pregunta si hay algo para al, el Router le enviara las tramas que tenga almacenadas para al.
10.- He oido que en una red Zigbee es necesario un coordinador. Si por un motivo se estropea o se apaga, ¿se cae la red zigbee?
No. El Coordinador sólo es necesario en el arranque de la red zigbee. En el arranque de la red se encarga de seleccionar qua canal RF utilizar de los 17 disponibles (mirando en el espacio radioelactrico en qua canal hay menor densidad de energia y por tanto menos interferencias) y se encarga de escoger el PANID (identificador) de la red. Cuando ya ha hecho esta tarea se comporta igual que un Router.
11.- Pero yo no quiero que escoja de manera aleatória un PANID. ¿Se puede fijar uno?
Efectivamente, puedes fijar uno. Si no lo especificas escogera uno al azar.
12.- Claro, si fijo un PANID evitara que un determinado dispositivo Zigbee en vez de conectarse a mi red se conecte a otra red Zigbee vecina ¿es asi?
Si. Si configuras todos los equipos con un parametro PANID determinado evitaras que tu equipo se conecte a otra red cercana con un PANID distinto. Si no especificas un PANID, al encender un equipo, ya sea un Router o un End device, se conectaria a la primera red Zigbee que encuentre.
13.- Yo no quiero que puedan asociarse a mi red mas dispositivos una vez formada. ¿Puedo evitarlo?
Si. Hay un comando que puedes enviar a los módulos que hacen de Routers con el cual puedes definir un tiempo en el cual permites asociaciones a la red. Pasado ese tiempo la red íƒÆ’í‚¢íƒÂ¢í¢â‚¬Å¡í‚¬íƒâ€¦í¢â‚¬Å“se cierraíƒÆ’í‚¢íƒÂ¢í¢â‚¬Å¡í‚¬íƒâ€ší‚Â.
14.- ¿Y luego ya no podra asociar nunca mas dispositivos a mi red?
No, a menos que modifiques ese parametro del Router al cual quieres asociarlo.
15.- Y si se cae o se estropea un Coordinador de red y queremos adjuntar a la red un nuevo dispositivo ¿no podremos, verdad?, pues es el Coordinador quien da las direcciones de red a los nuevos dispositivos que se quieran adjuntar.
No es el Coordinador quien da las direcciones de red, sino los Routers. Es decir, si se cae el Coordinador si se podra adjuntar un equipo a la red sin problemas.
16.- En una red Zigbee, si quiero comunicar un dispositivo A con un dispositivo B, yo no me tengo que preocupar de la ruta ¿no? Creo que es la propia red quien se encarga de buscar la ruta óptima. ¿Es el Coordinador quien se encarga de esto?
Que no. El Coordinador sólo se encarga de lo que pone en el punto 10). De encontrar la ruta óptima se encargan los Routers. Efectivamente to no te tienes que preocupar de indicar la ruta, se encarga la propia red.
Bueno, espero que os haya resultado interesante, otro dia continoo (que hoy es nochebuena y hay que ir a comprar para la cena).
mas adelante veremos algunas cuestiones mas que me quedan pendientes y la aplicación X-CTU de Maxstream, que es como una especie de entrenador, similar a los entrenadores que habais visto en blogElectronica de Siemens o de Coronis, asi podrais ver de forma practica cómo funcionan estos dispositivos.
PARTE 2
Buenas a todos. Ante todo feliz nuevo año 2008. Hace unos dias publiqua la primera parte de un articulo practico sobre Zigbee, hoy veremos la segunda. En esta ocasión veremos el programita, llamamosle entrenador, que viene con el kit de desarrollo de Maxstream. Un software llamado X-CTU.
Pero antes, vamos a acabar de ver unas pocas preguntas / respuestas que el otro dia, para no extenderme, no puse.
17.- He oido que Zigbee maneja direcciones de 16bits y 64bits. ¿Eso es asi?
Cada módulo Zigbee, al igual que ocurre con las direcciones MAC de los dispositivos ethernet, tiene una dirección onica. En el caso de los modulitos Zigbee cada uno de ellos tiene una dirección onica de 64bits que viene grabada de fabrica. Por otro lado, la red Zigbee, utiliza para sus algoritmos de routeados las direcciones de 16 bits. Cada vez que un dispositivo se asocia a una red Zigbee, el Router padre al cual se asocia le asigna una dirección onica en toda la red de 16bits. Por eso el nomero maximo teórico de elementos que puede haber en una red Zigbee es de 2^16 = 65535, que es el nº maximo de direcciones de red que se pueden asignar.
18.- Y entonces, si tenemos direcciones de 16 y 64 bits, ¿cual he de utilizar con los modulos de Maxstream? porque ademas las direcciones de 16bits no son fijas, es decir, en caso de rehacerse la red astas pueden cambiar ¿no? Que lio íƒÆ’í‚¢íƒÂ¢í¢â‚¬Å¡í‚¬íƒâ€ší‚¦
Si trabajas con comandos AT, las direcciones que debes utilizar son las de 64bits, es decir, tu con los comandos ATDH y ATDL estableceras la dirección destino (los 4 bytes altos y los 4 bytes bajos) del dispositivo al que quieres enviar la información. El módulo internamente ya se encargara de descubrir, si es que no la tiene almacenada en una tabla interna temporal de una transmisión previa, cual es la dirección de 16bits que tiene el dispositivo al que pretende enviar información. Para ello envia un broadcast a la red. Si utilizas el modo API puedes utilizar tambian las direcciones de 64 bits, pero si quieres, puedes indicarle tambian la dirección de red de 16bits, ya que por ejemplo, puedes tenerlas almacenadas en la memoria del micro con el que controlas el módulo, de esa manera, ganaras en velocidad.
Bueno, ahora os pondra un pequeño video que he hecho para que veais el software X-CTU. Para ello he utilizado dos modulitos, un coordinador y un router. Si en el video del anticulo antenior no pudisteis apreciar bien los modulitos, podais hacer clic en la imagen siguiente y la verais ampliada:
Y aqui os pongo el video en formato flash. Haz clic en la imagen para visualizarlo:















Citar

