Conexión Bluetooth con un módulo HC-06

publicado en: Portada | 6
Por qué usar Bluetooth en proyectos basados en MCU

Las conexiones inalámbricas Bluetooth, especialmente las IEEE 802.15.1, son las más usadas en los dispositivos domésticos o personales, no tanto por sus prestaciones como por su ubicuidad: la inmensa mayoría de los dispositivos móviles disponen de comunicaciones Bluetooth.

Mientras que el método de interconexión genérico de dispositivos (con o sin cables) parece que actualmente pasa por Internet (uniéndose a la IoT) a la hora de diseñar un dispositivo que pueda ser controlado o intercambie información directamente con un usuario, sin necesidad de otros equipos intermediarios, Bluetooth es el más adecuado y la versión 2.0 todavía la más difundida, aunque hace más de seis años que existe la versión 4.0 y la 5.0 está a punto de convertirse en un estándar.

Módulo Bluetooth esclavo HC-06 en una placa JY-MCU BT-BOARD

El módulo Bluetooth esclavo HC-06

Los módulos Bluetooth 2.0 de tipo HC-06 (o los HC-04, la versión «industrial») son aún hoy una de las mejores opciones para aportar este tipo de comunicaciones a un dispositivo, tanto por su eficacia como por ser muy económicos y garantizar que podrán aportar conectividad con la inmensa mayoría de los dispositivos móviles actuales.

La versión 2.0 de la especificación Bluetooth incorpora la tecnología EDR, que permite una velocidad efectiva de algo más de 2 megabaudios frente a los más de 30 megabaudios de la versión 4.0 o del doble que se anuncia que tendrá la futura versión 5.0.

Aunque existen diferentes implementaciones compatibles de los módulos HC-06 (frecuentemente clones) en general, comparten dos características esenciales: un hardware basado en el BC417 con tecnología BlueCore4-Ext de CSR (ahora Qualcomm) y un software basado en el firmware Linvor 1.5 (versión solamente nominal, ya que en la actualidad es raro que un HC-06 o un HC-04 no incorporen la versión 1.8 o superior de este firmware)

BC417 en módulo Bluetooth HC-06Orden AT VERSION Módulo Bluetooth HC-06 Linvor desde PuTTY

Para la conexión del lado del MCU, el HC-06 utiliza comunicaciones serie UART aunque el BC417 cuenta también con conexiones para USB o SPI. En la parte inalámbrica los módulos HC-06 también utilizan comunicaciones serie, en este caso Bluetooth SPP (perfil Bluetooth serie) con el protocolo RFCOMM, disponible en la mayoría de los sistemas operativos, tanto móviles como de escritorio, lo que garantiza que tendrá conectividad como dispositivo esclavo (estilo periférico) con la inmensa mayoría de PC y teléfonos o tabletas inteligentes.

Conexión del módulo HC-06 a un MCU

El HC-06, diseñado para montaje superficial (SMT), suele incluirse en una placa (aunque también existen zócalos) que incorpora varios pines, al menos, la alimentación y las comunicaciones serie. El HC-06 funciona a 3V3 aunque, gracias a algún error, he comprobado que soporta 5 V como mínimo durante unos minutos, aunque en absoluto es recomendable basar en esta circunstancia el diseño del circuito. Algunos módulos añaden un regulador de tensión para la alimentación y (menos habitual) para las comunicaciones serie.

Módulo Bluetooth HC-06 diagrama de conexión de la aplicación típica

Además de la conexión mínima, el módulo Bluetooth esclavo HC-06 expone algunas otras opciones; entre las más usadas se encuentran RESET, para reiniciar por hardware el módulo, KEY, para establecer el modo de órdenes AT (esta opción es usada principalmente en los módulos maestro+esclavo, como el HC-05) y STATUS para conectar un LED de estado.

Módulo Bluetooth esclavo HC-06 basado en el BC417

Una de las placas más usadas de entre las que montan el módulo esclavo Bluetooth HC-06 es la JY-MCU BT-BOARD, que incluye un regulador de tensión para la alimentación que permite utilizar un voltaje entre 3V6 y 6 Voltios, aunque las comunicaciones (las patillas RX y TX) mantienen el nivel original de 3V3 que existe en el módulo HC-06.

Placa JY-MCU con módulo HC-06

Como puede verse en el diagrama anterior, la conexión RESET no está expuesta (sino conectada a GND por medio de una resistencia) y se ofrecen como opción las conexiones a KEY y a STATUS, que en los módulos maestro+esclavo (como el HC-05) sí suelen estar presentes.

Placa JY-MCU con HC-06 Módulo Bluetooth esclavo

Explotación del módulo HC-06 desde un MCU

