Bluetooth HC-05.pdf
Transcript of Bluetooth HC-05.pdf
Bluetooth HC-05 y HC-06 Tutorial de Configuración by Jesus Ruben | feb 21, 2014 | Radio, Tutoriales | 22 Comments
Los módulos de bluetooth HC-05 y HC-06 son módulos muy populares para aplicaciones
con microcontroladores PIC y Arduino. Se trata de dispositivos relativamente
económicos y que habitualmente se venden en un formato que permite insertarlos en un
protoboard y cablearlo directamente a cualquier microcontrolador, incluso sin realizar
soldaduras. En esta entrada del blog vamos a explicar un poco del funcionamiento de
estos módulos y como configurarlos. También abordaremos las diferencias entre el HC-
05 y el HC-06.
En la foto de portada del artículo vemos de izquierda a derecha: los módulos HC-05
y HC-06 en formato amigable para protoboard y un módulo HC-05 en formato
compatible con zócalos para Xbee (módulo bluetooth bee).
Módulo Bluetooth HC-05 El módulo de bluetooth HC-05 es el que ofrece una mejor relación de precio y
características, ya que es un módulo Maestro-Esclavo, quiere decir que además de
recibir conexiones desde una PC o tablet, también es capaz de generar conexiones hacia
otros dispositivos bluetooth. Esto nos permite por ejemplo, conectar dos módulos de
bluetooth y formar una conexión punto a punto para transmitir datos entre dos
microcontroladores o dispositivos. En otro artículo posterior veremos como configurar
dos módulos HC-05 para que se enlacen entre ellos y podamos transmitir
información de un punto a otro.
Módulo HC-05 montado en una tarjeta adaptadora compatible con zócalos Xbee
El HC-05 tiene un modo de comandos AT que debe activarse mediante un estado
alto en el PIN34 mientras se enciende (o se resetea) el módulo. En lasversiones para
protoboard este pin viene marcado como “Key”. Una vez que estamos en el modo de
comandos AT, podemos configurar el módulo bluetooth y cambiar parámetros como el
nombre del dispositivo, password, modo maestro/esclavo, etc.
Para comunicarnos con el módulo y configurarlo, es necesario tener acceso al
módulo mediante una interfaz serial. Podemos usar un arduino con un par de cables
(aprovechando el puente USB-Serial del Arduino), un kit para XBee o un simple MAX3232
en el puerto serie de la PC. Para este artículo estaremos usando unmódulo Bluetooth
Bee Pro que comercializamos en nuestra tienda web, así como una interfaz USB-Serial
con socket Xbee “Foca” que también vendemos. Este es el hardware que utilizamos en
nuestro taller, pero también es posible hacer los ensayos con el módulo HC-05 suelt0 o en
formato para insertar en el protoboard sin mayor problema.
Para las pruebas y configuración del módulo bluetooth es conveniente tener a mano un adaptador USB-
Serial TTL como los basados en el FT232RL o circuitos similares. Nosotros usamos las tarjetas mostradas
en la fotografía para probar los comandos descritos en este artículo.
Diferencias HC-05 vs HC-06 y como identificarlos Muchas personas y tiendas en internet venden el HC-06 y HC-05 como un mismo módulo,
muchas veces uno pide un HC-05 y terminan vendiéndoles un HC-06. Esto se debe a que
esencialmente el hardware es el mismo para ambos módulos. La única diferencia real es
el firmware que viene cargado de fábrica. De hecho, si tenemos paciencia, podemos
convertir un HC-06 a un HC-05 nosotros mismos con solamente cambiar el firmware de los
módulos, pero quedas advertido: ¡Hay que construir la interfaz de programación!
Existen unos módulos aptos para insertarse en el protoboard que nos permiten una fácil
identificación del módulo soldado antes de comprar. En estos módulos, losHC-05
normalmente tienen dos pines extra (además de TX, RX, VCC, GND) etiquetado
como “Key” y “State”. El pin “key” es necesario para entrar al modo de comandos AT en
el módulo HC-05 (pin 34) y por lo tanto, solo se instala cuando el módulo de bluetooth a
bordo es un HC-05. También podemos identificar si se trata de un HC-05 por la forma en
que se identifican con otros dispositivos bluetooth: El HC-05 se identifica como “HC-05″,
mientras que el HC-06 se identifica como “Linvor” o “HC-06″.
La fotografía muestra una comparación entre los módulos HC-05 (izquierda) y HC-06 (derecha) en su
versión para insertar en protoboard. El HC-05 tiene 2 pines extra
Interfaz de configuración de comandos AT en HC-05 El puerto serie en modo de configuración para el HC-05 debe configurarse de la siguiente
manera: 34800 bps, 8 bits de datos, Sin paridad, Sin control de flujo.Para entrar al
modo de comandos AT seguimos los siguientes pasos:
1. Poner a estado alto en el pin 34 (PIO11)
2. Conectar la alimentación del módulo (o resetearlo de preferencia)
3. Enviar un comando AT\r\n para comprobar que estemos en modo de comando AT.
La siguiente lista es una compilación de los comandos que consideramos importantes
AT\r\n Comando de prueba, debe responder con OK\r\n
AT+ROLE=1\r\n Comando para colocar el módulo en modo Maestro (Master)
AT+ROLE=0\r\n Comando para colocar el módulo en modo Esclavo (Slave)
AT+VERSION?\r\n Obtener la versión del firmware
AT+UART=115200,1,2\r\n Configurar el modo de funcionamiento del puerto serie en
“modo puente”
AT+PIO=10,1\r\n Colocar el pin de IO de propósito general a nivel alto
Existen otros comandos AT que están documentados en la hoja de datos que proveen
nuestros amigos de iTeadStudio. Podemos encontrar la hoja de datos (datasheet) del HC-
05 en la siguiente dirección:
http://biblioteca.geekfactory.mx/Bluetooth_Bee_Pro/datasheet_hc-05.pdf
Es importante notar que al módulo HC-05 no le agradan los caracteres \r o \n sueltos
al finalizar un comando. Siempre debemos mandarle \r\n para finalizar cada
comando, por lo que debemos configurar nuestro programa de terminal serial para
que siempre envíe \r\n al final de cada linea. Si utilizamos el “Monitor Serial” del IDE
de arduino hay que configurarlo de la siguiente forma:
Interfaz de configuración de comandos AT en HC-06 El HC-06 tiene un firmware distinto y también un funcionamiento distinto en cuanto a su
modo de configuración. Para poder configurar el HC-06 es necesario que este NO este
emparejado ni siendo usado por ningun dispositivo. De igual forma que el HC-05 es
necesario conectarlo a la PC y usar un programa de terminal para darle instrucciones de
configuración (Comandos AT), aunque también podemos escribir un programa de arduino
o en un microcontrolador para configurarlo.
Para conectarlo con la PC utilizamos un adaptador USB serial como se muestra en la foto:
Realizando pruebas con un módulo HC-06 y una tarjeta USB serial con FT-232RL
El módulo HC-06 acepta un set muy básico de comandos (algo raros por cierto), que
permite pocas configuraciones, pero que sin duda será util para personalizar este
económico módulo y configurarlo para satisfacer las necesidades de la aplicación.
Los comandos que soporta son:
Prueba de funcionamiento:
Envíar: AT
Recibe: OK
Configurar el Baudrate:
Envíar: AT+BAUD<Numero>
El parámetro número es un caracter hexadecimal de ‟1′ a „c‟ que corresponden a los
siguientes Baud Rates: 1=1200, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600,
8=115200, 9=230400, A=460800, B=921600, C=1382400
Recibe: OK<baudrate>
Configurar el Nombre de dispositivo Bluetooth:
Envíar: AT+NAME<Nombre>
Recibe: OKsetname
Configurar el código PIN de emparejamiento:
Envíar: AT+PIN<pin de 4 digitos>
Recibe: OK<pin de 4 digitos>
Obtener la version del firmware:
Enviar: AT+VERSION
Recibe: Linvor1.8
Si ya hemos trabajado con comandos AT observaremos que los comandos estan lejos del
estándar, lo más obvio es que:
No es necesario finalizar el comando con \r\n, pero si es necesario ingresar los comandos
con todos los caracteres seguidos sin pausas. NO hay necesidad de dar “enter” para
finalizar un comando. El modulo tiene un Temporizador que hace necesario introducir el
comando de una sola vez, sin pausas entre los caracteres.
Por lo anterior, si utilizamos un emulador de terminal hay que pegarlos en leste y no
escribirlos uno a uno con el teclado. También podemos usar el “monitor serial” de Arduino
configurado como se muestra en la imágen más arriba en este artículo.
Hay que tener cuidado de introducir TODAS LAS LETRAS DEL COMANDO en
MAYUSCULAS, ya que de lo contrario, no funcionarán.
Las respuestas no parecen respuestas estándar a comandos AT.
Conexión básica con Arduino Las conexiones para realizar con arduino son bastante sencillas. Solamente requerimos
colocar como mínimo la alimentación y conectar los pines de transmisión y recepción serial
(TX y RX). Hay que recordar que en este caso los pines se debe conectar cruzados TX
Bluetooth -> RX de Arduino y RX Bluetooth -> TX de Arduino. La siguiente imágen
muestra las conexiones básicas para que funcione el módulo
Conexión de un módulo HC-06 a Arduino. Hay que revisar la correspondencia de pines en la serigrafía, ya
que puede variar dependiendo del proveedor o lote.
En este caso estamos utilizando el hardware de UART, por lo que la comunicación con la
PC no será posible. Para poder utilizar la UART para comunicarse con la PC mediante
USB, es necesario utilizar un UART emulado por software, de manera que los pines de
comunicación con el módulo bluetooth queden en pines distintos.
El código para la comunicación a través del bluetooth es idéntico al que utilizaríamos para
comunicarnos con la PC vía USB. El siguiente ejemplo permite encender o apagar el led
de la tarjeta arduino mediante el módulo bluetooth. El código funciona de la siguiente
manera:
Al envíar el caracter E, se pone en estado alto la salida del pin 13
Al enviar el caracter A, se pone en estado lógico bajo la salida del pin 13
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
/************************* http://geekfactory.mx *******************************
*
* Sketch de prueba para modulos de bluetooth HC-05 y HC-06. Este programa puede
* controlar el led de la tarjeta arduino a través de la conexión bluetooth. El
* programa puede ampliarse para controlar una mayor cantiad de salidas.
*
* ESTE SKETCH USA EL PUERTO SERIE (UART), MISMO QUE ES UTILIZADO PARA
* LA COMUNICACIÓN USB. EL USO DE BLUETOOTH O USB ES MUTUAMENTE EXCLUSIVO
* (NO SE PUEDEN USAR AMBOS AL MISMO TIEMPO).
*
* PARA USAR LA CONEXIÓN USB Y BLUETOOTH AL MISMO TIEMPO ES NECESARIO EMULAR
UNA
* UART POR SOFTWARE.
*
* El funcionamiento es sencillo:
*
* Enviar un caracter 'A' para encender el led
* Enviar un caracter 'a' para apagar el led
*
*/
char rxChar; // Variable para recibir datos del puerto serie
int ledpin = 13; // Pin donde se encuentra conectado el led (pin 13)
// Configurar el arduino
void setup()
{
// Pin 13 como salida
pinMode(ledpin, OUTPUT);
// Comunicación serie a 9600 baudios
Serial.begin(9600);
}
// Ciclo infinito, programa principal
void loop()
{
// Si hay datos disponibles en el buffer
if( Serial.available() )
{
// Leer un byte y colocarlo en variable
rxChar = Serial.read();
// Procesar comando de un solo byte
if( rxChar == 'A' )
{
digitalWrite(ledpin, HIGH);
Serial.println("ON");
}
else if ( rxChar == 'a' )
{
digitalWrite(ledpin, LOW);
Serial.println("OFF");
}
}
// Podemos hacer otras cosas aquí
delay(100);
}
Conclusión Como podemos observar, los módulos HC-05 y HC-06 son bastante sencillos de
configurar para usarse con el microcontrolador de nuestra preferencia. El HC-06 es el
modelo más sencillo, presentando menos opciones para su configuración, pero siendo
bastante util y económico para conectar nuestros dispositivos con microcontroladores a la
PC, tablets, celulares, etc. El HC-05 por otra parte, nos permite hacer algunas cosas que
su hermano menor no permite, como enlaces punto a punto entre dos módulos y también
teniendo un juego de comandos más completo y un poco más “formal”, con algunas
características interesantes como el control de pines de GPIO.
Ambos módulos son excelentes para proyectos escolares, de investigación e incluso para
su integración en equipos o prototipos en el campo profesional, sin embargo, hay poca
documentación formal. Esperamos que este artículo sea de utilidad para comprender
mejor el funcionamiento y la configuración inicial.
Módulo Bluetooth HC-05 El módulo de bluetooth HC-05 es el que ofrece una mejor relación de precio y
características, ya que es un módulo Maestro-Esclavo, quiere decir que
además de recibir conexiones desde una PC o tablet, también es capaz de
generar conexiones hacia otros dispositivos bluetooth. Esto nos permite por
ejemplo, conectar dos módulos de bluetooth y formar una conexión punto a
punto para transmitir datos entre dos microcontroladores o dispositivos. En otro
artículo posterior veremos cómo configurar dos módulos HC-05 para que se
enlacen entre ellos y podamos transmitir información de un punto a otro.
El HC-05 tiene un modo de comandos AT que debe activarse mediante un
estado alto en el PIN34 mientras se enciende (o se resetea) el módulo. En
las versiones para protoboard este pin viene marcado como “Key”. Una vez
que estamos en el modo de comandos AT, podemos configurar el módulo
bluetooth y cambiar parámetros como el nombre del dispositivo, password,
modo maestro/esclavo, etc.
¿Como configurarlo?
Para comunicarnos con el módulo y configurarlo, es necesario tener acceso al
módulo mediante una interfaz serial. Podemos usar un arduino con un par de
cables (aprovechando el puente USB-Serial del Arduino), un kit para XBee o un
simple MAX3232 en el puerto serie de la PC.
Conexión básica con Arduino.
Las conexiones para realizar con arduino son bastante sencillas. Solamente
requerimos colocar como mínimo la alimentación y conectar los pines de
transmisión y recepción serial (TX y RX). Hay que recordar que en este caso
los pines se debe conectar cruzados TX Bluetooth -> RX de Arduino y RX
Bluetooth -> TX de Arduino. La siguiente imágen muestra las conexiones
básicas para que funcione el módulo.
Bluetooth Arduino
6 - TX RX1
7 - RX TX1
12 - Vcc 5 v
13 - Gnd GND
34 - PIO11 3,3 v
Bueno ahora si iniciemos......
Paso 1 (Conectar el Bluetooth).
Debes conectar el bluetooth como se muestra en la grafica, de tal forma entrará
en modo AT y su velocidad de transmisión cambiara a 38400 Baudios, te darás
cuenta que entró en modo AT porque el led empezará a encenderse y
pausadamente.
Paso 2 (Cargar el Sketch al arduino).
#include <SoftwareSerial.h> SoftwareSerial serial2(6,7);
void setup() {
Serial.begin(9600);
serial2.begin(38400);
Serial.println("Configurando HC-05 By www.ardobot.com!");
Serial.println("********Configurando HC-05 *********");
Serial.println("************************************");
Serial.println("");
Serial.println(" introducir comando AT;");
}
void loop() {
if (Serial.available())
serial2.write(Serial.read());
if (serial2.available())
Serial.write(serial2.read());
}
Una ves cargado el código en tu placa Arduino, solamente tenes que introducir
los comandos AT, es muy fácil:
Paso 3 (Abrir el monitor Serial de Arduino IDE).
Debes abrir el Terminal de Arduino IDE, seleccionar 9600 Baudios como
velocidad de transferencia y habilitar la opcion "Ambos NL & CR". Al hacer esto
deberás ver lo que aparece en la imagen. Seguido de esto envía el comando "AT"
automáticamente deberás recibir como respuesta "OK" si esto fue exitoso esta
todo bien.
Ahora si quieres saber a que velocidad de transmisión esta trabajando
tu Bluetooth HC-05, escribe el comando"AT+UART" debes recibir como
respuesta "+UART : 9600,0,0 / OK".Si deseas cambiarla solo ingresa:
"AT+UART = 115200,0,0" Enter y recibes como respuesta "OK", para verificarlo
repite el procedimiento anterior.
Para cambiar el nombre de tu dispositivo escribe el comando "AT+NAME =
"nombre"" y para verificarlo vuelve a escribir el comando "AT+NAME". De esta
forma deberás realizar los mismos pasos con los diferentes comandos AT que
ofrece este dispositivo.
ARDUINO
COMUNICACIÓN BLUETOOTH Y
ARDUINO 17 DICIEMBRE, 2013 PRUEBAS DEJAR UN COMENTARIO
Añadirle lacomunicación mediante bluetooth al arduino es muy sencilla. Lo único que
tenemos que hacer es conseguir un adaptador bluetooth HC-05 o HC-06.
Este adaptador nospermite una comunicación serie con el dispositivo bluetooth al
que nos conectemos. Podemos configurarlo en modo maestro, el adaptador
seleccionara el dispositivo al que se quiere conectar, o en modo esclavo, el adaptador
estará a la espera de dispositivos que se quieran conectar a el.
El HC-05 / HC-06 es un componente de tipo smd, es decir, es como un integrado que
tendremos que soldar a nuestra placa con conectores de superficie.
Pero hay en el mercado infinidad de montajes que ya bien preparados para su conexión
directa con arduino. La alimentación estándar del HC-05/HC-06 es de 3.3v, pero el
sistema ya viene preparado para poderlo alimentarlo hasta los 6v.
Para conectarlo al arduino lo podemos hacer de dos formas,
1º Modo: Conectarlo directamente a los pines de Tx-Rx del
arduino.
Para ello solo tendremos que conectar el pin Tx del dispositivo bluetooth al Rx del
arduino, y el Rx del bluetooth al Tx del arduino. El problema que tiene este montaje,
es que eliminamos la posibilidad de utilizar el monitor del ide del arduino para depurar
el programa. Otro inconveniente que tiene, es que para poder programar el arduino, el
bluetooth no puede estar conectado a la placa del arduino.
2º Modo: Conectarlo a cualquier pin y utilizar la
librería “Software Serial”
Otra forma de conectarlo es utilizar las funciones que nos ofrece la librería “Software
serial”, para poder hacer que, cualquier pin del arduino, pueda funcionar como un
puerto serie. Lo único que tenemos que tener en cuenta es que el pin donde este
conectado el Tx del bluetooth sera el pin Rx, y donde este el Rx sera el Tx
Como programarlo
La programación es muy sencilla. Solo tendremos que crear una variable para poder
manejar el puerto serie.
Si lo conectamos directamente a los pines Rx-Tx del arduino solo tendremos que poner
1 Serial.begin(9600);
Si lo hacemos con la librería “Software Serial” tendremos que crear el puerto y luego
inicializarlo
1
2
3
4
5
6
7
// Creamos el puerto serie, le pasamos los pines que serán
// Tx (donde esta conectado en Rx del bluetooth)
// y Rx (donde esta conectado el Tx del bluetooth)
SoftwareSerial miPuetoSerie = SoftwareSerial(rxPin, txPin);
// Y lo inicializamos como cualquier puerto serie
miPuetoSerie.begin(9600);
Con esto ya tenemos establecida la comunicación del bluetooth con el arduino.
Para leer los datos del bluetooth utilizaremos en los dos casos
1 char unChar = miPuertoSerie.read();
Y para escribir utilizaremos
1 miPuertoSerie.print("Información a enviar");
Ejemplo de funcionamiento bluetooth HC-05/HC-06 y
arduino
Ejemplo de funcionamiento, enciende el led del arduino, pin 13, cuando recibe a través
del bluetooth un “1”, y lo apaga cuando recibe un “0”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
#define ledPin 13
// configura un nuevo puerto
SoftwareSerial miPuertoSerie = SoftwareSerial(rxPin, txPin);
int unChar;
void setup() {
miPuertoSerie.begin(9600);
}
void loop() {
// escucha la llegada de nuevos datos serie:
char unChar = miPuertoSerie.read();
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// imprime el caracter:
if (unChar > 0) {
switch (unChar) {
case '1':
digitalWrite(ledPin, HIGH);
miPuertoSerie.write("Led encendido");
break;
case '0':
digitalWrite(ledPin, LOW);
miPuertoSerie.write("Led apagado");
break;
}
}
}
Para probarlo, solo tendremos que enlazar nuestro teléfono, ordenador, etc. al
dispositivo bluetooth, en el caso del HC-05 aparece como “HC-05″ y en el caso del HC-
06 como “linvor” o “HC-06″. Y, con un programa de terminal, mandar un “1” o un “0”.
En mi caso lo probé con mi teléfono y la aplicación “BlueTerm”.
Using android mobile to control
arduino « on: February 13, 2013, 09:36:16 pm » Bigger Smaller Reset
Here is my android controlled arduino project. A simple app sends
data through SPP over bluetooth and switches an LED on and off.
The circuit is just a bluetooth module, arduino UNO, LED, resistor and
some wires.
The LED can be switched on using buttons as well as voice activation
(anything that contains the word 'on','off' or 'blink' - so saying 'turn
the LED on' works as well as just uttering 'on').
I created the app using MIT app inventor and this project was created
pretty much only to show how easy it is to write custom apps using
the tool and interface with microcotrollers in this manner. One could
use MIT app inventor to add more more features, such as using
accelerometer or GPS data to control the LED, switching the state
using text messages, web communication, not only send but also
receive data, etc.
...well the point is - MIT app inventor is pretty cool and you should
check it out
VIDEO OF IT -> http://youtu.be/41MRGjdVIMQ
Here is the app for download -
> http://speedy.sh/63Q9N/bluetoothforarduino-app-2.apk
and here is the source, you can upload it to MIT's app inventor and
modify as much as you want to -
>http://speedy.sh/mDyAk/bluetoothforarduino-app-1.zip
Here is the arduino code Code:
const int ledPin = 7; // the pin that the LED is
attached to
byte serialA;
void setup()
{
// initialize the serial communication:
Serial.begin(19200);
// initialize the ledPin as an output:
pinMode(ledPin, OUTPUT);
}
void loop() {
switch (serialA) {
case 1:
digitalWrite(ledPin, HIGH);
break;
case 2:
digitalWrite(ledPin, LOW);
break;
case 3:digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
}
void serialEvent(){
serialA = Serial.read();
}
MITappInventor.jpg (117.71 KB, 1019x733 - viewed 1954 times.)
MITappInventor2.jpg (110.13 KB, 1024x617 - viewed 1021 times.)
FILE0545.JPG (685.44 KB, 2048x1536 - viewed 765 times.)
FILE0546.JPG (709.89 KB, 1536x2048 - viewed 412 times.)