Saltar al contenido

Bluetooth HC-05 / HC06

Saludos controleras y controleros en el día de hoy vamos a aprender a realizar una comunicación bluetooth con Arduino empleando los módulos HC-05 o HC-06 y darle asi nuevas funcionalidades a nuestros proyectos con Arduino. Veremos la conexión al módulo empleando el puerto físico UART y también creando un puerto virtual UART.

Antes de comenzar te invito a darle un vistazo a nuestro Curso Gratuito de Arduino desde Cero.

Y a que te suscríbas al canal de YouTube si te gusta la programación de dispositivos embebidos, la teoría del control, modelado de sistemas y programación en general.

Protocolo de Comunicación Bluetooth

Existen diversas maneras de realizar una comunicación inalámbrica, como por ejemplo emplear comunicación NRF, ZigBee, Wi-Fi y Bluetooth.

Para este caso, veremos que el protocolo Bluetooth es un método de comunicación asequible en la red PAN (red de área personal), con una velocidad de datos máxima de 1Mb/S, que funciona hasta un rango nominal de 100metros usando una frecuencia de 2,4G es una forma común de comunicación inalámbrica.

Cuando deseamos integrar una comunicación Bluetooth con Arduino, el módulo HC-05 (que puede ser configurado como Maestro o Esclavo) y el módulo HC-06 (Que solo puede ser empleado como esclavo) son los más empleados para ofrecer esta comunicación a nuestra tarjeta de desarrollo.

Por lo tanto, si solo deseamos entablar una comunicación entre el arduino y nuestro celular, puedes usar cualquiera de los dos módulos, sin embargo si deseas realizar una comunicación inhalambrica entre dos arduinos, será obligatorio que por lo menos uno de estos arduinos tenga el módulo HC-05 que pueda ser configurado como Master.

Envío de datos a Arduino a través de Bluetooth

Si bien el módulo HC05 posee un regulador interno de 3.3v pudiendo conectarlo entonces a un voltaje de 5v se recomienda realizar una conexión de voltaje de 3,3 V, ya que la lógica de los pines de comunicación serial del HC-05 es de 3,3 V y suministrar 5V directamente al módulo puede existir la posibilidad de dañarlo.

Una de las formas de conseguir el voltaje de 3,3 V para el módulo es empleando un circuito divisor de voltaje (5v a 3.3v) entre el pin TX de arduino y el pin RX del módulo.

bluetooth arduino hc-05

Puedes comprar todos los componentes de este proyecto en el portal chino aliexpress el cual tiene envios a todas partes del mundo y donde podras encontrar los componentes a un precio mucho más economicos:

Divisor de voltaje

El divisor de voltaje se compone de dos resistencias en serie:

Divisor de Voltaje

Para este caso el Vin son 5v provenientes del TX del Arduino y el Vout son los 3.3v que conectaremos al RX del HC05. Existen muchas configuraciones de resistencias que logran este resultado, basta con aplicar la siguiente ecuación:

V_{out}=\dfrac{R_2}{R_1+R_2}V_{in}

En este caso se establece una resistencia de cualquier valor y de esa forma se puede encontrar cual debe ser el valor de la segunda resistencia.

Vamos a suponer en este caso, que colocaremos una resistencia R_2=2.2k\Omega, sustituyendo valores tenemos que:

3.3v=\dfrac{2.2k\Omega}{R_1+2.2k\Omega}5v

Despejando R_1:

(R_1+2.2k\Omega)3.3v=(2.2k\Omega)(5v)
3.3vR_1+(2.2k\Omega)(3.3v)=(2.2k\Omega)(5v)
3.3vR_1=(2.2k\Omega)(5v) - (2.2k\Omega)(3.3v)
R_1=\dfrac{(2.2k\Omega)(5v) - (2.2k\Omega)(3.3v)}{3.3v}
R_1=\dfrac{11k\Omega - 7.26k\Omega}{5}
R_1=1.1333k\Omega

