1. Introducción:

En esta guía mostraremos cómo conectar Arduino con un teléfono móvil Android utilizando la tecnología Bluetooth .

EtiquetasTag:

Arduino, Bluetooth, Android

Prerrequistos:

● Arduino básico.

Documentos y referencias:

● SPP Bluetooth Modules: http://wiki.pinguino.cc/index.php/SPP_Bluetooth_Modules

● JNHuaMao Bluetooth V 2.1 Module Datasheet: http://www.seeedstudio.com/wiki/images/e/ef/Bluetooth_en2.pdf

● Repositorio del proyecto en github: https://github.com/makespacemadrid/SerialBluetooth

Herramientas:

● IDE de Arduino.

● Eclipse con ADT instalado (Android Development Toolkit).

Piezas:

● Arduino Uno (funciona con cualquier placa Arduino).

● Módulo Bluetooth HC-06 montado sobre placa: http://www.dx.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299#.

● Teléfono Android con Bluetooth

2. Background

Arduino es una plataforma que nos permite conectar y controlar todo tipo de hardware. Cuando queremos montar aplicaciones más potentes, nos surge la necesidad de conectar estos dispositivos a Internet para poder controlarlos o monitorizarlos en remoto. La forma más sencilla de hacerlo es a través de una conexión serie a través de un ordenador. Para ello podemos utilizar el mismo cable USB que empleamos para descargar los programas ("sketches") a Arduino. SIn embargo, este procedimiento tiene dos inconvenientes: necesitamos que el dispositivo esté físicamente cerca de un ordenador y además, el ordenador tiene que estar encendido y conectado a internet. Otra opción es añadir al Arduino una placa ("shield") Ethernet que nos permite conectar el Arduino directamente a un router a través de un cable de red. Con esta alternativa nos ahorramos el ordenador pero seguimos con la restricción del cable.

Por suerte la tecnología inalámbrica nos ayuda y también han aparecido shields Arduino para añadir WiFi (conectándose a un router local) o GPRS (conectándose a una red móvil usando una suscripción/SIM). Estas opciones nos ofrecen mucha libertad para colocar el dispositivo donde queramos pero a cambio su precio y consumo de energía (batería) es considerable.

Una opción intermedia son las tecnologías inalámbricas de ámbito local y bajo consumo como Zigbee, radiofrecuencia o Bluetooth. Estas tecnologías ofrecen conectividad local sin cable (varios metros) entre dos o más dispositivos. Para conseguir el acceso a Internet aún necesitamos que uno de los dispositivos haga de puerta o "gateway" hacia la red. Típicamente este gateway suele ser un ordenador, un router o un teléfono móvil con conectividad de datos.

Sin entrar en una comparativa de las diferentes tecnologías, en este capítulo nos centraremos en la conectividad Bluetooth por varios motivos:

● Madurez de la tecnología y penetración en el mercado (prácticamente todos los teléfonos móviles la soportan de serie).

● Disponibilidad de numerosas placas y librerías Arduino creadas por distintos proveedores.

● Bajo coste (se pueden conseguir fácilmente placas y módulos Bluetooth por menos de 10€).

En este capítulo vamos a establecer una conexión entre Arduino y un teléfono Android. El ejemplo nos permitirá intercambiar datos de forma bidireccional entre una aplicación del teléfono y el Arduino. Quedará como tarea para el lector maker reutilizar el código para implementar aplicaciones más complejas basadas en este ejemplo.

3. Bluetooth - Módulo Bluetooth HC-06

Los módulos HC-06 son una opción barata para añadir conectividad Bluetooth a los proyectos de Arduino. Se basan en el chip BC417143 de CSR. El firmware instalado en el chip hace que se comporte y anuncie como un dispositivo esclavo esperando una conexión serie según el perfil SPP.

Funciona a 3.3 V pero el módulo se suele comercializar montado en una placa con reguladores de tensión que permite su funcionamiento tanto a 3.3V como a 5V, el nivel de tensión utilizado por Arduino Uno. En nuestro proyecto vamos a utilizar una de estas placas que expone cuatro pines:

VCC: Alimentación. Conectar al pin 5V de Arduino.

GND: Tierra. Conectar a uno de los pines GND de Arduino.

RXD: Pin serie de lectura/entrada. En nuestro proyecto lo conectamos al pin 8 de Arduino.

TXD: Pin serie de escritura/salida. En nuestro proyecto lo conectamos al pin 7 de Arduino.

