martes, 8 de septiembre de 2015

Hc-06 Bluetooth Module Slave With Adapter





El Bluetooth es un estándar de comunicación inalámbrica que permite la transmisión de datos a través de radiofrecuencia en la banda de 2,4 GHz. Existen muchos módulos Bluetooth para usarlos en nuestros proyectos de electrónica, pero los más utilizados son los módulos de JY-MCU, ya que son muy económicos y fáciles de encontrar en el mercado. Son módulos pequeños y con un consumo muy bajo que nos permitirán agregar funcionalidades Bluetooth a nuestro Arduino. Estos módulos contienen el chip con una placa de desarrollo con los pins necesarios para la comunicación serie.

Existen dos modelos de módulos Bluetooth: el HC-05 que puede ser maestro/esclavo (master/slave), y el HC-06 que solo puede actuar como esclavo (slave). 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.

Físicamente, los dos módulos son muy parecidos, solo varían algunas conexiones. Los pins que encontraremos son los siguientes:

  • Vcc: Alimentación del módulo entre 3,6V y 6V.
  • GND: La masa del módulo.
  • TXD: Transmisión de datos.
  • RXD: Recepción de datos a un voltaje de 3,3V.
  • KEY: Poner a nivel alto para entrar en modo configuración del módulo (solo el modelo HC-05)
  • STATE: Para conectar un led de salida para visualizar cuando se comuniquen datos.

Comandos AT

Los comandos AT son un tipo de comandos que sirven para configurar el módulo Bluetooth a través de un microcontrolador, un ordenador o con cualquier dispositivo que posea una comunicación serie (Tx/Rx). Son unas instrucciones que nos permiten cambiar los baudios del módulo, el PIN, el nombre, etc. Para usar los comandos AT el módulo Bluetooth no debe estar vinculado a ningún dispositivo (led rojo del módulo parpadeando). Según las especificaciones del módulo, el tiempo que se tiene que respetar entre el envío de un comando AT  y otro tiene que ser de 1 segundo. Si se envía un comando AT y en menos de un segundo se envía otro, el módulo no devuelve respuesta.

Ahora vamos a configurar el módulo Bluetooth a través de comandos AT enviados desde el Monitor Serial del Arduino. El código del Arduino necesario tanto por el módulo HC-05 como el HC-06 es el siguiente:

#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins
 
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(10,11); //10 RX, 11 TX.
 
void setup()
{
  BT.begin(9600); //Velocidad del puerto del módulo Bluetooth
  Serial.begin(9600); //Abrimos la comunicación serie con el PC y establecemos velocidad
}
 
void loop()
{
  if(BT.available())
  {
    Serial.write(BT.read());
  }
 
  if(Serial.available())
  {
     BT.write(Serial.read());
  }
}



Comando AT
Descripción
Respuesta
AT
Test de comunicación.
Responde con un OK
AT+VERSION
Retorna la versión del Modulo
OKlinvorV1.8
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
AT+BAUD4 Configura la velocidad a 9600 baud rate Responde con OK9600
AT+NAMEx
Configura el nombre con el que se visualizara el modulo, soporta hasta 20 caracteresAT+NAMEDIYMakers Configura el nombre del modulo a DIYMakers Responde con OKsetname
AT+PINxxxx
Configura el Pin de acceso al modulo (password).1234 por defecto.AT+PIN1122 Configura el pin a 1122 Responde con OKsetPIN




En HC-05 tiene más comandos descargar pdf o también se puede ver en la siguiente imagen 


Importante: Para hacer poder usar todos los comandos ANTERIORES, si o si, no tiene que estar conectado a un dispositivo. 
Por ejemplo si hacen lo siguiente (de abajo) que conectan el bluetooth al celular, van a poder apagar y prender leds, así como lo indican pero no van a poder mandar el comando AT, AT+VERSION, etc.
Para poder usarlo, vamos a tener que desconectarlo y recién probar.

Ejemplo app en Android para poder conectarse por bluetooth descargar sino se puede descargar directamente del playStore

Código
/*
  www.diymakers.es
  by A.García
  Arduino + Bluetooth
  Tutorial en: http://diymakers.es/arduino-bluetooth/
*/
 
#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins
 
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(10,11); //10 RX, 11 TX.
 
