Skip to Content

Arduino and HC-05 Bluetooth Module

Arduino and HC-05 Bluetooth Module

Añadir Bluetooth a tu Arduino es la forma más sencilla de dar a tus proyectos Arduino el poder de las posibilidades inalámbricas. 

Puedes deshacerte de los engorrosos cables entre el Arduino y el sensor de humedad, o incluso mejor, puedes leer el valor de la humedad en tu teléfono directamente. 

Puedes controlar un coche a distancia, una grúa de juguete o un brazo robótico utilizando tu móvil con un módulo Bluetooth y Arduino. 

Al final de este tutorial serás capaz de crear interesantes proyectos inalámbricos Bluetooth.

El módulo HC-05 es un dispositivo versátil, de bajo coste y muy fácil de usar. Le mostraré cómo utilizar el módulo Bluetooth HC-05 con Arduino. 

He dado toda la información crítica sobre el HC-05, como los detalles de los pines, el voltaje, las especificaciones de corriente, la información del protocolo de comunicación, etc.

Le daré ejemplos de proyectos de trabajo con diagramas de conexión y código para proyectos HC-05, que podrá utilizar inmediatamente.

Let us get started!

(I also have an article on How To Connect ESP32 Bluetooth with a smartphone if you want to work with Bluetooth and an ESP32 microcontroller instead.)

Componentes necesarios para conectar el HC-05 a Arduino

Componentes de hardware 

Software

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.

¿Qué es el módulo HC-05 y por qué es tan famoso?

HC-05 es un módulo de protocolo de puerto serie Bluetooth que es fácil de usar. Puedes comunicarte con el HC-05 a través del protocolo serie.

El modo de comunicación tipo UART lo convierte en la opción favorita de los entusiastas de Arduino. 

Te mostraré los pines del HC-05 y las descripciones en la siguiente tabla:

Sl. NoNombre de la clavijaDescripción de la clavija
1VCCEste es el pin de alimentación del módulo. Puedes conectar 5 V del Arduino UNO a este pin.
2GNDEl pin GND del HC-05 debe conectarse a la conexión a tierra de tu proyecto. Esto puede ser conectado al pin GND en el Arduino UNO
3TXDTXD es el pin de transmisión del módulo Bluetooth. Conecta el pin TXD del HC-05 al pin RXD del MCU (Arduino UNO PIN 0)
4RXDRXD es el pin de recepción del módulo. A través de este pin RXD se enviarán los comandos al módulo. Conecta el pin TXD de la MCU (Arduino UNO PIN 1)
5CLAVEEl pin KEY permite poner el módulo Bluetooth HC-05 en modo de comando AT. 
6ESTADOEl pin STATE indica al Arduino UNO si el HC-05 está conectado a un dispositivo Bluetooth o no. El pin STATE estará alto cuando esté conectado a un dispositivo Bluetooth. Estará bajo cuando no esté conectado a ningún dispositivo. 

Compartiré con ustedes más detalles sobre los modos AT y la funcionalidad de los pines KEY en las secciones siguientes.

El módulo HC-05 puede actuar tanto como maestro como esclavo. Puede utilizar los comandos AT para poner el módulo HC-05 en modo maestro. 

El modo maestro te ayuda a conectar el módulo HC-05 con otros dispositivos esclavos Bluetooth.

El modo AT también permite cambiar el nombre del módulo (tal y como aparece en la lista de dispositivos Bluetooth).

Instrucciones paso a paso para conectar el módulo Bluetooth HC-05 a un Arduino

Te mostraré cómo conectar tu módulo HC-05 a un Arduino UNO en unos sencillos pasos. 

El módulo HC05 viene con un conector bergstick de 2,54 mm. Puedes utilizar un cable Dupont macho-hembra para conectar el HC-05 y el Arduino UNO.

Cable Dupont para conectar el HC-05 y el Arduino UNO

Paso 1: ¿Cómo conectar el HC-05 al Arduino UNO?

1) Empezar con la conexión del pin GND

Comienza con la conexión del pin GND

Mi consejo es que conectes el pin GND primero todo el tiempo. Nunca enciendas la placa hasta que hayas completado todas las conexiones. Asegúrate de volver a comprobar las conexiones.

