Arduino y bluetooth ( I )
Iniciaremos una serie de entradas relacionadas con Arduino y
Bluetooth.
Sin profundizar demasiado, bluetooth es un tipo de
comunicación inalámbrica entre dispositivos electrónicos. Su principal característica
, es la facilidad con la que estos dispositivos se encuentran y se configuran
de forma autónoma en función de los servicios que implementan.
Por contra, la distancia útil de esta comunicación, del
orden de unos metros de alcance (unos 10 metros en los dispositivos habituales
de bajo consumo sin antena), lo descarta para otro tipo de aplicaciones que
necesiten mayor alcance, robustez o
velocidad de transmisión.
Necesitaremos por tanto añadir un dispositivo a nuestra
placa de Arduino para dotarle de capacidad de conexión Bluetooth. Hay unos
cuantos en el mercado , y de proveedores conocidos, pero me centraré en dos de
los más conocidos y económicos ; -) , el HC-05 y el HC-06.
Módulo HC-06
Es el más sencillo de los dos. Dispone de tan solo 4 pins, TX, RX, VCC, GND y sólo puede funcionar como esclavo, es decir
no puede generar conexiones hacia otros dispositivos, y por lo tanto tan solo
puede recibir órdenes de un dispositivo maestro. Es útil para todas aquellas
aplicaciones en las que usemos un Smartphone, ordenador, etc , para enviar
órdenes a nuestro Arduino, pero no necesitemos obtener un feedback.
Tiene la
particularidad, de que se alimenta a 3.3V, por lo que para usarlo con nuestro
Arduino lo correcto sería montar un divisor de tensión con dos resistencias
para obtener esos 3.3V. En la práctica, todos los que he usado los he
alimentado directamente con los 5Vcc de la placa de Arduino, y están vivos…
Módulo HC-05
Es un módulo con idéntico chip que el HC-06, pero con
diferente firmware y dos pins adicionales State y Key (o WakeUP según versión).
Este es un módulo Maestro-Esclavo, lo que le permite generar conexiones con otros
dispositivos para establecer comunicación punto a punto. La
diferencia es que un BlueTooth Slave solo puede conectarse a un master y a
nadie más, en cambio un master BlueTooth, puede conectarse a varios Slaves o
permitir que ellos se conecten y recibir y solicitar información de todos ellos.
De momento, nos centraremos en el uso y configuración del HC-06, que es el que
usaremos para los próximos tutoriales.
Se puede apreciar como dispone de las dos entradas
adicionales, pero no tienen soldado ningún pin. Hay algún tutorial de cómo
convertirlo en un HC-05, pero te recomiendo que lo compres directamente, porque
es bastante complejo.
Imagenes
Repaso de la
librería SofwareSerial
Antes de empezar a
explicar para que sirve, comentaré por qué la usaremos. Podríamos hacer un
ejemplo tan sencillo como conectar los pins de Rx y TX, a los del Arduino,
pines (Rx y Tx, 0 y 1 respectivamente) y funcionar. Pero tendremos el problema
que son los mismos que usa para comunicar el CHIP UART del Arduino para la
comunicación serie con nuestro ordenador, por lo que cada vez que quisiéramos
cargar un código de prueba, necesitaríamos desconectar el módulo bluetooth,
cargar el programa, desconectar la placa, conectar el módulo, y volver a
emparejar con el móvil.
Un poco lío, ¿no?
Por eso esta
librería, que implementa vía software un chip TTL-UART virtual. Tiene algunas
limitaciones, como que pins se pueden usar según el tipo de placa de Arduino, y
que en caso de implmentar varios puertos, solo uno puede puede recibir datos a
la vez.
Para usarla, primero
deberemos incluir esta librería en nuestro skecth, con la línea:
#include
<SoftwareSerial.h>
Después se debe
declarar una variable del tipo SoftwareSerial ,con los dos pins que usaremos
como RX y TX. Sería algo como:
SoftwareSerial
newSerial(txpin,rxpin);
Donde newSerial, es
el nombre que queremos usar, y txpin y rxpin, el ´numero del pin donde van
conectados
Si queremos llama a
este puerto btserie, y usar el pin 2
como transmisor, y el pin 3 como receptor, quedaría:
SoftwareSerial btserie
(2,3);
Para el resto de
código, se usan las sentencias habituales con puerto serie.
A la hora de hacer el montaje, hay que tener en cuenta que las conexiones en serie van "cruzadas", y que por tanto el pin TX del HC-06 va al pin definido como RX en la placa Arduino y viceversa. Os debe quedar así:
Vamos con un ejemplo
básico, que lee el puerto serie y encendería un LED al recibir un “1” y lo
apagaría al recibir un “0”.
#include <SoftwareSerial.h> //Variable para almcenar la lectura del puerto serie char caracter; /* En la siguiente sentencia declaramos los pines que vamos * a usar para realizar la comunicación serie con el modulo * bluetooth. Recuerda que se cablean cruzados. Rx Arduino * con Tx módulo y viceversa */ SoftwareSerial btserie(2, 3); void setup() { btserie.begin(9600); pinMode(13,OUTPUT); } void loop() { // Este bucle qeda a la espera de una lectura por el puerto serie // del módulo bluetooth while (btserie.available() == 0) { ; } caracter = btserie.read(); if ( caracter == '0' ) digitalWrite(13, LOW); if ( caracter == '1' ) digitalWrite(13, HIGH); delay(100); }
Los parámetros que
he usado de velocidad son lo habituales para módulos comprados en tiendas web
lowcost habituales, eso es velocidad de transmisión 9600 bauds y pin de
conexión 1234. Si no obtuviese comunicación prueba con distintos valores de
velocidad, 4800, 9600, 19200, 38400,57600, etc.
Para comunicarnos
con nuestro módulo, yo he usado la aplicación Arduino Bluetooh Terminal. Es de
una sencillez extrema y muy ligera. Los pasos a seguir son:
-
Cargar
el programa en nuestro Arduino,
-
Descargar
la plicación de la Play Store, e instalarla
-
En
ajustes Bluetooth de nuestro teléfono, localizar el módulo HC-06 y vincularnos.
El pin habitual es 1234,
-
Vamos a
la aplicación y escribimos un 1, y pulsamos send, el led 13 se encenderá
-
Escribimos
un 0 y send y se apagará.
Os dejo con un
sencillo vídeo de cómo va el proceso.
Este programa es muy
sencillo de hacer con app inventor, así que en la próxima veremos cómo crear
nuestra propia aplicación de Android, para gestionar tantos dispositivos como
queramos.
Nos vemos.