Configuración del módulo Bluetooth HC-05

En un artículo anterior explicaba cómo utilizar un módulo Bluetooth HC-05 para agregar conectividad a una placa Arduino. En esa ocasión utilicé el módulo con su configuración de fábrica, porque no era necesario introducir ninguna modificación a los valores originales. Sin embargo, en algunos casos debemos cambiar algunos de los parámetros de la configuración, como la velocidad por ejemplo, para lo cual debemos llevar el módulo a un estado particular de programación que nos permite cambiar ese y otros parámetros. En este artículo veremos cómo configurar el HC-05 conectándolo a una placa Arduino UNO.

En el artículo previo utilicé un módulo HC-05 del tipo “CZ-HC-05” marca “gomcu” que funciona en su totalidad con 5 Voltios y se conecta en forma directa al Arduino UNO. En este artículo, y para aprovechar la oportunidad de explicar un caso diferente, voy a emplear un módulo distinto, el “ZS-040”, que tiene la particularidad de funcionar con dos valores de tensión.

Módulo HC-05 modelo ZS-040

Este módulo tiene una alimentación de entre 3.6 y 5V, por lo que puede ser alimentado desde una placa que funcione con 5V, pero sus pines de datos operan a 3,3V. La salida de datos (TXD) puede conectarse directamente a un Arduino como el UNO, porque 3,3 Voltios son interpretados en una entrada del Arduino como un nivel ALTO, pero la entrada de datos (RXD) debe conectarse a través de un divisor resistivo que disminuya la tensión de la salida del Arduino, como se puede ver en la siguiente imagen:

Divisor resistivo en la entrada de datos del HC-05
Divisor resistivo en la entrada de datos del HC-05

Las conexiones se completan con los pines de alimentación GND y VCC, STATE que no se conecta y EN que nos servirá para forzar la entrada del módulo en el modo de configuración.

El modo configuración consiste en un modo especial de trabajo del HC-05 en el que los datos recibidos no son transmitidos sino que se interpretan como instrucciones o comandos que especifican qué parámetro interno se quiere consultar o modificar. Estos son comandos AT, que en general tienen el siguiente formato:

AT+(comando)?    Consulta el valor actual de un parámetro y lo devuelve

AT+(comando) = (Valor)  Establece  el valor de un parámetro

Ejemplo:

AT+NAME?

Respuesta: +NAME: HC05

y para cambiar el nombre:

At+NAME=ARDUINO (cambia el nombre de “HC05” a “ARDUINO”)

Respuesta: OK

El listado completo de los comandos AT puede encontrarse aquí.

Este módulo tiene la particularidad de contar con dos modos de configuración, uno que permite la modificación de cualquier parámetro y otro que tiene algunas limitaciones. En mis pruebas, la única diferencia que observé entre ambos modos fue en el comando que cambia el nombre al módulo (AT+NAME), que sólo puede realizarse en el primer modo. En ambos casos la velocidad de comunicación es de 38400 baudios.

Para poner el módulo en el modo “reducido”, hacemos lo siguiente:

  • Desconectamos su alimentación (VCC)
  • Apretamos el pulsador incorporado
  • Conectamos la alimentación (VCC) (ya podemos soltar el pulsador)
Conexiones para el modo reducido

En cambio, para entrar en el modo “completo” no nos sirve el pulsador y debemos conectar el pin EN a 3,3 Voltios (ya sea a la salida 3.3 del Arduino UNO o a 5V con un divisor resistivo idéntico al de la imagen anterior). El procedimiento en este caso es el siguiente:

  • Conectamos EN a 3,3V
  • Desconectamos la alimentación del HC-05 (VCC)
  • Conectamos la alimentación del HC-05 (VCC) (sin desconectar EN)

En ambos casos, se evidencia que el módulo está en modo programación porque el LED parpadea de manera lenta.

Conexiones para el modo completo

Para poder enviar los comandos AT al HC-05 y ver los valores que devuelve, usaremos la terminal serie del IDE de Arduino, cargando un pequeño programita al Arduino UNO que haga de “puente” entre la computadora y el módulo Bluetooth, de manera que todo lo que escribamos en la terminal salga por un puerto serie por soft del Arduino hacia el módulo (en los pines 10 y 11), y todo lo que éste responda entre al mismo puerto serie y sea copiado a la PC.