2) Conectar el pin TXD

Conectar el pin TXD

Conecta el pin TXD del módulo Bluetooth al pin RXD del Arduino (cable amarillo).

TXD es el pin de salida del módulo HC-05.

RXD en el UNO es el pin de entrada del Arduino. 

3) Conectar el pin RXD

Conectar la clavija RXD

Conecta el pin TXD del Arduino (PIN 1) al pin RXD del módulo HC-05. Puedes referirte al cable naranja de la imagen anterior.

4) Conectar la clavija de alimentación

Conectar la clavija de alimentación

Conecta el pin de 5V del Arduino al pin VCC del módulo HC-05. Estos pasos completan las conexiones críticas necesarias para comunicarse con el módulo Bluetooth.

Veremos cómo programar y empezar a trabajar con el módulo HC-05 en las siguientes secciones.

Nota: Dado que el terminal serie también utiliza los pines UART estándar (PIN 1 y PIN 0), muchos proyectos y ejemplos recomiendan adaptar la función SoftwareSerial.

La función SoftwareSerial permite configurar dos pines cualesquiera del Arduino como pines RXD y TXD.

Por favor, visite la página de documentación oficial para obtener más información sobre el software de serie.

Paso 2: Conozca los pines STATE y KEY del módulo Bluetooth HC-05

En esta sección, compartiré todos los detalles necesarios para entender las funcionalidades de los pines STATE y KEY. 

1) Propósito del pin STATE en el módulo Bluetooth HC-05

El pin STATE del módulo Bluetooth HC-05 está conectado al LED de la placa. El pin STATE también está terminado en el conector.

La clavija STATE le indica si hay una conexión Bluetooth presente o no.

Propósito del pin STATE en el módulo Bluetooth HC-05

Mirando el LED, puedes saber si la conexión está activa o no. Si hay una conexión activa, el LED estará encendido. El LED estará apagado si no hay conexión. 

Puedes conectar el pin STATE a cualquier pin GPIO de Arduino. El STATE te ayuda a leer el estado de la conexión en tu código más tarde. 

Si lee un ALTO lógico, hay una conexión activa. Si no hay conexión activa, leerá un cero lógico. 

Conectar el pin STATE al Arduino no es obligatorio pero ayuda a proporcionar más datos de depuración para el usuario.

2) Finalidad de la clavija KEY del módulo Bluetooth HC-05

El propósito del pin KEY es cambiar el módulo Bluetooth HC-05 del modo de datos al modo de comandos y viceversa. 

Si no se realiza ninguna conexión, el módulo HC-05 estará por defecto en modo datos.

Si quieres poner el módulo en modo comando, utiliza un pin GPIO de Arduino para llevar el pin KEY a lógica Alta.

Proyecto 1: Una sencilla aplicación de parpadeo de LEDs utilizando el módulo Bluetooth HC-05

En este proyecto, programarás el Arduino para que encienda y apague un LED conectado al Arduino UNO usando tu móvil. 

El módulo Bluetooth HC-05 se comunica con el móvil de forma inalámbrica. Este proyecto es equivalente al programa "Hello World".

Comencemos.

1) Esquema de conexión

Observe que las líneas seriales están conectadas al PIN 2 y al PIN 3 en lugar de los pines RXD y TXD estándar del Arduino. 

Tener un puerto serie separado te ayuda a evitar el conflicto entre la terminal serie del Arduino y el HC-05. 

Puedes configurar los PIns de Arduino para que actúen como pines UART en el código usando la función SerialSOftware.

Consulte la sección de códigos para obtener más detalles.

Diagrama de conexión

2) Código Arduino 

Referencia: https://create.arduino.cc/projecthub/electropeak/getting-started-with-hc-05-bluetooth-module-arduino-e0ca81

#include "SoftwareSerial.h"

SoftwareSerial MyBlue(2, 3); // RX | TX 

int flag = 0; 
int LED = 8; 

void setup() 
{   
 Serial.begin(9600); 
 MyBlue.begin(9600); 
 pinMode(LED, OUTPUT); 
 Serial.println("Ready to connect\nDefualt password is 1234 or 000"); 
} 

