Practica con ARDUINO + BLUETOOTH

En este tutorial vamos a dotar al Arduino de comunicación Bluetooth usando un módulo Bluetooth, veremos cómo configurarlo y cómo enviar y recibir datos desde un dispositivo Android.

 

 

Material

-Arduino Uno Rev 3

-Módulo Bluetooth JY-MCU

-Dispositivo Android con Bluetooth

-Leds rojo, amarillo y verde

-Resistencias 220 ohms x 3, 5K6, 10K

 

Módulo Bluetooth

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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());
  }
}

Entre los dos modelos de módulo Bluetooth existen diferencias a la hora de enviar los comandos AT:

HC-06

En el HC-06 solo se necesitan cuatro pins: Vcc, GND, TXD y RXD. El pin KEY no es necesario.

Al enviar un comando AT no se debe enviar ningún carácter de LF (nueva línea) ni CR (retorno de carro) al final del comando.  En el Monitor Serial del Arduino tenemos que poner No hay fin de líena.

 

Los comandos AT que se pueden enviar en este módulo son los siguientes:

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 caracteres AT+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

 

Una vez compilado el código en el Arduino, abrimos el Monitor Serial y enviamos el comando AT, vemos que el módulo Bluetooth nos responde con un OK.

 

HC-05

El HC-05 es necesario poner el pin KEY del módulo a nivel alto (5V) para enviar comandos AT. Además, al enviar un comando AT hay que enviar un carácter de LF (nueva línea) y de CR (retorno de carro) al final del comando. Por lo tanto, en el Monitor Serial de Arduino pondremos Ambos NL & CR.

En el HC-05 se pueden enviar muchos más comandos AT que en el HC-06. Aquí os dejamos un archivo pdf con todos los comandos AT.

En el HC-05 se pueden enviar muchos más comandos AT que en el HC-06. Aquí os dejamos un archivo pdf con todos los comandos AT.

 En el HC-05 se pueden enviar muchos más comandos AT que en el HC-06. Aquí os dejamos un archivo pdf con todos los comandos AT.

Descarga aquí.

Recibir datos de un dispositivo Android

Ahora que ya sabemos cómo conectar y configurar un módulo Bluetooth en nuestro Arduino, vamos a vincularlo a un dispositivo Android con Bluetooth y enviar datos al Arduino mediante la aplicación BlueTerm, que es un emulador de terminal que permite comunicarse con un dispositivo Bluetooth para enviar y recibir información vía serie. La app es gratuita y se puede descargar desde este enlace.

Conectaremos tres leds de diferentes colores al Arduino y mediante unos comandos que ingresaremos en la app BlueTerm los encenderemos y apagaremos. En este ejemplo hemos usado un módulo HC-06 pero se puede usar también un HC-05 ya que no hay diferencia en este caso.

 

 

Código Arduino

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
/*
  www.diymakers.es
  by A.García
  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;
}

El código es bastante simple. Primero creamos un array de 256 posiciones tipo char llamado cadena para almacenar los caracteres que recibiremos de la app. Cuando haya datos disponibles los vamos guardando uno por uno en forma de carácter en la variable dato. Después ponemos estos caracteres por orden en el array cadena. Cuando reciba un carácter de fin de línea (\n), se compara el texto almacenado en el array con el texto que deseamos. Para hacer la comparación se usa la función strstr() que procede de C++ y que permite encontrar partes de texto en un String. Después de esto, se limpia el array poniendo a 0 todas las posiciones usadas para recibir el siguiente comando.

Configurar app Android

Una vez descargada la app la abrimos y en ajustes ponemos Conectarse a un dispositivo.

Pulsamos Buscar dispositivos y escogemos nuestro módulo Bluetooth que en nuestro caso le hemos puesto el nombre DIYMakers. Si no lo habéis cambiado pondrá por defecto LINVOR o HC-06.

 

Ponemos el PIN del módulo. Si no lo habéis modificado será 1234.

 Después de esto, arriba a la derecha pondrá conectado:<nombre> Significa que tenemos asociado nuestro dispositivo Android con nuestro módulo Bluetooth y el led de este deja de parpadear y se queda fijo.

Luego solo hay que poner los comandos para encender y apagar los leds. Cuando se escribe un comando tenemos que pulsar Enter del teclado para enviarlos al Arduino. En el terminal no se pueden borrar caracteres, por lo que si nos equivocamos pulsamos Enter y lo volvemos a escribir.

 

 

 

Related Articles

Este espacio lo he creado pensando en los entusiastas como tú, para compartir y centralizar documentación sobre temas que me apasionan: Arduino, impresoras 3D, Raspberry Pi, y mucho más.

Además, he querido fusionarlo con mi canal de YouTube, donde exploramos retro-informática, Raspberry Pi, consolas retro, electrónica y otras maravillas del mundo tecnológico. Este es tu sitio si disfrutas aprendiendo, creando y reviviendo lo mejor de la tecnología de ayer y hoy.

¡Bienvenido!