bclose

El módulo BlueTooth HC-05

ARduino y la conexión BlueTooth

Objetivos

 

 
    • Presentar el módulo HC-05.
    • Describir las ventajas y diferencias con el módulo HC-06.
    • Presentar más posibilidades con los comandos AT.
    • Presentar un montaje y programa que nos permite entrar directamente en modo de configuración de comandos AT..
 

Material requerido.

Imagen de Arduino UNO  Arduino UNO o equivalente.

conexiones
Algunos cables de protoboard, preferiblemente Dupont macho/hembra.
Imagen superior Un módulo BlueTooth HC-05, fijaros en que tiene 6 pines.

 

El módulo BlueTooth HC-05

 

En la sesión anterior presentamos algunos conceptos básicos sobre las redes Bluetooth y las funciones que se suelen realizar con ellos. Presentamos el concepto de Master y Slave y configuramos el modulo HC-06 que solo podía trabajar en el modo Slave.

En esta sesión, vamos a utilizar su hermano mayor el modulo HC-05, que puede configurarse tanto como Master que como Slave, y que además dispone de bastante más parámetros de configuración y capacidades de interrogación.

El aspecto externo es bastante similar  y la mejor manera de diferenciarlos es por los pines el soporte, 4 para el HC-06 y 6 pines para el HC-05.

Dispositivos bluetooth

En la última sesión insistimos en que no hay diferencias hardware entre ambos modelos, pero sí que hay diferencias muy importantes en el firmware (La programación interna del módulo).

Además, mientras que el HC-06 entra en modo de programación en cuanto lo enciendes y mientras no haya nadie conectado por Bluetooth, el HC-05 es ligeramente más complicado de colocar en modo comandos y requiere una cierta manera de arrancado, concretamente requiere que el pin KEY, (Que no estaba conectado el caso del HC-06) este en HIGH cuando encendemos el modulo.

He visto bastante información he internet que recomendaba unos ciertos procesos para arrancar el modulo que siempre me han parecido confusos y tienden a despistar a los que se acercan al tema por primera vez.

Por eso hemos decidido implementar este procedimiento en un Sketch de Arduino, para que podamos correrlo cuando necesitemos programar el módulo.

El procedimiento normal con estos módulos, suele ser conectarlos, ver la configuración y reprogramarlos con nuestras preferencias. Después mantendrá la programación hasta que decidamos cambiarla.

Pero parece que el proceso da bastante guerra, así que vamos a ver si podemos ayudar.

Conexión del BlueTooth HC-05 al Arduino

 

La conexión es muy sencilla aunque requiere algún cable más que el modulo HC-06, y algún cambio:

 

Diagrama de protoboard

 

En primer lugar, para que el HC-05 entre en modo comandos AT, requiere que cuando se enciende el modulo, el pin KEY este HIGH. Por eso hemos conectado la tensión Vcc del módulo BlueTooth al pin 8 de nuestro Arduino.

El consumo del módulo es mínimo y nuestro Arduino es capaz de alimentarlo sin problemas, por eso el modulo se encenderá cuando pongamos HIGH en el pin 9. Esto nos permitirá poner en HIGH el pin digital 8, al iniciar nuestro programa y después levantar el pin 8, de este modo cuando arranque entrara sin más en el modo de comandos AT.

El resto de los pines se conectan de forma similar a lo que hicimos en la sesión anterior. Txd y Rxd se deben conectar cruzados con los pines de comunicación de Arduino, que usaremos mediante la librería software Serial.

El pin State refleja, supuestamente, la situación en la que se encuentra el modulo y por ahora no vamos a utilizarlo.

 

Programa de control

 

Así pues, no tenemos nada nuevo en el programa excepto que alimentaremos el modulo desde el pin digital 8, para forzarle a entrar en el modo comandos AT. Nuestro programa quedaría poco más o menos así: Prog_71_1

#include <SoftwareSerial.h>

SoftwareSerial BT1(10, 11); // RX | TX
void setup()
   { pinMode(8, OUTPUT);        // Al poner en HIGH forzaremos el modo AT
     pinMode(9, OUTPUT);        // cuando se alimente de aqui
     digitalWrite(9, HIGH);
     delay (500) ;              // Espera antes de encender el modulo
     Serial.begin(9600);
     Serial.println("Levantando el modulo HC-06");
     digitalWrite (8, HIGH);    //Enciende el modulo
     Serial.println("Esperando comandos AT:");
     BT1.begin(57600); 
   }