int green=4;
int yellow=5;
int red=6;
char cadena[255]; //Creamos un array de caracteres de 256 cposiciones
int i=0; //Tamaño actual del array
 
void setup()
{
  BT.begin(9600);
  Serial.begin(9600);
  pinMode(green,OUTPUT);
  pinMode(yellow,OUTPUT);
  pinMode(red,OUTPUT);
}
 
void loop()
{
  //Cuando haya datos disponibles
  if(BT.available())
  {
    char dato=BT.read(); //Guarda los datos carácter a carácter en la variable "dato"
 
    cadena[i++]=dato; //Vamos colocando cada carácter recibido en el array "cadena"
 
    //Cuando reciba una nueva línea (al pulsar enter en la app) entra en la función
    if(dato=='\n')
    {
      Serial.print(cadena); //Visualizamos el comando recibido en el Monitor Serial
 
      //GREEN LED
      if(strstr(cadena,"green on")!=0)
      {
        digitalWrite(green,HIGH);
      }
      if(strstr(cadena,"green off")!=0)
      {
        digitalWrite(green,LOW);
      }
      //YELLOW LED
      if(strstr(cadena,"yellow on")!=0)
      {
        digitalWrite(yellow,HIGH);
      }
      if(strstr(cadena,"yellow off")!=0)
      {
        digitalWrite(yellow,LOW);
      }
      //RED LED
      if(strstr(cadena,"red on")!=0)
      {
        digitalWrite(red,HIGH);
      }
      if(strstr(cadena,"red off")!=0)
      {
        digitalWrite(red,LOW);
      }
      //ALL ON
      if(strstr(cadena,"on all")!=0)
      {
        digitalWrite(green,HIGH);
        digitalWrite(yellow,HIGH);
        digitalWrite(red,HIGH);
      }
      //ALL OFF
      if(strstr(cadena,"off all")!=0)
      {
        digitalWrite(green,LOW);
        digitalWrite(yellow,LOW);
        digitalWrite(red,LOW);
      }
 
      BT.write("\r"); //Enviamos un retorno de carro de la app. La app ya crea una línea nueva
      clean(); //Ejecutamos la función clean() para limpiar el array
    }
  }
}
 
//Limpia el array
void clean()
{
  for (int cl=0; cl<=i; cl++)
  {
    cadena[cl]=0;
  }
  i=0;
}



 LF:    Salto de líneau000A
 CR:    Retorno de carrou000D
 CR+LFCR seguido por LF
 NEL:   Next Lineu0085
 FF:    Form Feedu000C
 LS:    Line Separatoru2028
 PS:    Paragraph Separatoru2029


Fuente: wikipedia

El Retorno de Carro (CR) carácter (0x0D, \r) mueve el cursor al principio de la línea, sin avanzar a la siguiente línea. Este carácter se utiliza como un carácter de nueva línea en Comodoro y Principios de los sistemas operativos de Macintosh (OS 9 y anteriores).

El avance de Línea (LF) carácter (0x0A, \n) mueve el cursor a la línea siguiente, sin volver al principio de la línea. Este carácter se utiliza como un carácter de nueva línea en los sistemas basados en UNIX (Linux, Mac OSX, etc)

El Fin de Línea (EOL) secuencia (0x0D 0x0A, \r\n) es en realidad dos caracteres ASCII, una combinación de la CR y LF caracteres. Mueve el cursor hacia abajo en ambos a la línea siguiente y al principio de la línea. Este carácter se utiliza como un carácter de nueva línea en la mayoría de los otros no son tipo Unix, sistemas operativos, incluyendo Microsoft Windows, Symbian OS y otros

Fuente: iteramos

Notas: Experiencia personal:
En mi experiencia utilice un mb102 y no tuve suerte. No funcionaba mi bluetooth, a pesar que led parpadeaba que parecía que tenía conexión, pero cuando le mandaba AT no me respondía el OK, desde el celular o desde la consola de la pc.
Después cambie el vcc y gnd del mb102 al que trae el arduino uno/mega y volvió a funcionar perfectamente.

1 comentario:

  1. Disculpa, soy novato en esto, tengo una arduino mega, no la uno, como puedo usar los comando AT con la arduino mega?

    ResponderEliminar