martes, 11 de enero de 2011

Módulo Bluetooth... // Bluetooth module


A todos nos agrada la idea de comunicarnos con nuestro microcontrolador de forma inalámbrica y sin complicaciones.
Hasta ahora venía usando los típicos dispositivos 434MHz que dan bastante alcance, aunque hay que emplear algún tipo de cifrado de datos.
Hoy podemos utilizar módulos bluetooth ya ensamblados de bajo coste y sin complicaciones en su manejo.



En primer lugar, un poco de teoría.

Bluetooth es una especificación industrial para Redes Inalámbricas de Área Personal (WPANs) que posibilita la transmisión de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la banda ISM de los 2,4 GHz. Los principales objetivos que se pretenden conseguir con esta norma son:
  • Facilitar las comunicaciones entre equipos móviles y fijos.
  • Eliminar cables y conectores entre éstos.
  • Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la sincronización de datos entre equipos personales.


Se denomina Bluetooth al protocolo de comunicaciones diseñado especialmente para dispositivos de bajo consumo, con una cobertura baja y basados en transceptores de bajo costo.
Gracias a este protocolo, los dispositivos que lo implementan pueden comunicarse entre ellos cuando se encuentran dentro de su alcance. Las comunicaciones se realizan por radiofrecuencia de forma que los dispositivos no tienen que estar alineados y pueden incluso estar en habitaciones separadas si la potencia de transmisión lo permite. Estos dispositivos se clasifican como "Clase 1", "Clase 2" o "Clase 3" en referencia a su potencia de transmisión, siendo totalmente compatibles los dispositivos de una clase con los de las otras.

Clase
Gama
DBm de
potencia
MW de
 potencia
Clase 3
1m fuera
0dBm
1mW
Clase 2
10 m al 
aire libre
4dBm
2,5 MW
Clase 1
100m al
 aire libre
20dBm
10mW
Fuente: Wikipedia

Mi módulo Bluetooth es de Calse 2 por lo que su alcance medio debe ser de unos 10 metros.
Otra cosa a tener en cuenta además de la Clase a la que pertenece, son los perfiles que soporta. Estos perfiles van a determinar el intercambio de datos entre los diferentes dispositivos Bluetooth. (Más información en wikipedia)
El módulo que poseo sólo contiene un perfil, que es más que suficiente para la mayoría de aplicaciones que yo le puedo dar al dispositivo. El perfil es el de puerto serie (SPP).



Ahora volviendo a las especificaciones del módulo.

El módulo bluetooth tiene unas medidas extremadamente pequeñas de 26.9x13mm y un grosor de 2.2mm es idóneo para utilizar en cualquier aplicación sin ocupar mucho espacio.
Está ensamblado con un chip CSR, BC417143 y una memoria flash de 8mbit para albergar el firmware.
Esa es la cuestión que me ha llevado a escribir esta entrada. Dado que la posibilidad de éste módulo no es más que la de interactuar con otro dispositivo host que lo controle. La idea reside en que gracias a modificaciones en el firmware podemos conseguir que éste módulo nos sirva para dispositivos que controlen a otros dispositivos como si fuesen maestros.
Es muy complicado encontrar por internet ciertos tipos de programas aunque con el paso del tiempo se logran encontrar pequeñas aplicaciones para llevar a cabo nuestras inquietudes.
Por la red existen diferentes versiones de este módulo, supuestamente uno mejora las características del otro aunque no puedo concretar en qué puntos.
Para manejar este módulo sólo nos podemos basar en comandos AT y resulta que el conjunto de comandos no es muy amplio; dado que sólo tenemos un perfil de uso.

Tras buscar un poco por internet, he dado con software para modificación de firmware  del módulo e incluso con un firmware adecuado para que sus funciones se incrementen.

Utilizando este esquema, se modifica el firmware del módulo, añadiendo así la posibilidad de utilizarlo como host de una aplicación.