#include <SoftwareSerial.h>


SoftwareSerial ModuloHC05 (10, 11);  //pin RX, pin TX

void setup() {

 Serial.begin(38400);        //Inicializa puerto serie por hard
 ModuloHC05.begin(38400);    //Inicializa puerto serie por soft

}

void loop() {
 char dato;
 if (ModuloHC05.available()) {              //Llega algo por bluetooth?
  dato=ModuloHC05.read();                   //Leer lo que llegó
  Serial.write(dato);                       //Sacarlo a la terminal
 }

 if (Serial.available ()) {                 //Llega algo de la terminal?
  dato=Serial.read();                       //Leer lo que llegó
  ModuloHC05.write(dato);                   //Sacarlo al módulo
  Serial.write (dato);                      //Eco en la terminal
 }
           

}

Una vez cargado el programa en el UNO, configuramos el monitor serie en 38400 baudios y activamos “ambos NL y CR” en los ajustes de línea, porque el módulo HC05 espera que los comandos AT terminen con los caracteres <CR> y <LF>.

Configuración del monitor serie y algunos comandos

Como les digo siempre, espero que el artículo les haya sido de utilidad. Cualquier duda o sugerencia, en la sección de comentarios.

13 comentarios en «Configuración del módulo Bluetooth HC-05»

  1. Saludos Profe Tolocka, tengo un problema al querer conectar un HC05 maestro con varios esclavos (5 en total, también HC05). He hecho la conexión por ahora sólo con uno, pero si apago el maestro el esclavo sigue en estado de conexión, y si deseo reconectar el maestro a este mismo (por lo menos en un corto tiempo) no lo permite.

    EL sistema que deseo montar es, un maestro que contacta a un esclavo, le envía una activación y este le devuele alguna información, luego deberá contactar a los otros y repetir esclavo ya contactado.

    Una pregunta, ¿QUE ES LA ‘PAIR LIST’ y cómo se llena?, esto lo encontré buscando al respecto.

    Podrán servir los COMANDOS: AT+LINK, AT+DISC

    Les pido me indiquen cómo hacerlo, gracias. Mao

    Responder
  2. EL Codigo y diagramas me han funcionado muy bien. mi HC 05 estaba como maestro y ya lo he cambiado a esclavo pero aun asi no logro que mi celular lo reconozca como bluetooth .
    que podra ser????

    Responder
    • Hola Emilio, depende un poco del modelo, la salida LED o STATE provee la misma información que el led que tiene incorporado la placa e indica si está vinculada a otro dispositivo o en modo configuración.

      Responder
    • Hola Carlos, yo he usado varios robots, cada uno con su HC-05 configurado para tener un identificador (comando NAME) distinto, para que no se confundan. No se si eso responde tu inquietud

      Responder
  3. Hola Ernesto, gracias por tu publicación!! hace 2 días que estoy tratando de tener una comunicación con los comandos AT, cargué mas de 15 programas y ninguno me funcionaba, ya estaba pensando que mi hc-05 estaba fallado, hice una prueba más con el tuyo y entró de una!!
    Gracias por realizar esta publicación!!
    Saludos

    Responder
  4. buenas tardes ..alguien que me oriente se los agradezco … usando el BT HC05 …funciona bien conectandolo al pin (10 , 11) del arduino uno… pero deseo conectarlo a otros pines del arduino mega …por ejemplo pin (30, 31)…. pero no me funciona … existe algo para lograrlo… gracias por su atencion … mi mail es ….. magaza52@gmail.com

    Responder
  5. HOLA, TENGO UN PROBLEMA, NO PUEDO CAMBIAR LA VELOCIDAD DE TRANSMICION DE 9600 A 115200 EN OTRO MODULO HC 05 LO HABIA CAMBIADO CON AT+BAUD8. AHORA ME COMUNICO PERO NO PUEDO CAMBIAR

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias