jueves, 10 de marzo de 2011

Arduino programación wireless con Xbee oficial. Primera parte.

El objetivo de esta serie de posts es presentar un sketch para programar remotamente un Arduino utilizando los shields Xbee "oficiales".
En su momento me sorprendió no encontrar en la web una solución para esta funcionalidad. La encontré con los Xbee shields de Adafruit y de SparkFun, pero no para los Xbee shield oficial de Arduino. Finalmente desistí de seguir buscando, y me puse manos a la obra.
El proyecto consiste en lo siguiente:

1. Objetivo
Tenemos dos Arduinos con shields Xbee oficiales de Libelium, con módulos del tipo S1. A uno lo llamo Master y al otro Slave. El objetivo es programar desde el Master, remotamente, el Arduino Slave.

2. Herramientas disponibles
Esta funcionalidad está ampliamente comentada en la web para los shields de Adafruit y de Sparkfun. En ambas implementaciones utilizan la señal de Ready to Send (RTS) para resetear remotamente el Arduino Slave y cargar durante el arranque de su bootloader la aplicación por el puerto serie. De esta forma estamos simulando el serial bootloader pero sustituyendo el puerto serie-USB convencional del Arduino, por un puerto serie "virtual" a través del modulo Xbee.
A grandes trazos la solución de Adafruit tiene una serie de potenciales problemas:
- tenemos que tener el módulo Xbee que proporciona Adafruit o Sparkfun, que incorpora la posibilidad de conectar un I/O del modulo Xbee al reset de Arduino;
- la comunicación vía radio no es robusta, ruidos, mala recepción, ... puede provocar que finalmente no grabemos la aplicación correctamente en el Arduino Slave.

Sparkfun lo mejoró creando un bootloader que implementaba un control de errores en la comunicación.  A través de un programa software en PC se envía el programa binario en paquetes, y el bootloader del Slave, comprueba que el CRC es correcto. Si el paquete recibido no tiene el CRC correcto solicita que se le reenvie el paquete de nuevo. De esta forma la comunicación se hace más robusta.

Me decanto por la opción de Sparkfun, aprovechando el software (Screamer) para fragmentar el fichero hex a enviar. La extensión de la compilación de un programa tiene típicamente la extensión hex. Es el fichero binario, que se graba en la memoria Flash del microcontrolador.  No es fácil encontrar el fichero hex después de la compilación en el entorno de Arduino. Las instrucciones para encontrarlo están aquí.

Utilizo el bootloader diseñado por Sparkfun para el Arduino Slave, incorporando de esa forma, el cálculo del CRC y los mensajes de conformidad.

En siguientes posts sigo con la historia.

Hasta pronto.

No hay comentarios:

Publicar un comentario