Objetivos
Material requerido.
Arduino Uno o similar. | |
Modulo Bluetooth HC-05 | |
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.
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:
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í:
#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:
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.
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.
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.
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.
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:
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
Resumen de la sesión