La aplicación utilizada para éste propósito es BlueFlash, conectamos el módulo al puerto paralelo del ordenador mediante el esquema indicado arriba y procedemos a actualizar el firmware del módulo.


Pasos a seguir:

Bueno tras conectar mi módulo soldando cablecitos, jeje; he conseguido comunicarme con él mediante el protocolo SPI.


 A través de ese protocolo siempre podremos acceder a nuestro módulo para cargar firmware y modificar los parámetros de comunicación, como pueden ser los baudios de transmisión, la interface de comunicación, el nombre del dispositivo, la MAC,  y particularidades del bluetooth.


En la primera foto se observa el programa ya abierto, si bien podeis observar indica que el procesador está funcionando y tendremos que pulsar el boton Stop Processor para poder continuar.
Cuando el procesador se ha parado, nos aparecen datos del tipo de integrado que tiene y la capacidad de memoria que tiene asociada, en nuestro caso 128 sectores, 8megabits; en la parte superior indica el procesador que en nuestro caso es AMD compatible con BC4-EXT(coyote) y los numeros de identificación correspondientes.


Cuando el procesador está parado nos activa las opciones del programa para poder borrar el dispositivo descargar el firmware o subirle uno nuevo. Yo he realizado la descarga del software original (el que trae) para futuros usos, y he procedido a actualizar su firmware. La fecha del original databa del 2006 y el que he podido encontrar en la red es de 2009, puede que haya más modernos pero no accesibles y como el objetivo es hacerlo que funcione en modo maestro nos vale.


Al darle al botón download estamos introduciendo el nuevo firmware al dispositivo, y tras un cierto tiempo de espera nos indica que el proceso está terminado. Ha echado unos 10,77 segundos, no es mucho pero si tarda  un poco más no pasa nada, estará en torno al minuto el tiempo medio de programación.

Una vez realizado todo eso ya tenemos nuestro módulo en modo maestro, ¿¡parece fácil verdad!?

Ahora el modo de conexión cambia, e incluso hay que añadir conexiones que antes no se usaban. Principalmente para comunicarse necesita alimentación 3.3V y GND, después los canales de comunicación, por serie serían TX y RX. Ahora además hay que añadir el pin de reset, que hay que polarizarlo a nivel alto, y si queremos mandarle comando AT, tendremos que poner PIO(11) a nivel alto, dejándolo suelto o a nivel bajo para procedimientos normales (comunicación).


Después de programarlo he curioseado un poco el módulo con el programa PStools que nos da acceso a todos los parámetros del mismo para modificarlos a nuestro antojo, al iniciar nos indica el modo en el que nos comunicamos con el dispositivo. La opción elegida es mediante SPI.


Cuando estamos conectados al módulo podemos observar todos sus parámetros mediante el programa así como una descripción de los valores por defecto y sus propiedades si queremos cambiarlos. El programa está muy conseguido y además es fácil de usar, eso sí, hay que saber un poquito acerca de Bluetooth.


Comentando un poco el programa por encima tiene opciones estándares de programación para establecer la velocidad de comunicación mediante UART, así como activar la opción de dormir en caso de no usarse y cosas similares. Todo ello en el menú Entry, en la opción canned operations.

Si alguién quiere el firmware para convertir su módulo a maestro que se ponga en contacto.

Tengo en mente hacer una entrada comentando los comando AT y el correcto funcionamiento del módulo después de hacer estos pasos, si alguien está interesado en colaborar o aportar información que no dude en comentarlo.





Comprar Wireless Bluetooth Transceiver Module RS232 / TTL


Fuentes:
  • http://endasmedia.ch
  • http://www.bluevox.com.cn/down/index.htm
  • http://nelsonchunglife.blogspot.com/2008/04/update-bt-firmware-if-your-bt-module-is.html