El proceso de explotación del HC-06 es muy sencillo, por el lado del host, un teléfono inteligente (smartphone) o un PC, hay que emparejarlo indicando el PIN (1234 por defecto) y por el lado del MCU conectarlo por UART a la velocidad correspondiente (9600 baudios por defecto).

Como el módulo HC-06 trabaja como dispositivo Bluetooth esclavo, solamente necesita unas cuantas órdenes AT para configurar su funcionamiento. Una vez emparejado con el host (anfitrión) funcionará de manera transparente, es decir, enviará por Bluetooth los datos que le lleguen al puerto serie UART y los datos que reciba por Bluetooth los enviará al MCU por su puerto serie.

Órdenes AT del módulo HC-06

El firmware Linvor 1.5 incluye 5 órdenes AT, dos de estado y tres de configuración. Las órdenes deben enviarse cuando el módulo no esté emparejado y sin terminar la línea, es decir, sin añadir CR ni LF después de la orden o sus parámetros. El firmware tampoco enviará códigos de final de línea en los textos de respuesta a las órdenes recibidas.

  • AT sirve para comprobar que el módulo funciona: está activo y las comunicaciones son correctas. El módulo responde con el texto «OK»
  • AT+VERSION muestra la versión del firmware instalado en el HC-06 (debe ser al menos la 1.5)
  • AT+NAMEnombre permite asignar al módulo el nombre que se muestra en el dispositivo anfitrión (host). El módulo HC-06 responde con el texto OKsetname si la asignación es correcta
  • AT+PINnúmero establece un nuevo PIN para emparejar el dispositivo desde el host. El PIN por defecto es 1234. Si se establece sin errores el módulo responde «OKsetpin»
  • AT+BAUDcódigo asigna la velocidad con la que el módulo se comunica por el puerto serie. La velocidad por defecto es de 9600 baudios. Si se asigna correctamente el módulo responde con OK y el valor de la velocidad establecida. En la orden que se envía, la velocidad se expresa por medio de un código conforme a los siguientes valores:
    • 1 → 1200 baudios
    • 2 → 2400 baudios
    • 3 → 4800 baudios
    • 4 → 9600 baudios
    • 5 → 19200 baudios
    • 6 → 38400 baudios
    • 7 → 57600 baudios
    • 8 → 115200 baudios
    • 9 → 230400 baudios
    • A → 460800 baudios
    • B → 921600 baudios
    • C → 1382400 baudios

El módulo responde con el texto «ERROR» cuando alguna de las anteriores operaciones no es correcta.

Por ejemplo, para establecer como nombre del módulo «Bluetooth HC-06», como velocidad 9600 baudios y 4444 como código PIN, habría que enviar las siguientes tres órdenes AT:

  • AT+NAMEBluetooth HC-06
  • AT+BAUD4
  • AT+PIN4444

Desde Arduino podrían establecerse estos mismos valores, por ejemplo, con el siguiente código:

Lógicamente, el módulo HC-06 puede configurarse desde el circuito que lo utiliza (por ejemplo, incorporando algún modo de funcionamiento especial en el código) pero, para las pruebas, es muy práctico conectarlo a un PC por medio de un conversor USB a UART (a un nivel de 3V3) y usar para enviar las órdenes AT una aplicación de consola serie como CuteCom o PuTTY.

La velocidad por defecto del puerto serie del HC-06 es de 9600 baudios, el resto de parámetros de conexión (bits de datos o de parada, paridad…) pueden verse entre los resaltados de la captura de pantalla de abajo. El puerto al que se conecta con el PC (/dev/ttyUSB0 en el ejemplo) no depende del HC-06 sino del adaptador USB a UART.

CuteCom conectar a conversor serie UART TTL USB

Conexión del módulo HC-06 con Windows

En general, la conexión de Windows con el módulo HC-06 será muy sencilla, bastará con pulsar sobre el icono que aparecerá en la zona de notificaciones (abajo a la izquierda) y, dependiendo del nivel de confianza establecido, introducir el pin que se haya configurado en el módulo Bluetooth.

Animación configuración Bluetooth Windows automática

En el caso de que Windows todavía no reconozca el módulo Bluetooth HC-06 se puede acceder desde el menú de inicio a la configuración del sistema (desde la entrada «Configuración» del menú).

Configuración Windows menú inicio

En el panel de configuración que aparece hay que seleccionar la entrada «Dispositivos», que llevará a la configuración de impresoras, escáneres, ratones… incluyendo los dispositivos Bluetooth.

Panel configuración Windows

En el cuadro de diálogo de de configuración de dispositivos hay que pulsar sobre la entrada «Bluetooth» (en la parte izquierda) que dará acceso a la administración de dispositivos Bluetooth.

Configuración dispositivos Bluetooth Windows

