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.

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.

 
 
 

 

 

 

 

(249) Comments

    • Joaquín

    Hola, me parece que todo esta muy bien explicado, pero apesar de eso no puedo enviar ningun solo comando AT. Podrian ayudarme?
    Saludos

    • Hola Joaquín, pueden ser varias cosas.
      Que los cables estén al revés, recuerda, Tx a Rx y Rx a Tx.
      Que la velocidad que selecciones para el puerto serie no sea la que tiene configurada el HC-05.
      Recuerda también que en el monitor serie tienes que seleccionar Ambos NL & CR abajo a la derecha.

      Un saludo.

    • René

    Ivan el tutorial es bastante claro. Siguiendo la continuación de otros tutoriales de la página estoy en la controversia de que me parece que el HC-05 no se podrá utilizar para hacer un robot auto con motores DC, ya que los pines que se utilizan en los motores son utilizados para el módulo HC-05

    • Hola rené, no se que controlador de motores quieres usar, pero puedes utilizar para el bluetooth dos pines cualesquiera que soporte la librería Software Serial, así que si deberías poder. UN saludo.

    • Carlos

    Hola tengo un hc05 pero le cambie el pin y ahora no logro recordar cual le puse , hay algun programa que me permita conectarme a el

    • Puedes hacerlo con el comando AT AT+PSWD.

    • Vicent

    Hola , he conectado el módulo hc-05 en modo AT para comprovar que hay comunicación con el arduino y todo perfecto . Mi método de activación para el modo AT ha sido , antes de conectar el pin Vcc del modulo hc-05 a 5V ,he presionado el boton anexo al mismo , manteniendo este ,he conectado el pin Vcc a 5V i después he soltado el boton . He podido conectar-me perfectamente con el monitor serie del arduino y provar varios comandos . Después lo he vinculado ( sincronizado) con el mobil .
    Para salir del modo AT he desconectado el pin KEY y el módulo hc-05 continua parpadeando lentamente . Tambien he provado salir del modo AT desconectando el pin Vcc del módulo , parpadea rápidamente pero no conecta con el mobil ( deberia dejar de parpadear )

    He configurado UART=38400
    role =0 . Si pongo role=1 no puedo sincronizar-lo con el mobil.

    • SI entrar en detalles que descoozco de tu modulo y de lo que le hayas programado, cuando lo desconectas de tension y lo rearrancas deberias entrar en el modo normal. SI no es asi, es que le has programado algo que no se

  • Hola, quiero configurar un HC-05 como maestro pero en una Arduino Mega 2560, esto también me sirve o qué debo hacer? Estoy muy perdido, ayuda por favor.

    • Hola Erick, da igual el Arduino que vayas a usar los comandos AT para configurar el módulo son los mismos. Un saludo.

    • Luisa

    Buenas tardes, configuré el arduino tal como se muestra pero al intentar dar comandos AT no me los reconoce, aparece el mensaje en consola de “Levantando el modulo HC-06” y “Esperando comandos AT:” pero al hacer AT+ intro no aparece el Ok

    • Hola Luisa, Los ejemplos que ponemos en nuestros tutos estan comprobados repetidamente, pero a veces hay modulos BT de diferenctes fabricantes que pueden respondor de maneras diferentes por lo que tienes que hacer pruebas hasta dar con la clave

      • Abraham

      Hola! yo tenía el mismo problema con un hc05, después de probar todas las velocidades, coloqué el divisor de tensión en RX y el modulo comenzó a responder, asi que me ha tocado el modulo que si es sensible a los 3,3 voltios.

      • ¿Podrías explicarme como lo has hecho? Es decir, ¿como has dispuesto el hardware y como lo has programado? Tengo el mismo problema.
        Un saludo.

    • Reinel

    Buenas noches.
    He logrado vincular el hc-05 al arduino cambiar el nombre, pero ahora ningun celular detecta el bluetooth, y solo lo hacen cuando desvinculo el hc-05 del arduino, hay algun comando aparte de maestro y esclavo que ya intente al cambiar que me pueda solucionar este problema? gracias

    • Hola Reinel, Si estás usando el HC-05 como esclavo sólo puedes conectarlo a un único maestro, no puede estar conectado a dos a la vez. Si quieres que se le conecten varios dispositivos tienes q configurarlo como maestro.

Give a Reply

WordPress Anti-Spam by WP-SpamShield

¡Ofertón!

Robot Rover 4×4

Ahora por sólo

50€ + IVA

¡Lo quiero!