Enlaces:
  • BlueSuiteCasira 1.24: Este programa es imprescindible para realizar los pasos indicados en esta entrada, descárgalo desde aquí. Además encontraréis el firmware necesario para introducir en vuestro módulo bluetooth y algunos manuales.
  • BlueLab 4.1: Entorno de programación para tus BlueCore CSR. Incluye ejemplos y tutoriales.

Diseño:
  • zócalo de programación y pruebas. 
  • zócalo RS232.

29 comentarios:

Byron dijo...

Hello,

I'm newly look for this king of chips BC4-EXT from CSR !
I order some wtih a very limited firmware (lincor V1.5) and i want to download newer with FULL master functions (such as th HC05 firmware)

I already download CSR bluelab IDE (V4.1).

Does the coyote firmawre can provide master functionnalities or do i need another firmware to do that ?

Sorry for the english response... I'm french and my spanish is very limited...

CuriosidadesFord dijo...

Sorry I can not answer you before.
My English is not perfect.
You have the necessary files in the downloads above: bluesuiteCasira 1.24. There you will find the appropriate firmware.

I hope I've helped

Bruno dijo...

Hola,

exelente tu articulo, he conseguido conocer un poco mas este modulo.
te cuento hace poco adquiri este modulo, estoy intentando comunicarme con el desde mi celular con android 2.2 y una aplicacion terminal llamada blueterm.

la vinculacion con el modulo se da correctamente con el codigo 1234.

mi problema radica en que solo se vincula, pero el celular no se conecta con el modulo.

teoricamente el modulo se encuentra en esclavo.

tienes alguna sugerencia para este problema?

P.A.G. dijo...

¡Hola Bruno, bienvenido al blog!

He estado comprobando lo que me comentabas y no me ocurre lo que me comentas.

Tras instalar la aplicación Blueterm, realizo la busqueda de dispositivos en mi entorno, localizo el módulo e indico que se conecte a él. Mientras tanto el módulo indica un parpadeo en su led.
Para sincronizarse me pide la clave que indicas 1234 (dependiendo el caso) y ya están autorizados para conectarse en otras ocasiones.

Ahora se puede decir que están conectados y el led del módulo deja de parpadear, quedándose encendido.

Desde la aplicación o desde el dispositivo se pueden enviar caracteres que se mostrarán en el equipo contrario.

Resumiendo un poco y relacionando con tu problema, la conexión entre ambos no se lleva a cabo hasta que lo haces desde la aplicación, es decir, cuando vinculas desde el menú de configuración de android sólo puedes autorizar la conexión pero no conectarte.

Perdona por el rollo, espero haber llegado a la conclusión de tu problema, si no es así, ya sabes por donde contactar conmigo.

Nuevamente gracias.

Bruno dijo...

Perfecto, entiendo tu respuesta basicamente lo que me falta por hacer es conectarme desde la aplicacion (cosa q no he descubierto como hacer) por que claro como te decia y como me entendiste a la perfeccion, desde el menu de configuracion de android solo permite la vinculacion, pero no la conexion.

por lo tanto la conexion debe darse desde la aplicacion... podrias orientarme como realizar esta conexion desde la aplicacion "blueterm" la verdad es que no le he descubierto.

el modulo despues de un reset (pin rst a low) parpadea rapidamente lo que significa q esta esperando vinculacion con otro dispositivo, una vez lograda la vinculacion el parpadeo es mas lento, hasta ahi llego yo y me imagino q la luz queda encendida cuando conecta correctamente como dices tu...

muchas gracias por la respuesta...

Bruno

P.A.G. dijo...

¡Hola Bruno!

He incluido ese programa en la sección de Android, puedes ver también una serie de imágenes que te ayudarán a conectar tu dispositivo correctamente.
Coméntame si te funciona.

Saludos

Bruno dijo...

Gracias, seguramente no observe bien la pantalla para ver la opción menú.

cuando vuelva a mi casa retomare el tema.