De la lista de dispositivos que aparecerán en el cuadro de administración Bluetooth (en la parte derecha) se selecciona la entrada que corresponda con el módulo HC-06 y se pulsa sobre el botón «Emparejar». Aunque en el ejemplo de la captura de pantalla aparece como «Bluetooth HC-06», hay que recordar que el nombre es uno de los parámetros que se configuran y será, por tanto, el que se haya guardado con AT+NAME. También puede ser que no se identifique hasta emparejarlo, en cuyo caso habrá que identificarlo por la dirección MAC.

Emparejar dispositivos Bluetooth Windows

Según el nivel de confianza que se haya establecido con el módulo Bluetooth, Windows preguntará el código PIN con el que emparejar el módulo HC-06. Después de escribirlo en el cuadro correspondiente se pulsa sobre el botón «Siguiente» par conectar.

Escribir el código del dispositivo Bluetooth para emparejarlo en Windows

Una vez emparejado el módulo HC-06 aparecerá en el panel como «Conectado». Normalmente, por el Perfil Bluetooth serie (SPP), se asociará a los puertos COM que corresponda; si no se realizara, se puede agregar manualmente desde el menú de configuración al que se llega pulsando sobre «Más opciones de Bluetooth».

Dispositivos Bluetooth Windows emparejado

Para agregar manualmente un puerto COM hay que seleccionar la solapa «Puertos COM» y en el panel que aparece añadirlos utilizando el botón «Agregar». Como puede verse en la captura de pantalla de abajo, también es posible eliminar los puertos asignados seleccionándolos de la lista y pulsando «Quitar».

Configuración de los puertos serie (COM) de un dispositivo Bluetooth en Windows

Conexión del módulo HC-06 con GNU/Linux

Para los entornos de escritorio de las distribuciones GNU/Linux existen varias soluciones, las más utilizadas son Bluedevil que se integra en el escritorio Plasma del proyecto KDE y Blueman para los escritorios basados en GTK, como GNOME o Xfce. En ambos casos existen applet que se integran en el escritorio junto a otros componentes de configuración o notificación para tener un acceso rápido a la gestión de las comunicaciones Bluetooth.

El proceso de configuración es el habitual: ① buscar los dispositivos que están disponibles, ② seleccionar el dispositivo que se va a utilizar (el módulo HC-06, en este caso), ③ especificar el PIN para emparejarlo ④ otorgarle un nivel de confianza, si es el caso, para conectar automáticamente cuando el dispositivo se vuelva a detectar en el radio de alcance y ⑤ comunicar con el dispositivo utilizando un puerto serie virtual. Mientras que en Windows la nomenclatura de los puertos es la habitual COM, en las distribuciones GNU/Linux suele utilizarse /dev/rfcommX para el perfil Bluetooth SPP.

Para conectar utilizando Bluedevil, una vez mostrado el panel (accediendo, por ejemplo, desde el icono de la zona de notificaciones), se pulsa sobre añadir dispositivo (Add Device…) para que se comience a buscar equipos con Bluetooth.

Configuración Bluetooth KDE

Una vez que haya sido encontrado (puede que no aparezca el nombre, solamente la dirección MAC) se selecciona y, en su caso, se indica el código PIN

Configuración Bluetooth KDE PIN

Una vez que el módulo Bluetooth se reconoce por el sistema aparece en la lista de dispositivos indicando su estado con dos iconos a la derecha del nombre del dispositivo.

Configuración Bluetooth KDE conectado

En función de que se haya establecido o no como un dispositivo fiable, para realizar sucesivas conexiones será necesario seleccionarlo de la lista de dispositivos y pulsar sobre el botón de conectar (Connect)

Configuración Bluetooth KDE conectar

Si el módulo Bluetooth HC-06 no se ha configurado como dispositivo de confianza, en cada sesión que se conecte será necesario introducir de nuevo el código PIN.

Configuración Bluetooth KDE emparejar

El proceso para utilizar Blueman es similar. En primer lugar se accede al cuadro de diálogo de configuración (por ejemplo desde la zona de notificaciones). Si el módulo HC-06 no aparece en la lista se puede forzar una nueva búsqueda con el botón «Buscar».

Configurar Bluetooth GTK Buscar

Una vez que el HC-06 se ha encontrado aparece en la lista de dispositivos (puede que no aparezca el nombre sino la dirección MAC). El dispositivo se empareja seleccionándolo y pulsando el botón correspondiente de la barra de herramientas o con la entrada «Emparejar» del menú contextual (mientras se selecciona) o del menú principal.

Configurar Bluetooth GTK Emparejar

Dependiendo del nivel de confianza otorgado al dispositivo, será necesario introducir el código PIN en el cuadro emergente que aparece antes de establecer la conexión.

Configurar Bluetooth GTK Emparejar PIN

Una vez que el dispositivo se ha emparejado con el anfitrión (host), se muestra el nombre y al icono de la especificación Bluetooth se le añade la llave. En la barra de estado se muestra la transferencia de subida y bajada y se añaden los indicadores de estado a la derecha, en la lista de dispositivos.