void loop() 
{ 
 if (MyBlue.available()) 
   flag = MyBlue.read(); 
 if (flag == 1) 
 { 
   digitalWrite(LED, HIGH); 
   Serial.println("LED On"); 
 } 
 else if (flag == 0) 
 { 
   digitalWrite(LED, LOW); 
   Serial.println("LED Off"); 
 } 
}

3) Recorrido por el código

SoftwareSerial MyBlue(2, 3); // RX | TX 
int flag = 0; 
int LED = 8;

Se crea un objeto llamado MyBlue utilizando la biblioteca SoftwareSerial. La bandera es una variable utilizada para almacenar la entrada de Bluetooth. 

El LED se conecta al PIN 8 del Arduino. El LED se conmuta mediante una aplicación de serie Bluetooth en el teléfono.

 Serial.begin(9600); 
 MyBlue.begin(9600); 
 pinMode(LED, OUTPUT);

Hay dos puertos serie habilitados. La primera línea activa el puerto serie del hardware del UNO. La tasa de baudios se establece en 9600. 

La segunda línea habilita el puerto serie del software (para el módulo Bluetooth HC-05). El PIN 8 del Arduino se configura como Salida. 

El resto del código comprueba si el puerto softwareSerial tiene algún dato disponible. Si hay un dato, verificará si es un cero o un uno. 

Necesitas instalar una aplicación en tu teléfono para comunicarte con el módulo HC-05. Hay varias aplicaciones disponibles.

Aquí tienes algunas aplicaciones móviles recomendadas:

Sugerencia: Puede utilizar el mismo concepto en el proyecto anterior, para aumentar el número de opciones como ARRIBA, ABAJO, DERECHA, IZQUIERDA, A, B, C, D como en los pads de juego. "A" se trata como una entidad separada cuando se compara con "a".  

Proyecto 2: ¿Cómo cambiar el nombre del HC-05? (Cómo poner el HC-05 en modo comando)?

Te mostraré cómo poner el HC-05 en modo comando y cambiar algunos parámetros. 

Para ello, es necesario acceder al botón KEY. Puedes acceder al pin KEY usando el GPIO de Arduino y manualmente usando el botón KEY. 

1) Esquema de conexión

Observa que el PIN 9 del Arduino está conectado al pin KEY del HC-05. Esto le da la capacidad de controlar el modo del HC-05 usando el software en el Arduino.

El PIN 9 del Arduino se conecta al pin KEY del HC-05

2) Código Arduino 

Referencia: https://droiduino-cc.medium.com/changing-arduino-bluetooth-name-if-you-are-using-hc05-module-6f184a242467

/*
 * Changing HC05 module's default device name using AT Command
 * by Droiduino.cc
 *
 * Pinout:
 * Key --> pin 9
 * VCC --> Vin
 * TXD --> pin 10
 * RXD --> pin 11
 * GND --> GND
 *
 * AT Command : AT+NAME=<new device name>
 *
 */
 
#include "SoftwareSerial.h"
 
SoftwareSerial BTSerial(10, 11);   // RX | TX
 
void setup()
{
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command mode
}
 
void loop()
{
  // Read from HC05 and send to Arduino
  if (BTSerial.available())
    Serial.write(BTSerial.read());
 
  // Read from serial monitor and send to HC05
  if (Serial.available())
    BTSerial.write(Serial.read());
}

3) Recorrido por el código

Destacaré las secciones clave del código.

digitalWrite(9, HIGH);

Escribir HIGH en el PIN 9 pone al HC-05 en modo comando. El PIN 9 del Arduino está conectado al pin KEY del módulo HC-05.

 BTSerial.begin(38400); // Velocidad por defecto de HC-05 en modo de comando AT

Una vez que ponga el HC-05 en modo comando, puede comenzar a enviar los comandos AT. Los baudios por defecto del HC-05 son 38400. 

Te mostraré cómo encuadrar y enviar los comandos en los siguientes pasos. Abre el terminal serie en el IDE de Arduino.

Debe configurar la opción como se muestra en la imagen siguiente (seleccione tanto "NL como CR").

Asegúrate de que la tasa de baudios está ajustada a 9600. 9600 es la tasa de baudios correspondiente al puerto serie de Arduino (no al puerto serie de Bluetooth).

