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.

 
 
 

 

 

 

 

(186) Comments

    • Peter

    Hola estoy buscando un hc-05 con 7 pines

    • Hola Peter, me temo que nunca he visto nada asi

  • Disculpe pero utilicé un módulo bluetooth HC-5 y la luz no deja de parpadear … en cambio solo pasa a parpadear mas lento

    • Hola Edwin, ten en cuenta que el tutorial tiena ya casi 2 años y los fabricantes van cambiando el firm de estos modulos. Si ves que te funciona bien no te preocupes mucho

    • Antonio de León

    Aquí esta la SOLUCIÓN para los que tenemos el MÓDULO CON EL BOTÓN: https://www.youtube.com/watch?v=hyME1osgr7s En el esquemático hay un error de conexión pero allí en el video lo corrige, dice en el minuto 1 con 7 segundos “Switch Position RX to RX, TX to TX”. Arme el circuito del que les estoy hablando para poner el módulo en modo “Maestro”. Suerte.

  • Hola buenas estaba intentando enviar comandos AT desde el programa de arduino y me sale “esperando comandos AT”, escribo cualquiera de aqui arriba y no hace nada, ni el nombre ni nada. que puede ser? gracias!

  • Hola buenas estaba intentando enviar comandos AT desde el programa de arduino y me sale “esperando comandos AT”, escrib cualquiera de aqui arriba y no hace nada, ni el nombre ni nada. que puede ser? gracias!

    • Hola Marc,
      tiene toda la pinta de que tienes un problema de velocidad de comnicacion. Asegurate de que tanto arduino como la consola estan a 5600 baudios y preuba de nuevo

  • Resumiendo: ¿¿¿Se puede conectar un GamePad Bluetooth para movil al HC-05????
    Si esto depende del perfil bluetooth “Human Interface Device Profile” (HID) https://es.m.wikipedia.org/wiki/Perfil_Bluetooth#Advanced_Audio_Distribution_Profile_.28A2DP.29 ¿De que perfiles dispone el HC-05? ¿Solo podemos mandar texto usando comandos AT?
    Mi proyecto: Ya he conectado con el HC-05 y he manejado dos servos con un movil y una aplicación android. De esta forma manejo a distancia una GoPro, eje x/y. Tambien lo he movido con un mando nunchuk de Wii. Ahora quiero hacerlo con un dispositivo ya creado “gamepad”.

    • Hola Carlos, no he probado con un gamepad, pero me imagino que al final todo es lo mismo. Entiendo que enviara codigos numericos que representan los valores que pulses en el mando y deberias poder leerlos sin muchos problemas por tu arduino

  • mi modulo bluethoot no tiene entradas, que hago?

    • Con que no tiene entradas supongo que te refieres a que no tiene pines para conectarlo no?Tendrías que soldarle tú unos o soldar directamente el cable. Un saludo.

    • Chris

    Para todos aquellos que no logran que aparezca el “ok”, lo que deben de modificar es algo muy sencillo, cuando estén en monitor serial, en la parte inferior derecha, hay dos seleccionadores, uno es donde se escoge a que velocidad esta el monitor serial y otro que esta a lado izquierdo, que por default es “sin ajuste de linea”, deben de cambiar a “Ambos NL & CR”, y con eso debe de funcionar, claro esta que deben de revisar sus conexiones que estén bien, saludos

    • Jesus

    HOla, muchas gracias por este magnífico tutorial, siento comunicarte que no me funciona, no me responde con nada a ninguna velocidad.¿que puedo hacer?

    • Hola Jesús, asegúrate que el dispositivo al que lo estás conectando soporte Bluetooth 2.0 y que la velocidad de comunicación esté correctamente configurada.

    • Efrain

    Cuando trato de conectar el HC-05 a mi celular me sale un error 507, alguien podria ayudarme a solucionar este problema

    • Hola Efrain, puede ser que se deba a un problema de compatibilidad con tu smartphone. Tiene que ser compatible con bluetooth 2.0. Un saludo.

    • Marcos moreno

    Hola al igual que muchos que pusieron su comentario que no podían recibir respuesta del BT y que tienen en lugar del pin KEY un pin EN. el esquema de conexión que me funciono fue la siguiente: vcc – 5v gnd-gnd TX-puerto Dig:10 RX-puerto Dig:11 no conecte en lo absoluto el puerto EN. y el código el siguiente: como verán el BT con pin EN lo pongo en estado de comandos haciendo lo siguiente subo el código a mi arduino, desconecto el cable que alimenta los 5v, oprimo el botón que se encuentra en el BT y sin dejar de oprimirlo, conecto el cable de alimentación de los 5v. y se queda parpadeando los LED lentamente.
    Me funciono de esta manera espero ayudar a quienes tengan este modelo ..
    ==============================
    #include
    SoftwareSerial BT1(10, 11); // RX | TX
    void setup()
    { Serial.begin(9600);
    Serial.println(“Levantando el modulo HC-06”);
    Serial.println(“Esperando comandos AT:”);
    BT1.begin(38400);
    }

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

    • Muchas gracias por el aporte Marcos, seguro que vendrá muy bien a mas de uno

  • BUENOS DIAS, SI OCURRE QUE NO ME DA EL OK, SOLO SE ME QUEDA AHI A LA ESPERA DELCOMANDO, DOY AT PEOR NO ME RESPONDE OK QUEPODRIA SER

    • Hola Daniel, revisa un poco los comentarios de este tuto y veras que normalmente es un problema de acople de velocidades

    • Adriana

    Buenas tardes, estoy siguiendo los pasos para configurar el hc-06, pero no recibo ninguna respuesta del modulo, la pregunta es como puedo saber si esta dañado el modulo???? no puedo ir a comprar uno ahora, no se si esta transmitiendo

    • hola adriana, si revisas un poco los comemtarios acerca del modulo veras que lo mas probable es un problema de doferentes velocidades entre el modulo bt y tu arduino

    • Argelis

    Buenas estoy presentando un problema con el reconocimiento de los comandos AT en el bluethoo HC-05 (GW-040), cuando colocamos AT, no responde con un OK pero en el Arduino se enciende la luz verde de RX. Otro aspecto que notamos es que se enciende una luz azul junto con la luz roja en la inicialización del Bluetooth en comandos AT. Hemos compilado el siguiente código:

    #include

    SoftwareSerial mySerial(10, 11); // RX, TX

    void setup()
    {
    // Open serial communications and wait for port to open:
    Serial.begin(9600);
    mySerial.begin(38400);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }

    Serial.println(“configuracion!”);

    // set the data rate for the SoftwareSerial port

    }

    void loop() // run over and over
    {
    if (mySerial.available())
    Serial.write(mySerial.read());
    if (Serial.available())
    mySerial.write(Serial.read());
    }
    Esperando su pronta respuesta, muchas gracias!

    • buenos dias argelis, no estoy miy seguro de cual es tu consulta.puedes especificar un poco mas?

  • Hola,
    Tenía el mismo problema de configurar la velocidad que veo que le pasa a mucha gente. Por si le sirve a alguien comento lo que me ha pasado a mi con un módulo HC-05 nuevo comprado aquí en Prometec.

    – Me ha funcionado con velocidad 38400.
    – Tuve que revisar los pines Tx y Rx del Arduino. Van cruzados en relación a lo que indica el modulo (tal como se muestra en el esquema y se comenta en el texto). La primera vez lo hice sin fijarme bien y evidentemente no funcionó.
    – Debo escribir los comandos con “:” después del comando p.ex. “AT+NAME:HC-05”.
    – Los comandos me funcionan en minúsculas o mayúsculas.
    – Me responde “ERROR: (0)” si no entiende el comando

    Espero que le sirva a alguien. Un saludo!

    • Hola, un par de cosas más. Para establecer la comunicación con el PC he tenido que hacer lo siguiente:

      – Desconectar el cable KEY (en mi caso etiquetado como WAKEUP) y reiniciar el Arduino. En el texto de Charly está escrito “[…]podemos retirar la conexión del pin rotulado como KEY y el HC-05 está listo para trabajar normalmente sin aceptar ya comandos AT”. En mi caso no funciona si no reseteo el módulo.

      – En modo AT, he tenido que cambiar la velocidad con el comando “AT+UART:38400,0,0”. Inicialmente estaba a 9.600 y la comunicación no se establecía correctamente.

      Un saludo!

    • Buenos dias jordi. Muchas gracias por tu aporte, estoy seguro que ayudara a muchos lectores a avnazar con estos modulos.

      Siento los problemas encontrados y las diferncias con respecto a los modulos que yo use para la sesion. El problema es que resulta dificil asegurar que te sirva el mismo fabricante y mas aun con el mismo firmware, ya que cada uno parece que disfruta variando la norma general segun se le cruzs

    • Luis

    muchas gracias por tanta información aprecio mucho tu trabajo un saludo desde Peru, una pregunta como pongo un hc05 en modo transparente o no visible para los celulares cercanos excepto con los que haya emparejado previamente

    • Hola Luis, pues he estado buscando el modo y no he sido capaz de encontrarlo y sin embargo me extraña que no exista

  • Buenas, tengo un inconveniente, yo configure mi modulo bluetooth hc-05 en comandos AT a 9600 baudios y me funciono bien, y lo pude conectar a la aplicación de app inventor y me funciono bien al principio, pero después de un tiempo el enlace entre el bluetooth hc-05 y mi android empezó a fallar y se desconectaban, ahora intento conectarlos y al primer dato que yo le envió al bluetooth se desconectan. no se que pudo haber pasado.

    • Luis, parece mas un problema de cables o configuracion del puerto serie que otra cosa, pero naturalmente las cosas pueden estropearse

Give a Reply

WordPress Anti-Spam by WP-SpamShield