void loop()
   {  if (BT1.available())
            Serial.write(BT1.read());
      if (Serial.available())
            BT1.write(Serial.read());
   }

Con este procedimiento garantizamos que el modulo HC-05 entra solo en modo AT comandos, y que nuestra consola nos va a servir para programarlo, y confío en que nos evite todas las complicaciones.

Mi HC-05 me envía a la consola un mensaje de Status en cuanto arranca en el modo AT, si es vuestro caso deberíais ver un mensaje en la consola. Si no es así,  o veis signos raros, suele ser indicador de que la velocidad de comunicación entre Arduino y el modulo es incorrecta.

Id probando velocidades hasta que veáis algún mensaje correcto. Enviar un AT siempre debería recibir una respuesta de OK.

 

Programando el HC-05 con comandos AT

 

Confío en que si hemos seguido los pasos anteriores cuando abras la consola deberías recibir un mensaje del módulo directamente, y si no, basta con que escribáis AT Intro, recibiréis un OK como muestra la captura de pantalla:

Muestra el mensaje de inicio

El mensaje que obtengáis no tiene por qué ser el mismo e incluso puede que no tengáis ningún mensaje en absoluto, pero es importante que os aseguréis de que tenéis seleccionado Ambos NL&CR para terminar las líneas.

El modulo HC-6, finaliza los comandos por tiempo y por eso en la sesión anterior usamos GetLine para conseguir líneas completas. Pero el HC-05, no hace esto sino que espera que la línea acabe educadamente  en \r\n y entonces ejecuta el comando.

 
  • Aparentemente el número de modificaciones de software con la que se venden estos módulos es bastante elevada y por ello no es fácil garantizar nada con ellos.
  • Aparentemente todos los módulos que he probado aceptan ordenes similares, pero no todos los módulos aceptan todas las ordenes,(Supongo que dependiendo del Firmware).
 

Cuando menos si escribís en mayúsculas AT e intro, deberías recibir una respuesta de OK en la consola. Y si es así podemos seguir viendo más comandos.

AT+VERSION, Requiere la versión del Firmware. En la captura de arriba muestra el resultado

AT+NAME, Requiere que nos informe del nombre que tiene asignado el modulo. Debería devolvernos un mensaje del tipo +NAME=HC-05, indicando que se llama HC-05.

 
  • El modulo HC-06 se podía renombrar exactamente así, pero no podíamos preguntarle qué nombre tenía asignado. Solo cambiarlo.
 

AT+NAMEXXXX, programa el nombre que queremos presentar cuando alguien nos localice:

AT+NAMECharly

AT+BAUD, nos permite solicitar la velocidad a la que está programado el modulo para hablar con Arduino, y AT+BAUDX, Fija la velocidad de comunicación entre el modulo y la consola de acuerdo a la siguiente tabla:

1 configura        1200bps
2 configura        2400bps
3 configura        4800bps
4 configura        9600bps (Default)
5 configura        19200bps
6 configura        38400bps
7 configura        57600bps
8 configura        115200bps

Ejemplo: AT+BAUD7 configura la comunicación a 57600 baudios

Si enviamos AT+BAUD, la respuesta es de la misma forma: BAUD=7 para indicar 9600.

AT+PIN, Solicita el PIN actual y  en la consola veris: PIN=1234 o similar.

AT+PINXXXX, configura el número de identificación personal, que se requerirá para establecer la vinculación

AT+PIN4516, establece 4516 como PIN.

 
  • Recordad que el PIN es el número de identificación personal, que usaremos al conectarnos al módulo, pues exigirá conocer la contraseña.
  • El PIN es de 4 dígitos siempre
 

Básicamente estos son los mismos comandos que aceptaba el modulo HC-06 pero el HC-05 acepta bastante más.

AT+ROLE Nos informa de si está configurado como Maestro 1, o como esclavo 0.

ROLE=0    (Esclavo)

AT+ROLE1  Configura el modulo como Master.