Nota: Los pines de lectura/escritura del módulo Bluetooth y Arduino están cruzados (el pin de escritura de Arduino corresponde al de lectura del HC-06 y el pin de lectura de Arduino se conecta al de escritura del módulo Bluetooth).

El módulo se puede configurar a través de comandos AT aunque en nuestro proyecto no utilizamos esta funcionalidad. Para más información consultar los documentos listados en la sección de referencias.

Nota: Aunque los módulos HC-05 y HC-06 son visualmente iguales, las placas del HC-05 tienen 6 pines mientras que las placas del HC-06 sólo tienen 4 pines. Los módulos HC-05 pueden funcionar tanto como maestro como esclavo. Se pueden utilizar en el proyecto en lugar del HC-06 pero deberemos asegurarnos antes de que están configurados en modo esclavo.

De cara a la conexión Bluetooth, el módulo HC-06 se inicia en modo "discoverable" (visible/descubrible) nada más alimentarlo. Cualquier dispositivo maestro puede conectarse/emparejarse con él por medio del perfil SPP. Al realizar la conexión, el dispositivo maestro deberá utilizar la contraseña "1234". Una vez establecida la conexión, el módulo y el dispositivo maestro pueden empezar a intercambiarse información.

En el lado Arduino (pines de la placa), el módulo ofrece una conexión serie que conecta "transparentemente" con la conexión Bluetooth. Cualquier dato/byte que reciba vía esta conexión serie (pin RXD) es transmitido vía Bluetooth al dispositivo maestro. Igualmente todo dato/byte recibido del maestro es transferido a la conexión serie/pin TXD).

4. Instalación y funcionamiento del Sketch de Arduino

Conectar el Arduino al ordenador a través de un cable USB. Conectar el módulo HC-06 según se indica en la figura.

El Sketch de Arduino de este ejemplo (BTSerial.ino) es muy sencillo. Está disponible dentro de la carpeta ArduinoSketch del repositorio del proyecto en github (Para cargarlo seguir los pasos indicados en el capítulo 2.2 de este manual).

La funcionalidad es muy básica. Simplemente se abre una conexión serie (SoftwareSerial) con el módulo Bluetooth HC-06 en los pines 7 y 8.

El sketch también abre otra conexión serie (Serial) con la consola/monitor del IDE de arduino, el monitor será nuestro dispositivo de entrada y salida. Todo el texto que escribamos en el monitor será transmitido al módulo HC-06 y de ahí vía bluetooth a cualquier dispositivo que está conectado a través del perfil Bluetooth SPP.

Del mismo modo, cualquier texto que reciba el módulo HC-06 vía Bluetooth será transferido al Arduino que a su vez lo enviará al monitor del IDE para que se muestre en pantalla.

Desde el punto de vista de Arduino, el módulo bluetooth HC-06 se comporta como cualquier otra conexión/dispositivo serie.

5. Instalación del entorno de desarrollo Android

Nota: Los siguientes pasos indican cómo instalar al entorno de desarrollo Android y cómo descargar la aplicación en un teléfono. Si sólo se quiere ver la aplicación funcionando, se pueden saltar estos pasos y descargar la aplicación directamente desde Google Play: (https://play.google.com/store/apps/details?id=com.tumaku.arduino)

Existen distintos entornos de desarrollo (IDE) para crear aplicaciones Android. Nosotros vamos a utilizar Eclipse. Una vez instalado el IDE podremos codificar, compilar, testear, simular y cargar aplicaciones nativas en Android. Tanto Android como Eclipse están basados en Java, por lo que como prerrequisito deberemos tener instalado Java JDK (versión 6 o superior). Si no lo tenemos, hay que ir a la web de descargas de Oracle: (http://www.oracle.com/technetwork/java/javase/downloads/index.html), descargar la versión para nuestro sistema operativo y realizar la instalación.

Nota: Tenemos que descargar el paquete JDK (Java Development Kit), no el JRE (Java Runtime Environmnent). En entornos Windows, hay que actualizar la variable de entorno PATH añadiendo la carpeta en la que se ha instalado el JDK (en mi caso: C:\Program Files\Java\jdk1.8.0_51\bin)

Una vez que tenemos Java instalado, tenemos que descargar la versión de eclipse para Java para nuestro sistema operativo (https://www.eclipse.org/downloads/). Tras descargar el paquete, sólo tenemos que descomprimirlo en una carpeta de nuestro ordenador. Dentro de la carpeta Eclipse, encontraremos el fichero ejecutable eclipse (eclipse.exe en Windows) que lanza el entorno de desarrollo. Al abrir Eclipse, la aplicación nos pregunta por el "workspace" o carpeta en la que se almacenarán nuestros proyectos. Podemos mantener la carpeta propuesta por defecto o seleccionar una nueva ubicación.

El siguiente paso es instalar las herramientas de desarrollo de Android. Descargar "Android SDK Tools only" desde https://developer.android.com/sdk/index.html#Other.

Nota: Hay que descargar sólo las herramientas del SDK, no Android Studio entero.

Para terminar la instalación necesitamos algunos componentes adicionales de Android. Utilizaremos Android SDK Manager para descargar estos elementos. Esta aplicación permite descargar y actualizar los paquetes específicos para desarrollar aplicaciones Android.

Android SDK Manager se ejecuta desde su icono en la barra de tareas de Eclipse ():

Por defecto la aplicación nos selecciona varios paquetes a descargar o actualizar. Dejarlos marcados tal como están. Además tenemos que descargar la versión del Android API/SDK correspondiente a nuestro teléfono. Para ver que versión de Android tenemos en el teléfono ir a la aplicación Ajustes y seleccionar la última opción: Acerca del teléfono. La versión se muestra en al campo Versión de Android (por ejemplo 4.0.3). Marcar el API correspondiente en el Android SDK Manager (en este caso Android 4.0.3. API 15) y pulsar sobre el botón Instalar paquetes. A continuación aceptar la licencia en la ventana que aparece e instalar.

Nota: El proyecto que vamos a descargar requiere versión API 11 (Android 3.0) o superior.

Nota: El proceso de descarga e instalación puede llevar bastante tiempo. En Windows, requiere lanzar el proceso con derechos de administrador (arrancar eclipse pulsando sobre su icono con el botón derecho y en el menú que aparece seleccionar Ejecutar como administrador).

6. Importación del proyecto desde github

Github es un repositorio de código en la nube que permite compartir código de forma gratuita. Se basa en git, una tecnología para control de versiones. Git y github son herramientas muy útiles a la hora de desarrollar y compartir proyectos abiertos y comunitarios. Nosotros sólo vamos a descargar el código del proyecto Android desde github para así poder leerlo y compilarlo desde Eclipse.

Primero ir a la página de inicio del proyecto en github: https://github.com/makespacemadrid/SerialBluetooth

En la parte derecha de la pantalla pulsar el botón Download zip. Se iniciará la descarga de un archivo zip con todo el contenido del proyecto. Una vez descargado, descomprimirlo en una carpeta.

Desde el menú de Eclipse abrir File y después Import …. En la ventana que aparece, seleccionar Android y Exixting Android Code Into Workspace. Por último en la siguiente ventana, utilizar el botón Browse para seleccionar la carpeta en la que hemos descomprimido el proyecto (por ejemplo C:\MSM\descargas\SerialBluetooth-master. Eclipse detectará el proyecto y lo añadirá a la lista de proyectos. Podemos trabajar directamente sobre los ficheros originales o marcar la casilla para copiar los archivos al workspace que se seleccionó al abrir eclipse. Pulsar el botón Finish para terminar la importación del proyecto.

Una vez importado, el proyecto y todos sus ficheros aparecen en la pestaña Package Explorer de Eclipse. Ahora ya estamos listos para compilar y cargar el proyecto en nuestro teléfono Android.

Nota: Cuando se redactó este capítulo, Eclipse era el entorno de desarrollo "de facto" para Android. Desde entonces ha aparecido Android Studio que es el entorno oficial en la actualidad. Si tienes instalado Android Studio, puedes importar el proyecto usando la opción File -> New -> Import Project y seleccionando la carpeta donde se descomprimió el proyecto.

7. Instalación de la aplicación en un teléfono Android

Para instalar la aplicación desde el ordenador, lo primero que debemos hacer es activar el modo desarrollo en el teléfono Android. Para ello, ir al menú Ajustes y dentro de la sección Opciones de desarrollo marcar la casilla Depuración USB.

Nota: En las versiones más nuevas de Android, las Opciones de desarrollo no se muestran por defecto en el menú de Ajustes. Para activarlas, dentro de Ajustes seleccionar la opción Acerca del teléfono y buscar el campo Número de compilación. Pulsar este campo siete veces seguidas y el menú de Opciones de desarrollo aparecerá en Ajustes.

Una vez activadas las opciones de desarrollo conectar el teléfono al ordenador a través de un cable USB. Puede que haga falta instalar drivers especiales (seguir las instrucciones del fabricante del teléfono).

Por último, para descargar la aplicación, seleccionar en la pestaña Package Explorer de Eclipse el proyecto (ArduinoSerialBT), pulsar con el botón derecho y elegir la opción Run As y después Android Application. Si todo ha ido bien, Eclipse compilará la aplicación y la cargará al teléfono. Una vez instalada, la aplicación se ejecutará automáticamente.

Nota: El proyecto está configurado para que se compile con la versión 15 del API de Android (seleccionado en el fichero project.properties). Si queremos cambiar este a una versión diferente de Android tendremos que instalar el API correspondiente usando el SDK manager como se ha explicado en la sección anterior.

8. Vinculación o emparejamiento Bluetooth entre el teléfono y el módulo HC-06

Tras haber conectado el módulo HC-06 a Arduino y haber cargado el Sketch tal como se indica en el paso 1, el módulo estará en modo "discoverable" y será visible desde cualquier dispositivo cercano. En el teléfono Android, ir a la opción de Bluetooth (suele estar disponible dentro de Ajustes) y activar Bluetooth si lo tenemos apagado. Una vez activado, seleccionar Buscar dispositivos. El teléfono empezará a buscar los dispositivos Bluetooth cercanos y los irá mostrando en una lista. Según el módulo HC-06 que tengamos, será identificado por su dirección MAC (identificador del dispositivo compuesto una ristra de dígitos y letras separadas por signos de dos puntos ":", por ejemplo "2A:6F:86:0E:72:94") o por un nombre, típicamente "HC-06". Al seleccionar el módulo aparece una pantalla para confirmar la vinculación o emparejamiento entre teléfono y módulo. En esta pantalla tenemos que introducir la contraseña "1234" que hemos visto en el paso P3. Si todo ha funcionado bien, los dos dispositivos quedarán vinculados. Eso quiere decir que las futuras conexiones se podrán establecer automáticamente sin necesidad de introducir la contraseña.

En el siguiente paso nos hará falta la dirección MAC del módulo HC-06. Si no la conocemos y no nos la muestra el teléfono Android, podemos utilizar una aplicación como Bluetooth Scanner para conseguirla (https://play.google.com/store/apps/details?id=com.kw.btscan)

9. Conexión e intercambio de datos entre el teléfono y el módulo HC-06

Ya tenemos instalado y configurado todo lo que nos hace falta. Abrir la aplicación ArduinoSerialBT en el teléfono. Aparecerá una pantalla con un área llamada Input Text, otra área Received Text y en la parte de abajo varios botones. Seleccionar el botón Set MAC. Esto nos permitirá indicar a la aplicación a qué dispositivo nos queremos conectar.

En la siguiente pantalla introducir el valor de la dirección MAC de nuestro módulo HC-06 (la obtuvimos en el paso anterior) y pulsar OK.

Volveremos a la pantalla inicial y ahora ya podemos establecer la conexión. Pulsar el botón ON para conectar teléfono y módulo. Si todo ha ido bien, se establecerá la conexión y se activarán las áreas de Input y Received Text.

Nota: En la mayoría de las placas HC-06 hay un LED rojo parpadeante que quedará encendido sin parpadear una vez establecida la conexión.

En el ordenador deberemos abrir una pantalla de consola/monitor desde el IDE de Arduino para poder enviar y recibir mensajes desde ella.

A partir de ahora, todo lo que escribamos en el campo de entrada del monitor (línea superior) será enviado al teléfono al pulsar Enviar en el propio monitor. El texto se mostrará en el campo Received Text de la aplicación del teléfono. Igualmente, todo lo que escribamos en el campo Input Text de la aplicación, se enviará y mostrará en el monitor de Arduino al pulsar el botón Send de la aplicación.

¡Enhorabuena! Ya somos capaces de hablar entre un Arduino y un teléfono Android utilizando Bluetooth.

Si queremos terminar la conexión Bluetooth, sólo tenemos que pulsar el botón OFF en la aplicación del teléfono.

11. Apéndice: Explicación del código de la aplicación Android

El objetivo y la extensión de este manual no permite entrar en los detalles de la aplicación Android. Se recomienda haber seguido antes algún curso de iniciación o haber leído algún tutorial básico para que sea más fácil comprender el código y la estructura del proyecto.

Los makers más curiosos puedan aventurarse a modificarla y a crear sus propios proyectos utilizando el entorno de desarrollo que hemos instalado.

Un ejercicio interesante puede ser modificar el proyecto del termómetro conectado de la ficha sustituyendo el dispositivo de electricImp por un módulo Bluetooth HC-06 y utilizando una aplicación Android en vez del agente de electricImp para enviar los datos de temperatura al servidor de carriots.