• 953779710
  • Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

IES JUAN LÓPEZ MORILLAS

Módulo Bluetooth HC-06

Módulo Bluetooth HC-06


El Bluetooth es un protocolo de comunicaciones que sirve para la transmisión inalámbrica de datos y voz entre dispositivos que se encuentran a corta distancia, dentro de un radio de alcance que no suele superar los diez metros. Esta transmisión se realiza a través de ondas de radio que operan en la banda no comercial de los 2,4 GHz.

Los dispositivos Bluetooth pueden actuar como Master (maestro), pudiendo conectarse a diferentes Slaves (esclavo), o ser esclavo y poder conectarse a un solo maestro. Cada dispositivo Bluetooth tiene una dirección única y un nombre de dispositivo que nos sea más fácil reconocer a los humanos que un código de 48 bits y normalmente se incluye también un código PIN de conexión para obtener acceso a él. Es necesario realizar el emparejamiento (pairing) de los dispositivos con tecnología Bluetooth que queremos conectar. Normalmente este emparejamiento, si la conexión se ha realizado con éxito, queda guardada en lo dispositivos conectados y no es necesario volver a realizarla.

El módulo HC-06 nos proporciona esta tecnología de comunicación para poder utilizarla con nuestro Arduino. Este módulo dispone de 4 pines para poder establecer la conexión con nuestro Arduino.

 

  1. Alimentación Vcc. Normalmente lo conectaremos a 5V de Arduino.
  2. GND. Normalmente conectado a GND de Arduino.
  3. Recepción RX. A través de este pin el HC-06 recibirá los datos del Arduino que posteriormente se transmitirán por Bluetooth. Se conecta al pin TX de Arduino.
  4. Transmisión TX. A través de este pin el HC-06 transmite los datos que le llegan desde el dispositivo emparejado mediante Bluetooth. Se conecta al pin RX de Arduino.

Un ejemplo de conexión sería el siguiente:

Vamos a realizar un sencillo sketch para comprobar el funcionamiento del módulo. Nos presentará Arduino a través del monitor serie los caracteres que vayamos enviando desde un teléfono móvil a través de Bluetooth. Para ello utilizaremos una aplicación en nuestro teléfono móvil tal como Blue Term, Bluetooth SPP o desarrollar una propia con App Inventor. 

/*
* Sketch sencillo para probar
* el módulo Bluetooth HC-06
*
* Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
*/

void setup() {
//Iniciamos la conexión serie
Serial.begin(9600);
}



