Hoy vamos a ver cómo hacer un sencillo manos libres bluetooth. En este artículo no voy a entrar en la parte de audio, sino que me voy a centrar en la parte display, es decir, que cuando nos entre una llamada en nuestro teléfono móvil podamos mostrar en un display externo, conectado vía bluetooth con el móvil, el número llamante o, en el caso que tengamos en la agenda de nuestro teléfono móvil ese número de teléfono asociado con el nombre de una persona, pues que nos aparezca también en el display el nombre de dicha persona.

Para ello voy a usar un módulo bluetooth de Bluegiga que cuenta con el firmware iWrap en su versión v4, y que me soluciona totalmente la vida para llevar a cabo de manera rápida  y efectiva la aplicación.  Realmente para lo que voy a hacer podemos coger cualquiera de los módulos WT12, WT11, WT41 o WT32. Funcionará con cualquiera, aunque si más adelante quisiera audio, yo me decantaría por el WT32, basado en el Bluecore5 de CSR, más indicado para aplicaciones multimedia (audio stereo).

Bueno, pues vamos a suponer que nuestro “indicador bluetooth de llamada entrante” cuenta principalmente con un micro (uno simple, con dos uarts), un display y un módulo bluetooth WT12 de Bluegiga. Tanto el display como el WT12 los tendremos conectados al micro mediante una uart.

bluetooth-manos-libres

 

Configuración del WT12

Lo primero que hay que hacer es configurar desde nuestro micro el módulo bluetooth WT12. Para ello desde la uart del micro conectado al módulo de Bluegiga enviaremos los comandos:

SET PROFILE HFP ON
SET PROFILE PBAP ON
RESET


Con ello activamos en el módulo WT12 los perfiles bluetooth HFP (Hands Free Profile) y el PBAP (Phone Book Access Profile, para controlar la agenda del teléfono móvil).  Esto es necesario hacerlo sólo una vez, pues una vez hecho ya queda residente en la memoria NO volátil del WT12.

Asociación / conexión bluetooth.

Ahora lo que vamos a hacer es conectar el módulo bluetooth con nuestro teléfono móvil. Seguramente lo normal sería coger nuestro teléfono móvil, buscar en la sección bluetooth el módulo WT12 y pulsar “conectar”. Esto funciona (lo he probado) pero yo lo quiero hacer al revés, quiero seleccionar en mi display bluetooth mi teléfono móvil y hacer la conexión desde el display bluetooth hacia el teléfono móvil.

Para ello, desde el micro se envía al módulo WT12 el comando:

INQUIRY 10 NAME
con ello el WT12 buscará durante 10 segundos los dispositivos bluetooth cercanos y devolverá al micro la lista de dispositivos encontrados incluyendo, si lo hay, el friendly name de cada uno de ellos. Bueno, una vez hecho el micro recibirá una respuesta como esta:
INQUIRY_PARTIAL 78:47:1d:ab:78:e1 5a020c
INQUIRY_PARTIAL 00:02:c7:f8:60:e3 1300404
INQUIRY_PARTIAL f4:0b:93:0b:5f:cc 7a020c
INQUIRY 3
INQUIRY 78:47:1d:ab:78:e1 5a020c
INQUIRY 00:02:c7:f8:60:e3 300404
INQUIRY f4:0b:93:0b:5f:cc 7a020c
NAME 78:47:1d:ab:78:e1 “josegg”

En mi caso, mi teléfono móvil tiene la MAC 78:47:1d:ab:78:e1 y tiene asociado mi nombre, “josegg”. Llegados a este punto en el display conectado al micro mostraríamos una lista de los nombres encontrados para que el usuario seleccionara el que corresponde a su teléfono móvil. Una vez seleccionado el micro podría grabarlo en su memoria flash. Ahora que nuestro micro ya tiene la MAC bluetooth de nuestro teléfono móvil ya puede conectarse a él. De hecho podríamos hacer que siempre que se enciende el display éste intente, de forma periódica, conectarse al teléfono móvil, así siempre que estuvieramos cerca del display bluetooth, éste se conectaría al móvil.

Para que el micro pueda conectarse vía bluetooth al móvil debe enviar el siguiente comando al módulo bluetooth WT12:

CALL 78:47:1d:ab:78:e1 111F HFP
De esa manera el WT12 se conectará al teléfono móvil usando el perfil manos libres. Aquí he presupuesto que tenemos en el PIN de seguridad del teléfono móvil el mismo que en el configurado en el módulo WT12 (con el comando SET BT AUTH *). Si la conexión es exitosa el micro recibirá una respuesta del WT12 como la que sigue:


CALL 1

CONNECT 1 HFP 2
HFP 1 BSRF 103
HFP 1 STATUS “service” 1
HFP 1 STATUS “call” 0
HFP 1 STATUS “callsetup” 0
HFP 1 STATUS “callheld” 0
HFP 1 STATUS “signal” 4
HFP 1 STATUS “roam” 0
HFP 1 STATUS “battchg” 2
HFP 1 READY
HFP 1 NETWORK “YOIGO”
En este instante nuestro “display bluetooth” ya está actuando como manos libres de nuestro teléfono móvil. Por ejemplo, si en este momento nos entra una llamada de teléfono el WT12 enviará al micro los siguientes datos:

HFP 0 RING
HFP 0 CALLERID “681319891″ “” 81
HFP 0 RING
HFP 0 CALLERID “681319891″ “” 81

obviamente tendremos que programar nuestro micro para que cuando recibamos por la uart del WT12 una cadena CALLERID, coja el teléfomo y lo muestre en el display. Así de simple. Llegados a este punto ya tenemos un indicador de llamada bluetooth implementado.
Muy bien, pero tú dijiste que en el display mostrarías el nombre del llamante si éste está en la agenda. ¿Es suficiente con lo que hemos hecho para que se muestre?

No. Si quieres mostrar datos de la agenda del teléfono móvil necesitas establecer otra conexión bluetooth, usando el perfil PBAP, que te permitirá obtener los datos de la agenda del teléfono móvil. Para ello, de forma análoga a lo que hemos hecho con el perfil HFP, desde el micro enviamos el siguiente comando al módulo bluetooth WT12:
CALL 78:47:1d:ab:78:e1 112F PBAP
Una vez establecida la conexión PBABP, podemos obtener los datos de la agenda mediante el comando PBAP. Por ejemplo, para obtener TODOS los contactos de la agenda (nombre, teléfono, …) enviaríamos el comando:
PBAP 00 FFFF 1

Recomiendo la lectura del comando PBAP en el manual del iWrap, ya que incluye muchísima combinatoria. En el caso anterior no enviaría una especie de XML con los datos de la agenda. Usando estos datos, cuando entre una llamada y tengamos el número de teléfono, podremos buscar el nombre asociado a dicho número y mostrarlo en el display. Como véis es una aplicación supersencilla de hacer con módulos de Bluegiga (con lo que tienen iWrap).

 ¿Aplicaciones?

Pues las aplicaciones son evidentes. Añadiendo el audio (gestionando unos pocos comandos más del iWrap que veremos otro día) tendremos un completo manos libres bluetooth válido para cualquier aplicación. Sin audio, como hemos visto hoy, pues tenemos un simple indicador de llamadas bluetooth. A mi, por ejemplo, que de tanto en tanto hago excursiones en buggy y no oigo nada más que el motor, mi chica  me riñe muchas veces porque no le cojo el móvil (ya que físicamente no lo oigo). Con un indicador como este en el salpicadero sí vería cuando entra una llamada.  Igual me monto uno en el buggy para que me pueda localizar fácilmente …    Mmmmm, aunque pensándolo un poco más … mejor no :)

Otro día vengo con más. Salu2!!!

 



Post relacionados:

  1. Como hacer un equipo GSM manos libres bluetooth con audio PCM Aprovechando que he tenido que probar el interfaz PCM de...
  2. Utilizando el AS como concentrador bluetooth. En el último post hablamos de los modulitos WT12 y WT11 de...
  3. Nuevo módulo bluetooth WT41 de Bluegiga. Hace ya tiempo hablé de los módulos WT11 y WT12 de...
  4. Gateway Bluetooth-GPRS Desde hace ya un tiempo quería escribir un post acerca...
  5. Nuevo módulo bluetooth de bluegiga WT32 Hoy día 19 de Septiembre Bluegiga, fabricante finlandés de módulos...








Etiquetas:
2 Respuestas a “Como hacer un manos libres bluetooth con identificación de llamada.”
  1. Jose Luis dice:

    muy buen artículo como siempre. una pregunta, indicas que la agenda puede descargarse mediante pbap y luego asi buscar el numero de telefono que llama para averiguar si está el nombre de quien llama. Si el micro es pequeño en memoria y la agenda es muy grande es complicado descargarla.

    ¿no hay una función en los bluegiga que permita enviar como parametro el número de telefono y que devuelva el nombre si existe????

    muchas gracias.

  2. blogElectronica dice:

    Hola Jose Luis,

    me alegra que te guste el post. Respecto a lo que dices, no, no es posible hacer lo que indicas mediante protocolo PBAP (no tienes un motor de BBDD en el lado del teléfono que te ejecute consultas tipo SQL sobre la agenda).

    Si tienes problemas de memoria, lo que puedes hacer es ir descargando por partes la agenda, no tienes por qué descargarla toda de golpe. U otra forma, quizás la más rápida y eficiente en cuanto a memoria, es descargarla toda e ir procesando los datos en tiempo real según entran por la uart del micro.

    Salu2!!!

  3.  
Deja una Respuesta

Puedes publicar un comentario aquí si quieres, pero te recomiendo que uses el nuevo foroElectronica.com para introducir comentarios. Te contestaré más rápido. Recuerda que debes registrarte si no lo estás para publicar un comentario.