Por lo tanto, la resistencia R_1 comercial más cercana es de R_1=1k\Omega.

HC-05

Este módulo lo podemos diferenciar porque posee 6 pines:

Funciones de los Pines

PinDescripción
Statese puede conectar a la entrada de Arduino para conocer el estado de la conexión. Emparejado o desconectado.
RxPin de recepción del módulo. Se recomienda utilizar un divisor de voltaje como se muestra en la conexión.
TxPin de Transmisión. Se puede conectar directamente al Pin Rx del Arduino
GNDconectado al pin GND de Arduino
5vEsta placa de conexión tiene un regulador interno de 3,3 V integrado.
ESHabilita o deshabilita el módulo. Raramente usado.

Puerto serial fisico o puerto serial por software

El intercambio de datos entre el módulo bluetooth y el arduino se dá a través de una comunicación serial la cual puede ser una comunicación UART física empleando los pines del Arduino específicos para dicha comunicación serial de Arduino convensional o también se puede generar o crear pines de comunicación serial artificial por software empleando la biblioteca SoftwareSerial.

#include <SoftwareSerial.h>

La biblioteca SoftwareSerial tiene las siguientes limitaciones conocidas:

  • Si utiliza varios puertos seriales por software, solo uno puede recibir datos a la vez.
  • No todos los pines de Mega y Mega 2560 admiten interrupciones de cambio, por lo que solo se pueden usar los siguientes para RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
  • No todos los pines de Leonardo y Micro admiten interrupciones de cambio, por lo que solo se pueden usar los siguientes para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
  • En Arduino o Genuino 101, la velocidad RX máxima actual es de 57600 bps
  • En Arduino o Genuino 101 RX no funciona en el Pin 13

Estos pines de comunicación serial por software pueden crearse por ejemplo en el caso que nuestro proyecto ya esté empleando los pines físicos de la comunicación serial por hardwares (ejemplo los pines 1 y 2 del arduino uno).

Finalmente se debe emparejar el módulo con el dispositivo movil o cualquier otro con el que se desee realizar la comunicación.

Módulo Bluetooth Arduino UNO HC-05 (UART por Hardware)

Vamos a realizar esta práctica con el módulo HC-05 que es el módulo más completo pero puedes emplear el módulo HC-06 si es con el que cuentas en estos momentos.

Inicialmente vamos a emplear el Arduino UNO el cual únicamente posee un solo puerto serial en los PINES 0 y 1 y el cual se encuentra en paralelo con la comunicación USB CDC, por lo tanto es importante que antes de programar el Arduino, debes desconectar el HC05 de los pines 0 y 1 para que no haya conflicto.

La conexión del módulo HC05 en los pines 0 y 1 del Arduino UNO solo sería útil si en tu proyecto no requieres emplear el monitor serial del arduino. Por lo tanto vamos a construir el siguiente circuito:

Arduino UNO + HC05 UART Hardware PIN 1 y 2

Lista de Materiales

  • Arduino UNO
  • HC05
  • 1 resistencia de 1k
  • 1 resistencia de 2.2k
  • 3 resistencias de 220
  • 3 leds
  • cables

NOTA: Todos los códigos están disponibles al final de este post para descarga de forma gratuita.

Aplicación Bluetooth

Para conectarnos al arduino será necesario emplear algún dispositivo que cuente con una comunicación serial. Para este caso, se emplea el celular en el cual se puede instalar diversas aplicaciones que la comunidad ya ha creado para ser usado en nuestro proyecto.

En este caso vamos a instalar la APP Arduino Bluetooth by Giumig Apps que ya incorpora un control remoto, un encendido de lampara y un terminal de chat. Pero tu eres libre de instalar el app que desees o crear tu propio app.

Nota de Configuración

Dado que no estamos empleando el monitor serial debemos conocer de antemano cual es la configuración inicial del módulo HC-05 como por ejemplo su velocidad en Baudios que por defecto puede estar en 9600 o en 38400.