void loop() {
//Comprobamos si hay datos en el puerto
if(Serial.available()){
//Almacenamos los datos recibidos en una variable
char dato=Serial.read();
//Mostramos un mensaje
Serial.print("Se ha recibido el siguiente dato: ");
//Mostramos el dato recibido
Serial.println(dato);
}

El programa va a devolver cualquier dato que se reciba a través de Bluetooth. Para realizar la carga del programa a nuestra placa Arduino debemos desconectar los pines RX TX, ya que internamente los usa Arduino para establecer la comunicación con el ordenador desde el que cargamos el programa.

Abrimos la aplicación, abrimos el menú, pulsamos en conectarse a un dispositivo y en la lista seleccionamos el HC-06. Cualquier carácter que pulsemos se enviará a nuestro Arduino y podremos visualizarlo en el monitor serie del mismo.

 

 

 

Para soslayar el problema de los pines RX y TX de Arduino podemos utilizar la librería SoftwareSerial con la que crearemos el objeto Bluetooth en el que definiremos los pines de Arduino a los que lo hemos conectado.

 

Vamos a probar un sketch para enviar comandos AT al módulo HC-06. Los comandos AT son comandos de configuración utilizados en los módulos de comunicaciones. Podemos por ejemplo cambiar el nombre del dispositivo, la velocidad de comunicación etc. Utilizaremos para comunicarnos con Arduino los pines 2 y 3.

Para poder utilizar la librería SoftwareSerial la incluimos en nuestro sketch:


#include <SoftwareSerial.h> //Incluimos librería SoftwareSerial
SoftwareSerial HCBT(3,2) //Pines Rx y TX conectados a Arduino

Inicializamos el nuevo puerto serie que acabamos de crear y el puerto serie Arduino. Comprobamos si el módulo HC-06 está disponible y leemos los datos y hacemos lo mismo con nuestro puerto Arduino. 


void setup() {
HCBT.begin(9600); //Inicializamos el puerto serie
Serial.begin(9600); //Inicializamos el puerto serie

El código completo sería algo así:

/*
* Sketch para prueba módulo HC-06
* creando un puerto serie nuevo
* para dejar libres RX y TX en Arduino
* Lo usaremos para probar comandos AT
* Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
*/

#include <SoftwareSerial.h> //Incluimos librería SoftwareSerial
SoftwareSerial HCBT(3,2); //Pines Rx y TX conectados a Arduino

void setup() {
HCBT.begin(9600); //Inicializamos el puerto serie
Serial.begin(9600); //Inicializamos el puerto serie
Serial.println("Introduce un comando AT: ");
}

void loop() {
//Escribimos datos desde HC-06 a Monitor Serie
if(HCBT.available()){
Serial.write(HCBT.read());
}
//Escribimos desde Monitor Serie a HC-06
if(Serial.available()){
HCBT.write(Serial.read());
}
}

Vemos que es similar al anterior con la modificación de la creación de nuestro propio puerto de comunicación con el módulo.

Escribimos AT en monitor serie de Arduino y nos aseguramos de seleccionar las opciones «No fin de linea» y 9600 baud para la transmisión. Si todo está correcto deberíamos recibir un mensaje de OK. En caso contrario hay que comprobar si todas las conexiones son correctas.

Si quisiéramos cambiar el nombre del módulo deberíamos escribir en monitor serie ATNAMEnombre. El módulo debería responder OK setname. Si por ejemplo queremos ponerle el nombre HCBT deberíamos escribir ATNAMEHCBT

Para cambiar el código PIN del módulo escribiremos AT+PIN****. La respuesta debería ser OKsetPINPara establecer por ejemplo como PIN el 6789 deberíamos escribir AT+PIN6789.

Si lo que queremos es modificar la velocidad de comunicación del módulo HC-06 (lo cual no recomiendo), hay que escribir AT+BAUDx donde se corresponde con un código de la siguiente tabla:

  • 1 - 1200
  • 2 - 2400
  • 3 - 4800
  • 4 - 9600
  • 5 - 19200
  • 6 - 38400
  • 7 - 57600
  • 8 - 115200

Por tanto si queremos establecer la velocidad en 9600 deberíamos escribir AT+BAUD4 y deberíamos recibir la respuesta OK9600.

Es posible que estos comandos AT varíen en función de la versión del módulo. Se puede comprobar enviando el comando AT+VERSION y comprobar la hoja de características de esa versión para ver los comandos AT que le corresponden a esa versión.

 

Otro sketch para practicar con el módulo sería el siguiente. La comunicación se establece a través de una aplicación realizada con App Inventor y que puede descargarse en el fichero adjunto al post.

/*
* Sketch para probar la conexión Bluetooth
* del módulo HC-06 con una APP
* creada con APP Inventor
*
* Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
*/

#include <SoftwareSerial.h>
SoftwareSerial HCBT(3,2);
String comando="";
float valor_sensor=0;

void setup(){
//Inicializamos monitor serie
Serial.begin(9600);
//Inicializamos el módulo HC-06
HCBT.begin(9600);
}

void loop(){
//Leemos datos desde HC06
while(HCBT.available()>0){
comando+=(char)HCBT.read();
}
//Seleccionamos función con comando
if(comando!=""){
Serial.print("Comando recibido : ");
Serial.println(comando);
// Esperamos ON o OFF desde el módulo
if(comando=="ON"){
Serial.println("Está en ON");
}
else if(comando=="OFF"){
Serial.println("Está en off");
}
else{
Serial.println("Está en OFF por defecto");
}
comando=""; //reinicia cmd
}
// Simulamos medidas de sensores
valor_sensor=(float)random(256); // número aleatorio entre 0 y 255
//Escribe los datos del sensor en HC06
HCBT.print(valor_sensor);
delay(150);
}

Localización

Visitas

0917849
Hoy: 13
Ayer: 30
Esta semana: 166
Última semana: 255
Este mes: 1.184
Último mes: 1.028