Android Conexión Bluetooth con ATXMEGA32A4 (Windows)

by

En esta página se explica el desarrollo de un proyecto que consiste en hacer la conexión por medio de Bluetooth entre un celular Samsung Galaxy Mini con Android OS y un microcontrolador Atmel ATXMEGA32A4. No se explicarán conceptos básicos de programación en Android pues ya se ha explicado algo de esto en otro tutorial (ver tutorial). Si aún no ha realizado los dos tutoriales previos para desarrollar aplicaciones en Android se aconseja que visite este tutorial para configurar el entorno de desarrollo, y luego este para que realice su primera aplicación.

= Aplicación en Android =

En esta sección explicaré los pasos que se siguieron para realizar la aplicación en Android. Lo haré modo tutorial de tal manera que si es de su interés, lo pueda replicar fácilmente. El código no será explicado a profundidad debido a que este es una compilación de códigos de 3 proyectos diferentes encontrados en la web (todo es software libre), siendo uno de estos el de la aplicación BlueTerm. A partir de estos códigos se hizo la inicialización del Bluetooth y la conexión con el dispositivo, procesos que no vale la pena explicar (son métodos complejos e inicializaciones engorrosas). Si desea descargar el proyecto lo puede en este enlace [[media:ConexionBluetooth.zip | ConexionBluetooth]]. Al terminar la descarga descomprima el archivo en una carpeta que pueda encontrar fácilmente. Ahora abra Eclipse Indigo y siga las siguientes instrucciones. Haga clic en File > Import…

Ahora seleccione la opción Existing Projects into Workspace y haga clic en Next.

Haga clic ahora en Browse y navegue hasta la carpeta donde descomprimió el .zip que acaba de descargar. Encuentre la carpeta que descomprimió y selecciónela. Tenga precaución en no seleccionar los archivos internos de esta misma. Haga clic en aceptar. La siguiente imagen muestra la manera en la que debe hacerlo.

Si no ha tenido problemas en el paso anterior debe aparecerle lo siguiente. Si le aparece haga clic en Finish.

En este momento ya tiene el proyecto en la vista Package Explorer de Eclipse como lo muestra la siguiente imagen.

Ejecute la aplicación. Si aún no sabe hacerlo es necesario que lea los tutoriales que se mencionaron al principio de esta página. Lo que debe ver al hacer la ejecución se muestra en la siguiente imagen. El texto debajo de los botones verdes y rojo indica que el dispositivo no soporta Bluetooth dado que es un simulador, sin embargo en la aplicación real no se muestra esto. Puede hacer clic en cualquiera de los botones (estos simulan LEDs) y verá que cambian de color al hacer clic sobre estos, simulando ON/OFF.

Ahora que sabe cómo se ve la aplicación en el AVD (se ve mucho mejor en el dispositivo real) puede dar un vistazo al código. En primer lugar, es necesario editar el archivo AndroidManifest.xml para que el celular permita usar el bluetooth en la aplicación. Para esto abra el archivo mencionado como se muestra a continuación.

La siguiente imagen ilustra las dos líneas de código que deben escribirse con el fin de permitir a la aplicación usar la conexión por bluetooth.

Ahora abra el archivo main.xml (ya debe saber para que funciona este archivo y donde encontrarlo) y se dará cuenta que hay nuevos componentes como ToggleButton o EditText. Si no entiende que es LinearLayout debe leer los tutoriales que se mencionan al principio de esta página. Puede notar que entre las propiedades de algunos ToggleButton hay una que se llama android:background. Para el botón rojo esta propiedad tiene un valor de “@drawable/android_button_red”, tal como lo muestra la siguiente imagen.

Esto se hace para hacer botones personalizados. En este caso se quería que al oprimir el botón rojo, este cambiar a un rojo más claro, y al oprimirlo de nuevo este se oscureciera de nuevo. Para hacer esto fue necesario hacer un botón personalizado que tuviera estos dos estados. El archivo en el cual está descrito el botón, como ya lo dedujo, se llama android_button_red. Lo invito a que navegue por las carpetas hasta que encuentre un archivo con este nombre y extensión .xml. En esta misma carpeta se encuentran las imágenes necesarias para el proyecto. Por lo tanto se RECOMIENDA siempre hacer una carpeta (en este caso “drawable”) en la cual sitúe las imágenes y los botones personalizados, entre otros archivos necesarios para construir la interfaz de usuario. Finalmente resta analizar un poco el código fuente y sus principales características. En este punto es necesario mencionar que la comunicación entre el celular y el microcontrolador se hace serial. Si se está preguntando cómo hacer esto si la comunicación es vía bluetooth, la siguiente sección le aclarará su duda. Por lo pronto tenga en cuenta que los comandos que envía el celular son serial, es decir, si envía un “1” entonces el microcontrolador lo recibirá por medio de comunicación serial como “1”. Cuando desee adecuar esta aplicación a su desarrollo en particular puede modificar directamente las funciones para enviar y recibir datos. Por ejemplo, al oprimir el botón rojo se llama el método onClickListener manejarBoton4 como lo muestra la siguiente imagen.

Simplemente cambie la letra que desee enviar, o si desea enviar más letras lo puede hacer también. Si desea hacer mas botones y enviar datos con cada uno de los botones lo puede hacer siguiendo el mismo esquema hecho para manejarBoton4.

= Aplicación en microcontrolador =

El microcontrolador utilizado en este proyecto es el ATXMEGA32A4 de 44 pines, 32KB de Flash de empaque TQFP. Los perifericos que se utilizaron para hacer la aplicación interconectada con el celular fueron GPIO y UART. Se utilizaron 2 interrupciones para manejar los eventos de llegada de datos seriales y al oprimir el botón. El software utilizado es AVR Studio y se programó en C utilizando el compilador WinAVR. Si desea descargar el proyecto lo puede hacer haciendo clic este enlace [[media:Bluetooth.zip|Bluetooth.zip]]

= Módulo Bluetooth RN-42 =

Como ya se dijo previamente, la comunicación entre el microcontrolador y el celular se hace vía serial pero usando como medio de transmisión la conexión Bluetooth. Por lo tanto, es necesaria una interfaz entre estos dos dispositivos que pueda convertir la señal recibida de bluetooth a una señal serial que el microcontrolador pueda entender. En este proyecto se usó un módulo conversor Bluetooth – Serial llamado RN-42 Class 2 Bluetooth Module. Este se muestra en la siguiente imagen.



La conexión es realmente sencilla. Para explicar esta observe la distribución de pines en la siguiente imagen. Polarice el dispositivo con 3.3V entre los pines GND y VCC. Conecte entre sí los pines CTS-I y RTS-O pues no se va a hacer control de flujo en esta aplicación usando estos pines. Finalmente quedan dos pines disponibles RX-I y TX-O por los cuales se transmite la información serial. Si lo desea conectar a un microcontrolador conecte RX-I del RN-42 al pin TX del micro, y TX-O al pin RX del micro.



Tenga en cuenta que este módulo viene programado para hacer comunicación serial a una tasa de 115200 baudios, por lo tanto tendrá que configurarlo. Se recomienda hacer esta configuración vía bluetooth ya sea desde el PC (mucho mejor si lo hace así) o desde el mismo celular con el cual trabajará (mucho mas engorroso hacerlo así). Se recomienda visitar este link Bluetooth-RN-UM.pdf para aprender a configurar este módulo pues hay muchos comandos que pueden ser útiles para su aplicación.

= Demostración =

El resultado final del proyecto se muestra en el siguiente video.

jYiXbDQ4BLs