Hola de nuevo, como siempre me excuso, me gustaría poder escribir más, pero no tengo tiempo… simplemente tengo que elegir.
Últimamente me cuestionaba porqué este blog se llama http://www.zigbe.net/ si estábamos haciendo sensores basados en Ethernet, entonces me planteé añadir sensores Zigbee a la solución que habíamos construido, con el mismo principio de sencillez, el Nodo analiza y almacena la información y el Nagios, o la web la extrae.
Si recordáis estábamos utilizando una placa XBoard de DF Robot, que contiene un zócalo para Xbee, por otro lado tenemos los nodos bMotesLTC construidos, que son capaces de operar el modo sleep y de enviar una lectura de forma periódica a la red. En este caso el reto está en como declarar los sensores para que el proceso de dar de alta no sea complicado y se pueden añadir nodos de una forma sencilla. después de algunos días tengo la solución funcionando, aunque tengo que pulir cosas para conseguir meterlo todo en los 30K del Arduino.
La filosofía que he utilizado es muy sencilla:
- En el bMotesETH ponemos una radio Xbee funcionando como coordinador API y a la que permitimos que se enganche cualquier nodo.
- Configuramos los bMotesLTH para que envíen las lecturas de sus puertos de forma periódica a la red y duerman el resto del tiempo.
- Hacemos las siguientes «structs» en el programa del Arduino: 1.- Tipos,contiene el tipo de sensor, el nomber del parmametro, las unidades y los umbrales; 2.- Nodos contiene la dirección de cada nodo y un nombre configurable; 3.- Canales, contiene el nodo al que corresponde, el tipo al que corresponde y el valor del sensor leido.
A partir de este punto el coordinador lee mensajes, si son de los que nos interesan va rellenado las listas, la de los nodos con las direcciones y las de los canales con los valores, a cada canal se asigna un tipo, de esta forma podemos detectar los sensores, los canales y representarlos de forma ordenada con una estructura flexible y económica en memoria.
Las primeras pruebas funcionan muy bien, enciendes un nodo, e engancha a la red, envía las lecturas y los sensores van apareciendo mágicamente en el interfaz web del bMotesETH,el Nagios los empieza a leer, etc.
Sigo peleando con el espacio de memoria de programa, el programa del Arduino es más pesado, pero hay más cosas que se resuelven con bucles, por lo que espero que al final pueda caber.
lamentablemente son muchas líneas de código y no resulta fácil depurar con Arduino cuando estás cerca del límite de memoria, añadir la librería NSS para depurar provoca que se ocupe todavía más espacio. Una alternativa sería utilizar un Arduino Mega, ir depurando el código sin demasiados problemas de espacio y después portarlo a un Arduino duemillanove o al XBoard, pero la tarjeta de red que tengo no es compatible con el Mega, una pena.
Os dejo una foto que muestra el caos en el entorno de pruebas…
Un montón de problemas, especialmete para alimentar la Xbee shield cuando tienes una Shield Ethernet. Pero funciona…