Hoy voy a hablar un poco de Zigbee desde un punto totalmente práctico. 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 práctica. Voy a poner un par de artículos de este tema en dos entregas y espero que quien tenga actualmente dudas o simplemente no tenga claro cómo llevarlo a la práctica, tras la lectura, tenga totalmente claro qué hacer para montar un sistema Zigbee.
Como digo es totalmente práctico, 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 aquí.
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 vídeo (que he hecho de forma rápida) con lo que viene en un kit de desarrollo Zigbee de Maxstream, pues ésto es mejor verlo que leerlo
:
Creo que la mejor forma de entender cómo utilizar estos módulos Zigbee va a ser a través del método pregunta / respuesta. Ahí van:
1.- Estoy pensando en hacer una aplicación RF y barajo usar Zigbee, pero me han dicho que es muy complicado, ¿es así?
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. Tú, simplemente enviando unos comandos AT vía serie puedes crear complejas redes zigbee y comunicar tus equipos a través de ellas (me atrevería a decir que casi sin saber de Zigbee). Personalmente hace ya mucho tiempo probé un kit de desarrollo Zigbee de Chipcon. Utilizar aquello sí que era complicado
, nada que ver con esto, palabra.
2.- ¿Qué alcance tienen estos modulitos?
Pues como siempre depende. Dependerá 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 obstáculos o no, de si está pegado al suelo o a cierta altura (fresnel), … Como máximo, en un entorno urbano con obstáculos pueden llegar hasta unos 40m, y 120m si no hay obstáculos, pero como digo, depende de muchas variables, como con cualquier dispositivo RF.
3.- Bueno, ya he visto el kit desarrollo en el vídeo, muy bonito, pero ¿cómo me comunico con estos módulos?
Pues la forma de comunicarte con estos modulitos es a través 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 parámetro de configuración.
4.- ¿Y qué diferencia hay entre el modo de funcionamiento por comandos AT y API?
En modo Comandos AT (transparente) puedes configurar el módulo a través 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 saldrá de modo datos para entrar en modo comandos. Establecemos entonces un parámetro 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 saldrán por el puerto serie del módulo B.
El modo API es algo más 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 más complicado ¿para qué sirve?
Con el modo API tendremos más control. Es decir, si enviamos una trama de A a B y ésta 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, así continuamente. Muy lento. En modo API la dirección destino forma parte de la trama, por lo que es mucho más rápido comunicarnos con varios equipos.
6.- ¿Todos los módulos son iguales? Es decir, en el vídeo 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 actúen 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 sí 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 parámetro 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 automáticamente en End device, en cambio si siempre está online, el módulo actúa como Router.
8.- ¿Y en base a qué decido configurar un equipo como Router o como End device?
Si tus equipos van a funcionar con pilas, y quieres que te duren, deberás 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, configúralos 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 él desde otro dispositivo de la red Zigbee, si está durmiendo, no va a hacer caso a las tramas que le envíe, ¿no?
Un End device siempre está 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 está durmiendo, pero cuando despierta hace un polling al Router al cual está asociado para saber si hay algo para él. 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 él, el Router le enviará las tramas que tenga almacenadas para él.
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 qué canal RF utilizar de los 17 disponibles (mirando en el espacio radioeléctrico en qué canal hay menor densidad de energía 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 escogerá uno al azar.
12.- Claro, si fijo un PANID evitaré que un determinado dispositivo Zigbee en vez de conectarse a mi red se conecte a otra red Zigbee vecina ¿es así?
Sí. Si configuras todos los equipos con un parámetro PANID determinado evitarás 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 conectaría a la primera red Zigbee que encuentre.
13.- Yo no quiero que puedan asociarse a mi red más dispositivos una vez formada. ¿Puedo evitarlo?
Sí. 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 podrá asociar nunca más dispositivos a mi red?
No, a menos que modifiques ese parámetro 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 sí se podrá 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 tú no te tienes que preocupar de indicar la ruta, se encarga la propia red.
Bueno, espero que os haya resultado interesante, otro día continúo (que hoy es nochebuena y hay que ir a comprar para la cena
).
Más adelante veremos algunas cuestiones más que me quedan pendientes y la aplicación X-CTU de Maxstream, que es como una especie de entrenador, similar a los entrenadores que habéis visto en blogElectronica de Siemens o de Coronis, así podréis ver de forma práctica cómo funcionan estos dispositivos.