he estado recorriendo tu blog y la verdad que esta bastante interesante, seguramente mas adelante cuando realice algunas cosas nuevas, las compartiré acá si es que te interese.

agradezco las respuestas, soluciones y la publicación de como conectarse a blueterm.

Bruno

P.A.G. dijo...

La opción del menú la tienes usando los botones de tu smartphone; al pulsar menu te salen una serie de opciones.

Estupendo, si quieres que ponga por aquí alguno de tus proyectos puedes enviármelos por correo. Queda bien tener cosillas recogidas en un mismo lugar.

Y por las respuestas, no hay que agradecer nada, a todos nos gustan que nos escuchen y que nos ayuden en determinados momentos.

Saludos!

EXIT dijo...

Estupenda entrada!
Hasta ahora habia trabajado con estos modulos (HC-06) sin problemas bajo android 2.3.1, pero hace poco me llegaron con el firmware HC-05. Pense, mira que bien!
Pues aqui empezaron mis dolores de cabeza, ya que no hay manera de enlazarlos con el movil ni con la tablet, sin embargo con el HC-06 no tengo ningun problema.

Tu habias oido algo parecido?

Un saludo!

P.A.G. dijo...

¡Hola EXIT!

¡Es curioso el caso que comentas! No he tenido la posibilidad de comprobar con diferentes versiones del sistema operativo Android, al comentar que en la versión 2.3.1, me hace pensar que lo has probado en otras versiones y que has tenido conexiones satisfactorias. Puede ser entonces que esa versión de Android tenga cierta incompatibilidad. Aún así me gustaría saber más acerca de ese error que contemplas y te animo a que me mandes mas información, si quieres por correo (curiosidadesford@gmail.com) y adjuntarme fotos de las conexiones y comentario más extensos de las pruebas que has realizado.
El firmware HC-05, posee doble interfaz para actuar como maestro-esclavo y la comunicación serie se realiza a 38400kbs, y como norma general necesita unos ajustes para comenzar a funcionar.
Saludos y gracias por tu comentario!

VARELA dijo...

Hola amigo está genial tu articulo. Recientemente me he iniciado con la programación en android y he tratado de hacer una aplicación para enviar datos desde el celular al modulo bluetooth HC-05 pero me encontré con el problema que mi celular no detecta el modulo bluetooth, tengo android 2.2.2 y mi celular es el modelo LG P350. Tengo la duda si es problema del sistema operativo, kisiera saber tu opinion ya que no encuentro solución a este problema.

P.A.G. dijo...

Hola VARELA, en primer lugar gracias por tu comentario. En cuanto al problema que comentas a mí personalmente no se me han dado, pero me han comentado varias veces problemas con el módulo HC-05, supongo que la programación del módulo la haces correctamente poniéndolo como esclavo, entonces me arriesgaría a decirte que puede ser del celular. Aún así podrías comprobar con otros dispositivos bluetooth para descartar (PC, tablet u otro dispositivo móvil con otra versión de android). Si únicamente lo utilizarás como módulo esclavo de un dispositivo android te propongo que utilices el módulo HC-06 esclavo y evites problemas derivados de la programación del módulo.

Te animo a que comentes por aquí tus avances.
Saludos y suerte con tus proyectos!

VARELA dijo...

De nuevo por aquí, gracias por tu opinion. Bueno, yo tambien pensé que el bluetooth de mi celular no funcionaba, pero ya lo he probado transfiriendo archivos, el problema es cuando activo la busqueda de dispositivos no encuentra el modulo bluetooth pero con otros celulares con android 2.1 si lo detecta asi que el modulo HC-05 funciona bien por eso pensaba que el problema era de la version de sistema operativo. Pero bueno creo que aceptaré tu sugerencia de comprarme el modulo HC-06 o tal vez actualice mi celular a la version 2.3 para ver si con una version superior lo detecta. Saludos.

P.A.G. dijo...

Bueno, la verdad que no me refería a que el bluetooth de tu móvil no funcionase, me refería más bien que no implemente el protocolo SPP que es el encargado de la transmisión serie. Aún así otros usuarios me comentaron problemas con la versión 2.3.1 de android. Yo no he tenido problemas puesto que como tu dices he probado con la versión 2.1 y todo perfecto. Viendo que has probado con otros dispositivos y te funciona puedes descartar que el módulo esté mal configurado y que como concluyes el problema venga del sistema operativo. A ver si algún otro usuario nos puede comentar problemas similares y en que versiones del sistema operativo.
Saludos.

SERGIO CANDELARIA VELAZQUEZ dijo...

Hola amigo, podrias subir los archivos otras ves ya que los links se encuentra abajo y no se pueden descargar

P.A.G. dijo...

Hola Sergio, a lo largo de esta semana quiero restablecer todos los enlaces aunque ello me va a llevar tiempo, las leyes han cambiado las politicas de los servidores pero intentaremos darle una solución a ello.
Gracias!

doragasu dijo...

¿Sabéis si hay algún módulo de estos que soporte control de flujo?

Lo digo porque lo miré hace un tiempo y ninguno de los firmwares disponibles lo soportaba.

P.A.G. dijo...

Hola Ddoragasu, gracias por tu comentario!

Actualmente no he trabajado con los módulos utilizando control de flujo; aunque sí te puedo hacer referencia al software de desarrollo BlueLAB en el que sí que existen ejemplos de firmware para usar todos los periféricos del mismo.

Lógicamente aún no lo he podido probar, te animo a que si encuentras solución nos cuentes tus experiencias.

Saludos.

davis dijo...

hola disculpa tengo varias dudas la principal ceria que diferencias importantes hay entre el hc-05 y el hc-06? ¿cual recomiendas tu para uso? para convertir en maestro tengo entendido que se hace con comandos at corrijeme si me equivoco. saudos espero y agradesco tu ayuda...

P.A.G. dijo...

Hola Davis!, físicamente no hay diferencias entre ambos, la diferencia radica en su firmware. El HC-05 es capaz de actuar como esclavo y como maestro, cambiando con simples comandos AT; sin embargo el HC-06 existe un firmware esclavo y otro maestro, cuando ambos se encuentran cerca se establece la comunicación entre ellos y los comandos AT nos sirven para cambiar ciertos ajustes como el nombre, el pin de conexión o la velocidad de trabajo.

Como recomendación, pues es complicado si no me dices el entorno pero a grandes rasgos me quedaría con el HC-06 que no requiere comandos avanzados y permite una comunicación rápida ya sea con otro módulo maestro o con cualquier PC o dispositivo móvil.

El HC-05 lo reservaría más para proyectos complejos en los que se tenga la necesidad de utilizarse tanto de forma maestra como esclava. Ten en cuenta que poner un módulo HC-05 en un dispositivo que sólo funciona de esclavo, es complicar un poco el manejo del mismo, aunque no por ello incompatible. Además añadir que el módulo HC-05 permite configurar más ajustes del módulo y en un momento dado puede ser necesario su uso.

De todos modos, tal y como puedes ver en mi blog se puede cambiar el firmware de manera fácil y te animo a que pruebes las diferentes versiones para sacar tus conclusiones.

Y por supuesto puedes consultarme cualquier duda y evitar las pruebas.

davis dijo...

hola
ok gracias por tu ayuda y pues el entorno en que los usaria seria para comunicar un micro avr con la pc otro seria de un modulo a otro para emparejar dos micros, cual recomendarias en cada uno de los casos?, ademas podrias enviarme los firmwares de hc-05 y los dos de hc-06 a mi email davis9278@hotmail.com te lo agradeceria mucho, tambien quisiera preguntarte para que sirve el puerto usb de tales modulos?
saludos

P.A.G. dijo...

Hola davis!, la razón de este blog es esa, la de entre todos ayudarnos.

En cuanto a los casos prácticos que me comentas yo utilizaría el HC-06, en ambos casos vas a realizar el mismo tipo de comunicación; y sin capacidades extras de la UART. El caso de conectar los dos módulos por ejemplo, podrías usar el HC-05 para dotar a cada uno la posibilidad de funcionar como esclavo si en un momento dado los conectas los dos a un PC o dispositivo móvil, si no yo utilizaría HC-06 y me quitaba horas de programación.

Saludos.

davis dijo...

hola te agradesco muchisimo tu ayuda pero te agradeceria aun mas si publicas o me envias los firmwares para esperimentar, ademas no tendras el diseño de un pcb para adaptarlo a una proto es que tengo 3 modulos y no es igual de facil manejarlos. saludos

P.A.G. dijo...

Buenos días, Davis! si por supuesto que te lo envío, dame tiempo y te envío por correo los firmwares para que experimentes y un diseño que preparé hace tiempo para experimentar aunque es una versión muy inicial y está sujeta a modificaciones.

Estoy restaurando los enlaces del blog y cargando de nuevo los ficheros para que estén disponibles.

Saludos y en breve puedes consultarlo en tu correo.

davis dijo...

hola de nuevo te lo agradesco la ultima duda antes de ausentarme un tiempo para probar a fondo seria,

las conecciones de los firm que me enviaste son como las comunes que rondan en la red?,

para usar los comandos at es obligatorio que el PIO(11) este a nivel alto o no?

y para usarlo normal es necesario que este a nivel bajo?

saludos

P.A.G. dijo...

Hola Davis, efectivamente las conexiones son las mismas puesto que el hardware es igual y el firmware que has recibido le otorga ese funcionamiento.

En el firmware HC-06 no es necesario ninguna modificación para enviar los comandos AT, sólamente que no estén enlazados mediante Bluetooth y enviarles los comandos via serie.

En el firmware HC-05, hay que poner PIO(11) a nivel alto para enviarle los comandos y por supuesto no puede estar enlazado mediante Bluetooth, después se puede poner a nivel bajo o al aire.

El diseño que te envié para adaptarlo a la protoboard, incluye la pista para incluir el led en la placa junto con una resistencia para evitar montarla en la protoboard, pero si ves más cómodo no montarlo puedes hacerlo.

El led te funcionaría tanto para el modelo maestro como para el modelo esclavo (HC-05 y HC-06).
Ten encuenta que el módulo sólo admite 3.6V máx antes de quemarse.
Los módulos con interfaz regulan los 5V y obtienen directamente 3.3V para que funcione correctamente.

Espero que comentes tus avances, así podremos solucionar detalles que se pasen por alto.

Anónimo dijo...

Hola

Estoy encantado de encontrar esta blog, en español, sobre estos.. modulitos.

No consigo encontrar los firmwares por ningun lado, ¿seria posible enviarlos o subirlos a algun host?

Tengo el linvor 1.5 (HC-06) esclavo y necesitaria el HC-05 para ponerlo en maestro. He leido que tabien existe un HC-06 para maestro (cosa nueva que no sabia hasta llegar aqui), y si lo tuvieras seria genial para asi poder trastear.

Dejo una direccion donde se puede enviar: gomibakou ##@gmail.com## (quitar los ##) xDD

De todas formas estare pendiente del blog por si hay cambios :)

Muchas gracias.

Anónimo dijo...

Olvidaba:

http://www.wavesen.com/

Este es un fabricante -creo- que dispone de estos modulos, la gran ventaja es que te permite seleccionar que firmware lleva el modulo. Por si interesa.
El "shipping" no es que sea precisamente lo mejor pero...

CuriosidadesFord dijo...

Gracias por tu comentario, ya te he mandado un correo con información de interés, espero que te sea de utilidad.

Saludos.