El módulo BlueTooth HC-05

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 similar.
    Imagen superior Modulo Bluetooth HC-05
    Cables Dupont Macho-Hembra Cables Dupont Macho-Hembra

     

    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

    ¡Accede al contenido!

    #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
    COMMAND FUNCTION
    AT Test UART Connection
    AT+RESET Reset Device
    AT+VERSION Query firmware version
    AT+ORGL Restore settings to Factory Defaults
    AT+ADDR Query Device Bluetooth Address
    AT+NAME Query/Set Device Name
    AT+RNAME Query Remote Bluetooth Device’s
    AT+ROLE Query/Set Device Role
    AT+CLASS Query/Set Class of Device CoD
    AT+IAC Query/Set Inquire Access Code
    AT+INQM Query/Set Inquire Access Mode
    AT+PSWDAT+PIN Query/Set Pairing Passkey
    AT+UART Query/Set UART parameter
    AT+CMODE Query/Set Connection Mode
    AT+BIND Query/Set Binding Bluetooth Address
    AT+POLAR Query/Set LED Output Polarity
    AT+PIO Set/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.

     

    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

     

    ¡Accede al contenido!

    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.
  •  

    Deja una respuesta