En este tutorial, te enseñaré cómo configurar los módulos Bluetooth HC-05 y HC-06 para que puedas utilizarlos en proyectos junto con Arduino UNO. Esto te permitirá comunicar tu Arduino con un PC o un smartphone, o incluso permitir la comunicación entre dos ARDUINOS de manera inalámbrica mediante el uso de comandos AT. ¡Empecemos a configurar estos compactos y fáciles de usar dispositivos!
Comunicación por Bluetooth
Bluetooth es una tecnología que permite la comunicación inalámbrica de voz y datos entre dispositivos a través de un enlace de radiofrecuencia en la banda ISM de 2.4 GHz. Se utiliza para crear redes personales de área (WPAN).
La especificación de Bluetooth establece una tasa de transmisión máxima de 720 kbps (con una capacidad bruta de 1 Mbps) y un rango óptimo de 10 metros (que puede aumentarse hasta 100 metros con repetidores). La potencia de transmisión para alcanzar una distancia máxima de 10 metros es de 0 dBm (1 mW), mientras que la versión de largo alcance transmite entre 20 y 30 dBm (entre 100 mW y 1 W).
Los objetivos principales de esta norma son:
-
- Facilitar las comunicaciones entre equipos móviles.
- Eliminar los cables y conectores entre estos.
- Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la sincronización de datos entre equipos personales.
Los dispositivos que con mayor frecuencia utilizan esta tecnología pertenecen a sectores de las telecomunicaciones y la informática personal, como PDA, teléfonos móviles, computadoras portátiles, ordenadores personales, impresoras o cámaras digitales.
Existen multitud de módulos Bluetooth en el mercado que podemos utilizar junto con arduino u otros microprocesadores, pero los más utilizados son los módulos de JY-MCU, puesto que son pequeños, compactos, de bajo consumo energético, muy económicos y por supuesto fáciles de encontrar en el mercado. Existen dos modelos de módulos Bluetooth: el HC-05 que puede trabajar como maestro/esclavo y el HC-06 que solo puede actuar como esclavo.
La diferencia entre maestro y esclavo es que en modo esclavo es el dispositivo quien se conecta al módulo, mientras que en modo maestro es el módulo quien se conecta con un dispositivo u otro módulo.
Físicamente, los dos módulos son muy parecidos, y la mejor manera de diferenciarlos es por los pines de E/S que nos ofrecen, es decir, 4 para el HC-06 y 6 pines para el HC-05. A continuación os describo la función de cada uno de los pines y su correspondiente conexión con los pines de Arduino:
-
- VCC: Alimentación del módulo entre 3,6V y 6V.
- GND: Masa del módulo.
- TXD: Pin para la transmisión de datos.
- RXD: Pin para la recepción de datos. Trabaja a un voltaje de 3,3V, aunque la mayoría de módulos ya trae conversor de niveles lógicos integrado, con lo que lo podemos conectar directamente al pin TX de Arduino (5V) sin tener que recurrir a HARDWARE externo para bajar el voltaje.
- EN: Pin para entrar en el modo de configuración del módulo (solo en el modelo HC-05).
- STATE: Pin de estado (salida) para conectar un led y visualizar cuando se está comunicando el módulo (solo en el modelo HC-05).
Aunque no hay diferencias significativas en el hardware entre ambos modelos, sí hay diferencias en el firmware, es decir, en la programación interna del módulo. El HC-06 entra en modo de programación (comandos AT) siempre que lo enciendes y no esté conectado a él ningún dispositivo a través de Bluetooth. En cambio, el HC-05 es un poco más complicado de configurar en modo comandos AT y requiere un modo de arranque específico que veremos más adelante.
Ahora que hemos explicado las diferencias entre los dos modelos de módulos Bluetooth, vamos a profundizar en la configuración de cada uno. Primero, necesitamos conocer qué son los «comandos AT». Estos son un tipo de comandos utilizados para configurar el módulo Bluetooth a través de un microcontrolador, una computadora o cualquier dispositivo con una conexión serie (TX/RX, RS232). En este caso, vamos a utilizar el monitor serie del IDE de Arduino para enviar estos comandos al módulo Bluetooth a través de la comunicación serie y recibir una respuesta de estado a través del mismo monitor serie.
Los comandos AT son instrucciones que nos permiten cambiar, por ejemplo, la velocidad de comunicación del módulo (baudios), el código de emparejamiento (PIN) o el nombre. Para utilizar estos comandos, el módulo Bluetooth no debe estar vinculado a ningún dispositivo (el LED rojo del módulo parpadeando).
Una vez conectado un dispositivo al módulo Bluetooth, el LED rojo deja de parpadear y automáticamente se sale del modo de comandos AT para entrar en el modo de transporte de información. Esto significa que cualquier cosa que envíes, incluyendo comandos AT, se considerará texto plano y se reenviará al otro extremo de la conexión Bluetooth. Recuerda que solo puedes enviar comandos AT mientras no estés conectado a otros dispositivos Bluetooth.
Módulo Bluetooth HC-06
El módulo Bluetooth HC-06 viene configurado de fábrica como esclavo y no se puede cambiar, pero sí es posible configurar otras características utilizando comandos AT. A continuación, se resumen algunos de los valores predeterminados más importantes que viene con este módulo:
-
- Nombre: “linvor” o “HC-06”.
- Código de emparejamiento por defecto (PIN): 1234.
- Velocidad de comunicación (baud rate): 9600 bps (siempre que lo modifiquemos también lo tenemos que modificar dentro del programa para que se pueda comunicar correctamente).
- Configuración de paridad en la comunicación: Sin paridad.
Cabe destacar que el módulo HC-06 tiene dos estados los cuales es importante conocer:
- Modo comandos AT
- El módulo entra a este modo tan pronto como lo alimentas y cuando no se ha establecido una conexión Bluetooth con ningún otro dispositivo.
- EL LED del módulo permanece parpadeando (frecuencia de parpadeo del LED es de 102ms).
- En este modo es cuando se debe enviar los comandos AT, en el supuesto de que se quiera configurar. Si se envían otros datos diferentes a los comandos AT el módulo HC-06 los ignorará.
- Modo Conectado
- El módulo entra a este modo cuando se establece una conexión con otro dispositivo Bluetooth.
- El LED permanece encendido (sin parpadear).
- Todos los datos que se ingresen al módulo HC-06 por el Pin RX, se trasmiten por Bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente.
- En este modo el módulo HC-06 no puede interpretar los comandos AT.
Ahora vamos a configurar el módulo Bluetooth HC-06 utilizando comandos AT enviados desde el monitor serie del IDE de Arduino. Una vez compilado y cargado el código «Comandos_AT_HC-06» en nuestro Arduino, podemos abrir el monitor serie.
Al enviar un comando AT, no se debe incluir ningún carácter de LF (nueva línea) ni CR (retorno de carro) al final del comando. En el monitor serie del IDE de Arduino, debemos seleccionar «Sin ajuste de línea». Luego, escribimos el comando «AT» (siempre con mayúsculas) y pulsamos ENVIAR para comprobar que la comunicación es correcta. Como se puede ver en la imagen, el módulo Bluetooth nos responde con un OK.
Ahora únicamente vamos a modificar el nombre del módulo insertando el comando “AT+NAMEArduino_HC-06”, respondiéndonos el módulo HC-06 a través del monitor serie con “OKsetname”. Los demás parámetros los vamos a dejar como nos vienen por defecto de fábrica. A continuación os dejo una tabla con los comandos AT más utilizados para el módulo HC-06.
A continuación les dejo este video con las instrucciones de lo que hemos explicado hasta ahora:
Módulo Bluetooth HC-05
A diferencia del HC-06, el módulo Bluetooth HC-05 requiere un proceso específico para entrar en el modo de comandos AT. Para ello, debes presionar el botón del módulo mientras abres el monitor serie del IDE de Arduino. Esto es necesario porque el pin «EN» del módulo debe estar activado en nivel alto (HIGH) antes de que el módulo comience a funcionar.
- Nombre del módulo: “H-C-2010-06-01” o «HC-05» (Se puede modificar pero no nos responde con el nombre)
- Pin o contraseña: 1234 (+PSWD:1234)
- Modo de trabajo: Modo Esclavo (+ROLE:0)
- Modo de conexión: Se conecta al módulo Bluetooth especificado (+CMOD:0)
- Velocidad de transmisión: 38400 bps; Bit de parada: 1 bit; Bit de paridad: Sin paridad (+UART:38400,0,0)
Cabe destacar que el módulo HC-05 tiene tres estados los cuales es importante conocer:
- Modo comandos AT
- El módulo entra en este modo de funcionamiento si mantenemos presionando el botón que trae mientras abrimos el monitor serie y cuando no se ha establecido una conexión Bluetooth con ningún otro dispositivo.
- EL LED del módulo permanece parpadeando (frecuencia de parpadeo del LED es de 2 segundos).
- En este modo es cuando se debe enviar los comandos AT, en el supuesto de que se quiera configurar. Si se envían otros datos diferentes a los comandos AT el módulo HC-05 los ignorará.
- Modo Conectado
- El módulo entra a este modo cuando se establece una conexión con otro dispositivo Bluetooth.
- El LED permanece encendido (sin parpadear).
- Todos los datos que se ingresen al módulo HC-05 por el Pin RX, se trasmiten por Bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente.
- En este modo el módulo HC-05 no puede interpretar los comandos AT.
- Modo Desconectado
- El módulo permanece inactivo, es decir, ni emite ni recibe datos y el LED parpadea con una frecuencia de 102ms.
Ahora vamos a configurar el módulo Bluetooth HC-05 utilizando comandos AT enviados desde el monitor serie del IDE de Arduino. Una vez compilado y cargado el código «Comandos_AT_HC-05» en nuestro Arduino, podemos abrir el monitor serie, siempre manteniendo presionado el botón del módulo.
A diferencia del módulo HC-06, al enviar un comando AT desde el monitor serie, este módulo espera que la línea acabe en “\r\n” y entonces es cuando ejecuta el comando AT. En el Monitor Serie de IDE de Arduino tenemos que poner “Ambos NL&CR” para terminar las líneas , escribimos el comando “AT”, aunque este módulo no distingue entre mayúsculas y minúsculas, y pulsamos ENVIAR para comprobar que la comunicación es correcta. Como se puede observar en la imagen vemos que el módulo Bluetooth nos responde con un OK.
Ahora únicamente vamos a modificar el nombre del módulo insertando el comando “AT+NAME=Arduino_HC-05”, respondiéndonos el módulo HC-05 a través del monitor serie con “OK”. Los demás parámetros los vamos a dejar como nos vienen por defecto de fábrica. A continuación les dejo una tabla con los comandos AT más utilizados para el módulo HC-05.
Lista de Materiales
- Arduino UNO Rev.3
- Cable USB tipo A-B
- Módulo Bluetooth HC-06
- Módulo Bluetooth HC-05
- Protoboard
- Cables de conexión
Código del programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
/* TITULO: Configurar módulo Bluetooth HC-06 mediante comandos AT AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa podemos configurar el módulo Bluetooth HC-06 mediante comandos AT, de la siguiente manera: - Valores por defecto del módulo bluetooth HC-06: - Nombre: “linvor” o “HC-06”. - Código de emparejamiento (pin): 1234. - Velocidad de comunicación (baud rate): 9600 bps. - Sin paridad. - AT: Test de comunicación. Responde con un OK. - AT+VERSION: Retorna la versión del Modulo. Responde con OKlinvorV1.8 (o la versión que sea) - AT+BAUDx: Configura la velocidad de trasmisión del modulo según el valor de “x” (1 = 1200 bps, 2 = 2400 bps, 3 = 4800 bps, 4 = 9600 bps (por defecto), 5 = 19200 bps, 6 = 38400 bps, 7 = 57600 bps, 8 = 115200 bps, 9 = 230400 bps, A = 460800 bps, B = 921600 bps, C = 1382400 bps. Por ejemplo con el comando AT+BAUD4 se configura la velocidad de comunicación a 9600 baud rate. Responde con OK9600. - AT+NAMEx: Configura el nombre con el que se visualizara el modulo, soporta hasta 20 caracteres. Por ejemplo con el comando AT+NAMEArduino_HC-06 configura el nombre del modulo a Arduino_HC-06. Responde con OKsetname. - AT+PINxxxx: Configura el Pin de acceso al modulo (contraseña), 1234 por defecto. Con el comando AT+PIN1234 se configura el pin a 1234. Responde con OKsetPIN. Configuración de Paridad (solo configurable para versiones V1.5 o superiores) - Configuración de la paridad (para versiones V1.5 o superiores) - AT+PN: Sin paridad. Responde con OK None. - AT+PO: Paridad impar. Responde con OK Odd. - AT+PE: Paridad par. Responde con OK Even. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| Pin RX del módulo Bluetooth HC-06 | [ ]3V3 +---+ 10[ ]~| Pin TX del módulo Bluetooth HC-06 | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - Alimentación del módulo Bluetooth HC-06: - Pin +5V del módulo Bluetooth HC-06 --> +5V de Arduino. - Pin GND del módulo Bluetooth HC-06 --> GND de Arduino. */ // Añadimos la librería que permite añadir pines para la comunicación serie #include <SoftwareSerial.h> // Definimos el objeto para la comunicación serie SoftwareSerial BT(10,11); // 10 RX, 11 TX. void setup() { Serial.begin(9600); // Comienzo la comunicación con el monitor serie BT.begin(9600); // Comienzo de la comunicación con el módulo Bluetooth HC-06 (por defecto) Serial.println("Esperando comandos AT ..."); } void loop() { // Si hay datos disponibles en el monitor serie if(Serial.available()) { // Escribimos los valores en el módulo bluetooth HC-06 BT.write(Serial.read()); } // Si hay datos disponibles en el módulo bluetooth HC-06 if(BT.available()) { // Mostramos los valores en el monitor serie Serial.write(BT.read()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
/* TITULO: Configurar módulo Bluetooth HC-05 mediante comandos AT AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa podemos configurar el módulo Bluetooth HC-05 mediante comandos AT, de la siguiente manera: - AT+ORGL: Restauramos los valores por defecto del módulo Bluetooth HC-05. Responde con OK. - Modo de trabajo: Modo Esclavo (+ROLE:0). - Modo de conexión: Se conecta al módulo Bluetooth especificado (+CMOD:0). - Velocidad de transmisión: 38400 bps; Bit de parada: 1 bit; Bit de paridad: Sin paridad (+UART:38400,0,0.) - Pin o contraseña: 1234 (+PSWD:1234). - Nombre del módulo: “H-C-2010-06-01” o "HC-05" (Se puede modificar pero no nos responde con el nombre) - AT: Test de comunicación. Responde con OK. - AT+VERSION: Preguntamos por la versión del módulo Bluetooth HC-05. Responde +VERSION:2.0-20100601. - AT+UART=X,Y,Z: Configura la velocidad de trasmisión del modulo según el valor de “X” (1200 bps, 2400 bps, 4800 bps, 9600 bps, 19200 bps, 38400 bps, 57600 bps, 115200 bps, 230400 bps, 460800 bps, 921600 bps y 1382400 bps. Con el valor de "Y" se configura el bit de parada (0 -> 1 bit y 1-> 2 bits) y con el valor de "Z" se configura el bit de paridad (0 -> Sín paridad, 1 -> Paridad impar y 2 -> Paridad Par). Con el comando AT+UART=38400,0,0 se configura el módulo Bluetooth HC-05 con una velocidad de comunicación de 38400 bps, con un bit de parada y sin paridad. Nos responde con OK. - AT+UART: Preguntamos por el estado de la comunicación UART. Nos responde con +UART:38400,0,0. - AT+NAME=XXXX: Configura el nombre con el que se visualizara el módulo, soporta hasta 20 caracteres. Por ejemplo con el comando AT+NAME=Arduino_HC-05 configura el nombre del modulo a Arduino_HC-05. Responde con OK. - AT+PSWD=XXXX: Configura el Pin o la contraseña de acceso al modulo Bluetooth HC-05. Con el comando AT+PSWD=1234 se configura el pin a 1234. Responde con OK. - AT+PSWD: Preguntamos por el pin. Nos responde con +PSWD:1234. - AT+CMODE = X: Cambiamos el modo de conexión del módulo (0 -> Se conecta al dispositivo Bluetooth especificado y 1 -> Se conecta a cualquier dispositivo Bluetooth disponible). Con el comando AT+CMODE = 1 se configura el módulo Bluetooth HC-05 para que pueda conectarse a cualquier dispositivo Bluetooth disponible (sin dirección requerida). Responde con OK. - AT+CMODE: Preguntamos por el modo de conexión del módulo. Responde con +CMOD:1. - AT+ROLE = X: Cambiamos el modo de trabajo del módulo (0 -> Modo Esclavo y 1 -> Modo Maestro). Con el comando AT+ROLE = 0 configuramos el módulo Bluetooth para que trabaje como Esclavo de otro dispositivo Bluetooth. Responde con OK. - AT+ROLE: Preguntamos por el modo de trabajo del módulo. Responde con +ROLE:0. Aunque hay multitud de comandos AT, los anteriores son los que vamos a utilizar con una mayor frecuencia. **NOTA: Para entrar en el modo de comandos AT (LED parpadea cada 2 segundos) tenemos que estar presionando el botón que trae el módulo al ejecutar el monitor serie del IDE de Arduino . ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| Pin RX del módulo Bluetooth HC-05 | [ ]3V3 +---+ 10[ ]~| Pin TX del módulo Bluetooth HC-05 | [ ]5v -| A |- 9[ ]~| Pin EN del módulo Bluetooth HC-05 | [ ]GND -| R |- 8[ ] | Pin VCC del módulo Bluetooth HC-05 | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - Alimentación del módulo Bluetooth HC-05: - Pin VCC del módulo Bluetooth HC-05 --> Pin digital 8 de Arduino. - Pin GND del módulo Bluetooth HC-05 --> GND de Arduino. */ // Añadimos la librería que permite añadir pines para la comunicación serie #include <SoftwareSerial.h> // Definimos el objeto para la comunicación serie SoftwareSerial BT(10,11); // 10 RX, 11 TX. int VCC = 8; // Pin digital para alimentar el módulo Bluetooth HC-05 int EN = 9; // Pin digital para la habilitación del módulo Bluetooth HC-05 void setup() { pinMode(VCC, OUTPUT); // Pin digital 8 como salida pinMode(EN, OUTPUT); // Pin digital 9 como salida digitalWrite(EN, HIGH); // Habilitamos el módulo Bluetooth HC-05 delay(500); // Esperamos 500 ms digitalWrite (VCC, HIGH); // Encendemos el módulo Bluetooth HC-05 Serial.begin(9600); // Comienzo la comunicación con el monitor serie BT.begin(38400); // Comienzo de la comunicación con el módulo Bluetooth HC-05 (por defecto) Serial.println("Esperando comandos AT ... "); } void loop() { // Si hay datos disponibles en el monitor serie if(Serial.available()) { // Escribimos los valores en el módulo bluetooth HC-05 BT.write(Serial.read()); } // Si hay datos disponibles en el módulo bluetooth HC-05 if(BT.available()) { // Mostramos los valores en el monitor serie Serial.write(BT.read()); } } |
En conclusión, en este post hemos visto cómo configurar los módulos Bluetooth HC-05 y HC-06 mediante comandos AT para trabajar con ellos en proyectos junto con Arduino Uno. Hemos aprendido cómo utilizar los comandos AT para cambiar la velocidad de comunicación del módulo, el código de emparejamiento (PIN), el nombre, entre otras características. También hemos visto las diferencias entre los dos modelos de módulos Bluetooth, especialmente en cuanto al modo de programación y a su comportamiento como maestro o esclavo.
Espero que este post haya sido útil para aquellos que estén interesados en configurar módulos Bluetooth con Arduino. Si tienes alguna duda o quieres compartir tu experiencia con estos dispositivos, no dudes en hacerlo en la sección de comentarios. ¡Gracias por leer!