Ahora, escribe AT y pulsa el botón de enviar. Obtendrás "OK" como respuesta.

escriba AT y pulse el botón de enviar

Envía el siguiente mensaje en el terminal. Puedes elegir tu nombre. Una vez que envíe el siguiente mensaje, obtendrá una respuesta como OK.

AT+NAME=<new device name>

Enhorabuena, tu módulo Bluetooth HC-05 ya está listo con un nuevo nombre. Apague todo y vuelva a encenderlo. 

Cuando escanees la lista de dispositivos en tu móvil ahora, el módulo Bluetooth aparecerá con el nuevo nombre que acabas de actualizar.

Preguntas frecuentes sobre la conexión entre Arduino y el módulo Bluetooth HC-05

¿Cómo conectar el Arduino Mega al HC-05?

No hay ninguna diferencia en el comportamiento del código cuando se conecta el Arduino Mega en lugar del Arduino UNO al HC-05.

Puedes utilizar el código anterior y hacer que el proyecto funcione. Asegúrate de que los pines serie están correctamente asignados. 

Nota: Arduino Mega tiene más de un puerto serie. Esto significa que no tienes que usar la función SoftwareSerial. Es una de las ventajas de usar Arduino Mega para este proyecto en lugar de Arduino UNO.

¿Cómo se conecta el Bluetooth a Arduino?

El Arduino UNO no dispone de Bluetooth. Puedes conectar el Arduino a un enlace Bluetooth utilizando tarjetas complementarias. HC-05, HC-06 y HM-10 son algunos ejemplos.

Estas tarjetas complementarias te ayudan a activar la opción Bluetooth del Arduino UNO.

Son muy útiles para crear proyectos inalámbricos de bajo consumo. 

¿Puedo controlar el Arduino con Bluetooth?

Sí, puedes controlar el Arduino utilizando el Bluetooth. En los ejemplos anteriores, puedes ver que es sencillo utilizar los módulos Bluetooth HC-05 para controlar el Arduino utilizando tu smartphone.

Conclusión

En este tutorial, hemos aprendido que el HC-05 es un complemento muy útil. Este dispositivo de bajo coste añade excelentes funciones a tus proyectos y nos permite crear bonitas aplicaciones.

He utilizado el módulo para controlar un dispensador de agua.

Espero que hayas disfrutado del artículo, que hayas aprendido sobre el módulo HC-05 y que ahora estés capacitado para crear proyectos inalámbricos Bluetooth.

Si tiene alguna pregunta o sugerencia, déjela en la sección de comentarios.

David Lindsay

Saturday 20th of April 2024

Would like to be able to see fuel level on my iPhone from external tank in back of my truck. Fuel sensor will have 0-190 ohms output. Sensor needs to be sent to Bluetooth

As you can tell, I am not knowledgeable in this area. Can you help me with this.

Thanks, David Lindsay

Stefan Maetschke

Saturday 20th of April 2024

Hi David, If you just need a remote fuel gauge, I would go with some existing product, e.g. https://amzn.to/3W76qB0 instead of trying to build one yourself. It would be a fun project but a bit of a challenge for a first project.

Riley

Saturday 8th of July 2023

I found a typo in Project 1.

The LED is being set high in both cases of the flag variable:

else if (flag == 0) { digitalWrite(LED, HIGH); Serial.println("LED Off"); }

Here is the solution:

else if (flag == 0) { digitalWrite(LED, LOW); Serial.println("LED Off"); }

Stefan Maetschke

Saturday 29th of July 2023

Good catch. Thanks. Has been fixed.

Thomas Kane

Domingo 4 de diciembre de 2022

El "Serial Monitor" y el IDE NO muestran un "botón" de "Enviar": en la pantalla. En su lugar, el Monitor Serial muestra "Mensaje (Ctrl+Enter para enviar el mensaje a 'Arduino Uno' en 'COM9')". Esto hace que NO aparezca en pantalla el hc05/Sketch. ¿Puedo enviar el comando codificándolo en el sketch? ¿Cómo puedo leer la respuesta del HC05?

Tom Kane / Vancouver, BC, Canadá - 3 de diciembre de 2022