Veremos como se pueden alterar estas configuraciones en los próximos ejemplos cuando incorporemos el monitor serial al proyecto.

Módulo Bluetooth + Serial Monitor con Arduino

Para NO perder la funcionalidad del Monitor Serial con Arduino, lo más conveniente es emplear un puerto serial virtual (por software) en el caso que estemos usando la placa de Arduino UNO o emplear alguna placa de Arduino que posea más de un UART por Hardware, como por ejemplo el Arduino Leonardo o Arduino MEGA.

Arduinos con más de un puerto UART

Para este caso, se emplea un Arduino Leonardo que posee dos puertos seriales UART (Serial, Serial1) donde la conexión USB CDC y los pines 0 y 1 NO están en paralelo y corresponen a dos puertos UART por hardware diferentes. Esto también puede ser empleado con cualquier otra placa que tenga más de un UART.

En este ejemplo, se incorpora un Relé con Arduino para encender un bombillo y adicionalmente vamos a usar un chat para enviar mensajes desde el celular para poderlos visualizar en el monitor serial. El circuito a implementar es:

Bluetooth HC-05 Arduino Leonardo

Lista de Materiales

  • Arduino Leonardo o Arduino MEGA
  • HC05
  • 1 resistencia de 1k
  • 1 resistencia de 2.2k
  • 3 resistencias de 220
  • 3 leds
  • Módulo Relevador
  • Bombillo 110v
  • cables

Configuración del HC-05 por comandos AT

Como ya disponemos del Monitor Serial, podremos configurar el módulo HC-05 a través de comandos AT. Para eso es necesario colocar nuestro dispositivo en modo configuración.

Esto se logra desenergizando el módulo y presionando el botón del mismo y sin soltar el botón energizamos nuevamente el módulo y esperamos 5 segundos antes de soltar el botón.

Veremos que la luz led comenzará a parpadear más lentamente. En ese momento podremos abrir el Monitor Serial el cual deberemos verificar que que el final del mensaje esté habilitado la opción Both NL & CR como lo vemos a continuación:

Los comandos AT que pueden ser empleados pueden ser vistos en el siguiente PDF (click para abir) donde los más importante son:

ATRetorna un OK, es un saludo inicial
AT+ORGLResetea el dispositivo de fabrica
AT+NAME=NombreEstablece un nombre para el dispositivo
AT+NAME?Pregunta cual es el nombre del dispositivo
AT+ROLE=ParametroEstablece el ROL del dispositivo donde parámetro puede ser 0 para esclavo o 1 para Maestro
AT+PSWD=ContraseñaEstablece una contraseña o PIN al dispositivo
AT+PSWD?Pregunta cual es la contraseña del dispositivo
AT+UART=Param1, Param2,
Param3
Configura la velocidad de la comunicación UART del disposotivo
AT+UART?Pregunta cual es la velocidad en baudios configurada en el dispositivo.

UART Virtual (por Software)

El UART por Software puede ser empleado en CUALQUIER Arduino donde queramos ocupar otros pines diferentes a los pines dedicados al UART por Hardware empleando la biblioteca SoftwareSerial explicada al comienzo de este post.

El UART virtual es la mejor opción cuando NO disponemos del UART físico diferente al empleado en la comunicación con el monitor serial como es el caso del Arduino UNO.

Realicemos el mismo ejemplo anterior pero en un Arduino UNO creando un UART Virtual en los pines 10 y 11 que serán el RX y TX virtuales respectivamente:

HC-05 SoftwareSerial Arduino UNO

Lista de Materiales

  • Arduino UNO
  • HC05
  • 1 resistencia de 1k
  • 1 resistencia de 2.2k
  • 3 resistencias de 220
  • 3 leds
  • Módulo Relevador
  • Bombillo 110v
  • cables

Códigos

Todos los códigos vistos en esta entrada relacionados a la comunicación bluetooth empleando la tarjeta de prototipado del arduino pueden ser descargados gratuitamente dando click en el siguiente botón de descarga:

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.