Configurar Bluetooth GTK Emparejado

Ya que el módulo Bluetooth esclavo HC-06 está emparejado se puede establecer una conexión serie seleccionándolo en la lista de dispositivos y pulsando sobre conectar a puerto serie (en el menú del dispositivo se encuentra dentro del grupo «Conectar a:» y corresponde a la entrada «Serial Port»).

Configurar Bluetooth GTK Conexión serie

Además de la notificación, cuando se ha establecido una conexión con el módulo HC-06 (que utiliza el perfil Bluetooth SPP) se añade al menú del dispositivo la entrada «Desconectar:» en la que se indica el puerto serie virtual que se está utilizando (rfcomm0, en el ejemplo de la captura de pantalla de abajo).

Configurar Bluetooth GTK Conectado a puerto serie rfcomm

Utilizando el archivo de configuración /etc/bluetooth/rfcomm.conf se puede especificar cómo se realiza la conexión serie con el dispositivo Bluetooth. En el ejemplo de configuración de abajo se utiliza rfcomm3, que corresponderá con el dispositivo /dev/rfcomm3, y el canal 1 para conectar el HC-06.

También es posible conectar manualmente utilizando la orden rfcomm (que necesitará privilegios sobre los dispositivos Bluetooth para el usuario) desde la consola indicando el parámetro bind, el número de puerto serie virtual, la dirección MAC del dispositivo Bluetooth y el canal por el que se conecta. Por ejemplo, para conectar el módulo HC-06 usando el puerto serie virtual /dev/rfcomm4 en el canal 2 se escribiría rfcomm bind 4 30:14:08:26:10:47 2 (precedido de sudo si el usuario no tiene privilegios específicos para acceder a los dispositivos Bluetooth).

Como cada módulo HC-06 tiene su propia dirección MAC (la del módulo usado en los ejemplos es 30:14:08:26:10:47) se pueden conectar varios dispositivos en diferentes puertos virtuales RFCOMM con alguno de los métodos anteriores.

Igual que en el caso del UART, se puede utilizar una consola serie para hacer pruebas con el módulo. En la captura de pantalla de abajo se muestra un ejemplo de conexión con los mismos parámetros que los usados para el adaptador USB a UART. Usando ambas conexiones, podrían realizarse pruebas con dos instancias de, por ejemplo, CuteCom, una conectada al puerto serie del USB y otra al del RFCOMM.

CuteCom conectar a RFCOMM

Víctor Ventura

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Más entradas - Página web

Sígueme:
TwitterLinkedIn

Seguir Víctor Ventura:

Programador multimedia y web + IoT. Mejor con software libre.

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

6 Respuestas

  1. Manuel

    Felicidades por tu página!. ¿Puedes contactar conmigo para desarrollar un proyecto que tenemos en mente? Gracias

    • Víctor Ventura

      Hola, Manuel.

      Me alegro mucho de que te guste el blog 🙂

      Te escribí un correo electrónico a la dirección de tu comentario pero parece que hay algún error. Si quieres contactar conmigo puedes encontrar una dirección en mi página personal victorventura.es. Aunque si quieres plantear alguna cuestión técnica lo más ágil es describirla aquí, en los comentarios; seguro que en algo te podremos ayudar.

      Gracias por participar en polaridad.es

  2. Daniel Rodriguez

    Buenas noches Victor.

    Requiero controlar el módulo Bluetooth con un MCU de microchip. Puede ser un PIC16F873. por lo tanto me es más dificil trabajar desde librerías. donde puedo descargar la ficha técnica de este producto para conocer exactamente el protocolo hexagesimal que debo transmitirle incluidos los cheksum que requiera?

  3. Jorge

    Hola, estoy tratando de cambiar el nombre de módulo hc-06 pero no hay manera de hacerlo por solfwawre. Sin embargo, si que lo consigo por el monitor serial del IDE de arduino con el comando AT+NAME=nombre. No se que puede estar pasando, he probado como el ejemplo y nada.

  4. Jorge

    Hola, estoy intentando cambiar el nombre del módulo hc-06 de la misma manera que la del ejemplo y no hay forma. Sin embargo si que lo consigo en el monitor serial del IDE de arduino con el comando AT+NAME=nombre, por sofware no hay manera no se que puede estar pasando. .

  5. joaquin

    Hola;
    Tengo al menos 5 módulos HC-06 que después de poder configurarlos su nombre pin y velocidad a 19200 baud luego no puedo usarlos en el pc por qué no me asigna un puerto com SSP » SSP Dev» y solo me aparece un puerto serie Port.
    ¿A qué puede ser debido esto.?
    ¿El puerto serie Port que me asigna puede ser modificado a un puerto SSP «SSP Dev» ?
    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *