Hoy os traemos una nueva entrada donde hablamos del económico módulo bluetooth HC-06 y su funcionamiento con Arduino. Dicho módulo trabajo mediante conexión serie con el Arduino, y se comunica con el exterior mediante bluetooth, ya sea a través de un teléfono móvil, ordenador, tablet, etc.
El módulo en cuestión es este, lo he comprado ya con regulación a 3.3V, así que lo puedo conectar directamente a los 5V del Arduino sin problema (Aunque Arduino ya nos proporciona 3.3V, es mejor tener los 5V por si lo usamos en un montaje exterior sin la placa Arduino):
Como véis solo disponemos de 4 pines que son los necesarios, por un lado tenemos VCC que irá conectado a los 5V del Arduino, por otro GND que ira al pin GND de Arduino, después tenemos TXD que irá conectado al pin RXD del Arduino y RXD que irá al pin TXD de Arduino.
En concreto yo he probado dicho módulo en un teléfono HTC Desire S y con el software BlueTerm, y en el portátil con el software Octoplus Terminal (que es un software de comunicación-monitor serie).
Para añadir el módulo al pc mediante bluetooth se debe hacer como un puerto serie virtual, los pasos que yo he seguido son los siguientes:
1º Buscamos los dispositivos bluetooth:
2º Seleccionamos Puerto Serie Virtual:
3º Configuramos el puerto COM que queramos:
4º Finalizamos el proceso de añadir el módulo bluetooth:
Aquí está el video del funcionamiento del módulo:
Y aquí unas capturas para la comunicación del software BlueTerm con el módulo:
Aquí os dejo el código de comunicación para placas Arduino Uno, Mega y Nano:
//Programa prueba modulo bluetooth GP-GC021 o HC-06 //Probado con programas para android Blueterm y Amarino 2.0 //Probado con bluetooth portatil y software Octoplus Terminal //Programa realizado para www.tallerarduino.wordpress.com por Regata void setup() { //Pin donde conectamos el led para ver el correcto funcionamiento del modulo pinMode(13,OUTPUT); //Configuracion de la velocidad del modulo 9600 por defecto, se puede cambiar //mediante comandos AT Serial.begin(9600); } void loop() { //Mientras el puerto serie del modulo bluetooth esta disponible while (Serial.available()) { //Guardamos en la variable dato el valor leido por el modulo bluetooth char dato= Serial.read(); //Comprobamos el dato switch(dato) { //Si recibimos una 'w' encendemos el led 13 y enviamos para mostrar //en Blueterm Led encendido case 'w': { digitalWrite(13,HIGH); Serial.println("Led encendido"); break; } //Si recibimos una 'e' apagamos el led 13 y enviamos para mostrar //en Blueterm Led apagado case 'e': { digitalWrite(13,LOW); Serial.println("Led apagado"); break; } //Si recibimos una 'r' encendemos y apagamos el led mediante la secuencia //programa y mostramos en Blueterm Led intermitente case 'r': { digitalWrite(13,HIGH); delay(200); digitalWrite(13,LOW); delay(200); digitalWrite(13,HIGH); delay(100); digitalWrite(13,LOW); delay(100); Serial.println("Led intermitente"); break; } } } }
Aquí el código para la placa Arduino Leonardo:
//Programa prueba modulo bluetooth GP-GC021 o HC-06 //Programa para la placa ARDUINO LEONARDO //Probado con programas para android Blueterm y Amarino 2.0 //Probado con bluetooth portatil y software Octoplus Terminal //Programa realizado para www.tallerarduino.wordpress.com por Regata void setup() { //Pin donde conectamos el led para ver el correcto funcionamiento del modulo pinMode(13,OUTPUT); //Configuracion de la velocidad del modulo 9600 por defecto, se puede cambiar //mediante comandos AT Serial1.begin(9600); } void loop() { //Mientras el puerto serie del modulo bluetooth esta disponible while (Serial1.available()) { //Guardamos en la variable dato el valor leido por el modulo bluetooth char dato= Serial1.read(); //Comprobamos el dato switch(dato) { //Si recibimos una 'w' encendemos el led 13 y enviamos para mostrar //en Blueterm Led encendido case 'w': { digitalWrite(13,HIGH); Serial1.println("Led encendido"); break; } //Si recibimos una 'e' apagamos el led 13 y enviamos para mostrar //en Blueterm Led apagado case 'e': { digitalWrite(13,LOW); Serial1.println("Led apagado"); break; } //Si recibimos una 'r' encendemos y apagamos el led mediante la secuencia //programa y mostramos en Blueterm Led intermitente case 'r': { digitalWrite(13,HIGH); delay(200); digitalWrite(13,LOW); delay(200); digitalWrite(13,HIGH); delay(100); digitalWrite(13,LOW); delay(100); Serial1.println("Led intermitente"); break; } } } }
Aquí el código de configuración del módulo mediante comandos AT (el módulo no debe de estar emparejado):
/*Cambio de configuracion del modulo bluetooth mediante comandos AT para ello el modulo no debe estar vinculado con ningun dispositivo bluetooth, en mi caso el led debe estar en modo intermitente, si esta vinculado aparece encendido de forma permanente*/ int contador=1; void setup() { //Led 13 para indicar final de operacion de configuracion AT pinMode(13,OUTPUT); //Velocidad del modulo bluetooth, 9600 por defecto Serial.begin(9600); //Apagamos el led 13 digitalWrite(13,LOW); } void loop() { //Es para realizar los cambios una sola vez while (contador==1) { //Indicacion de tiempo de espera iniciado digitalWrite(13,HIGH); /*Tiempo de espera de 15 segundos (prudencial, se puede cambiar, depende de lo que tardes en volver a conectarlos) para reconectar cables RX y TX del modulo bluetooth a la placa Arduino ya que para programar esta deben estar desconectados*/ delay(15000); //Indicacion de tiempo de espera finalizado digitalWrite(13,LOW); //Iniciamos comunicacion con modulo bluetooth mediante comandos AT Serial.print("AT"); //Espera de 1 segundo según datasheet entre envio de comandos AT delay(1000); //Cambio de nombre donde se envia AT+NAME y seguido el nombre que deseemos Serial.print("AT+NAMEtallerarduino"); //Espera de 1 segundo según datasheet entre envio de comandos AT delay(1000); /*Cambio de la velocidad del modulo en baudios Se envia AT+BAUD y seguido el numero correspondiente: 1 --> 1200 baudios 2 --> 2400 baudios 3 --> 4800 baudios 4 --> 9600 baudios (por defecto) 5 --> 19200 baudios 6 --> 38400 baudios 7 --> 57600 baudios 8 --> 115200 baudios */ Serial.print("AT+BAUD4"); //Espera de 1 segundo según datasheet entre envio de comandos AT delay(1000); //Configuracion Password, se envia AT+PIN y seguido password que queremos Serial.print("AT+PIN1234"); //Espera de 1 segundo según datasheet entre envio de comandos AT delay(1000); //Mostramos tanto por puerto serial y por led la finalizacion de la //configuracion AT del modulo bluetooth Serial.print("OK Cambios Realizados correctamente"); digitalWrite(13,HIGH); //Al tener contador=2 ya no se vuelve a repetir el while, a no ser que //se produzca un reset, por tanto comenzaria un nuevo cambio de configuracion contador=2; } }
Por último os dejo los datasheets y los programas arriba expuestos:
http://www.mediafire.com/?m76srfxzx4i0amc
Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.