AT+ROLE0  Configura el modulo como Slave.

 
  • He visto muchos ejemplos por internet que indican que se debe usar un = para asignar valores, por ejemplo AT+ROLE=1, o que para pedir información de la velocidad hay que hacer AT+BAUD?, También he visto que varias páginas aseguran que para cambiar el PIN hay que hacer AT+PSSWD.
  • Yo no he sido capaz de que nada de eso me funcione así, y sin embargo en mi modulo funciona la sintaxis que os escribo en los ejemplos. Tengo que suponer que hay diferentes Firmwares que modifican la sintaxis porque no puedo creer que haya tantas nomenclaturas erróneas corriendo por la red.
  • Así que tendréis que probar cual es la que os funciona a vosotros.
 

No tendría demasiado sentido revisar aquí todos los posibles comandos AT, y por eso he preferido mostrar media docena de ellos, los más típicos, para que podáis experimentar y configurar el modulo.

Aquí tenéis una lista con algunos comandos a los que más o menos he encontrado sentido (Porque hay montones que no tengo ni idea para que sirvan).

 

AT COMMAND LISTING
COMMANDFUNCTION
ATTest UART Connection
AT+RESETReset Device
AT+VERSIONQuery firmware version
AT+ORGLRestore settings to Factory Defaults
AT+ADDRQuery Device Bluetooth Address
AT+NAMEQuery/Set Device Name
AT+RNAMEQuery Remote Bluetooth Device’s
AT+ROLEQuery/Set Device Role
AT+CLASSQuery/Set Class of Device CoD
AT+IACQuery/Set Inquire Access Code
AT+INQMQuery/Set Inquire Access Mode
AT+PSWDAT+PINQuery/Set Pairing Passkey
AT+UARTQuery/Set UART parameter
AT+CMODEQuery/Set Connection Mode
AT+BINDQuery/Set Binding Bluetooth Address
AT+POLARQuery/Set LED Output Polarity
AT+PIOSet/Reset a User I/O pin

 

Para aquellos que sientan curiosidad por saber que más se puede hacer con los comandos AT (Alguien habrá, ¿No?), les remito a un documento de Instructables que incluye un listado mayor de ellos. La dirección es:

Referencia comandos AT

Cuando hayamos programado el modulo como deseemos, podemos retirar la conexión del pin rotulado como KEY y el HC-05 está listo para trabajar normalmente sin aceptar ya comandos AT.

 

Atención 

Es importante comprender, que en cuanto conectemos algún dispositivo a nuestro modulo Bluettotth HC-05, la luz roja dejará de parpadear y automáticamente saldremos del modo de comandos AT para entrar en el de transporte de información, es decir, cualquier cosa que le enviemos, incluyendo comandos AT, se consideraran texto plano que se reenviará al otro extremos de la conexión Bluetooth.

Recordad que solo podemos enviar comandos AT mientras no estemos conectados

 

Resumen de la sesión

 

 
    • Hemos presentado el modulo BlueTooth HC-05.
    • Hemos visto las diferencias con el módulo HC-06 y que a diferencia de este, se puede configurar como maestro o como esclavo.
    • También hemos visto que acepta bastantes mas ordenes en comandos AT.
    • Hemos presentado un montaje que fuerza a entrar en el modo AT al módulo cuando arranca. Una vez programado podemos soltar el pin KEY y el modulo estará listo para el servicio.

 
 
 

 

 

 

 

(196) Comments

    • Alfonso

    Hola, ¿ como puedo conectar el hc-05 a los pines 0 y 1 del arduino nano? para convertirlo totalmente Bluetooth,
    Gracias, fantásticos tutoriales

    • Hola Alfonso, no lo he probado pero veo por ahí que puedes conectarlo así:

      GND y Vcc a nuestro arduino.
      TxD al pin Nº13 (D10)
      RxD al pin Nº14 (D11)

      Y utilizar la librería software serial de esta forma:

      #define RxD 10
      #define TxD 11

      SoftwareSerial BTSerial(RxD, TxD);

      Un saludo.

    • Víctor

    Una pregunta, se puede configurar el HC-05 para que, si lo adapto a un conector USB común, funcione como tarjeta bluetooth en mi computadora?

    • Hombre podrias, usando un arduino y un modulo HC-05 pero e smucho mas barato comprar un adaptador usb bluettooth ya montado

Give a Reply

WordPress Anti-Spam by WP-SpamShield