Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Feb 13, 2015 in Comunicación | 4 comments

Configurando Maestro o como Esclavo

Para esto ocuparemos 2 Módulo Bluetooth HC-05, 2 Arduino´s y la misma configuración del LED al pin

 “Ya que no sabemos que tiene cargado el Arduino es importante primero programarlo
y así prevenir voltajes de entrada indeseados a nuestros componentes.”

Apara esta configuración si es mesetario que se alimente con 3.3V y GND no 5V.
Para hacer la configuración KEY se ocupa en estado ALTO
y gracias a la biblioteca  <SoftwareSerial.h> podemos colorar a Tx y Rx en donde sea necesario.

http://biblioteca.geekfactory.mx/Bluetooth_Bee_Pro/datasheet_hc-05.pdf

Como lo menciona el Datasheet ese Modulo se puede habilitar como Maestro o como esclavo.
Usando códigos AT y la comunicación serial de muestro Arduino.
Rápidamente mencionare los principales códigos AT:

——————-“Configuración del modulo HC-05”———————–

Regresar a opción Fabrica            AT+RESET
Saber el nombre del modulo:      AT+NAME?
Cambiarlo a “MINOMBRE”:       AT+NAME=MINOMBRE
Saber configuración:                      AT+ROLE?
Cambiarlo al modo esclavo:        AT+ROLE=0
Cambiarlo al modo maestro:       AT+ROLE=1
Saber la contraseña:                        AT+PSWD?
Cambiarlo a 0000:                          AT+PSWD=1234  <---según la Contraseña a Conectar (max 4 char.)
Saber la velocidad (9600):          AT+UART?
Cambiarlo a 57600:                   AT+UART=57600,0,0
Saber modo de Conexión:          AT+CMODE?  (0 Espesifico 1 General)
A cualquier dispositivo:             AT+CMODE=1

Paso 1 Programar Arduino:

#include <SoftwareSerial.h>

#define RxD 11
#define TxD 10
#define KEY 9

SoftwareSerial BTSerial(RxD, TxD);

void setup()
{
pinMode(KEY, OUTPUT);
digitalWrite(KEY, HIGH);   // Como se mencionó en configuración colocar a KEY en estado alto.
 
delay(500);
 
BTSerial.flush();
delay(500);
BTSerial.begin(38400); // comunicación directa al Modulo.
Serial.begin(9600);        // comunicación directa al Monitor.
Serial.println("Enter AT commands:");
 
BTSerial.print("AT\r\n");
delay(100);
 
}
 
void loop()
{
if (BTSerial.available())
Serial.write(BTSerial.read());
 
if (Serial.available())
BTSerial.write(Serial.read());
}

Paso 2:

Una vez programado y Conectado el modulo, abriremos el IDE de Arduino el monitor serial

Modificamos los valores de velocidad a “9600 baud” y a “Ambos Nl y CR” y apriete el Reset del Arduino.

En este momento observaremos en la pantalla que dice: “Enter AT commands:”,

Por programa manda un AT enseguida por lo que la respuesta debe ser “OK”.

Revisar que el Bluetooth parpadea cada 2 Seg de lo contrario,

Desconectar el Bluetooth con el Arduino aun encendido (cable VCC al final)

y presionar botón Reset o abrir y cerrar Monitor Serial.

En este momento observaremos en la pantalla que dice: “Enter AT commands:”,

El programa manda un AT enseguida por lo que la respuesta debe ser un “OK”.

En caso contrario revisar Conexión, usualmente puede ser un error con los Tx y Rx.

Configuración para HC-05 en Modo Esclavo

Una vez abierta la puerta de configuración “OK”

Para cambiarlo al modo esclavo:  AT+ROLE=0 la respuesta debe se un “OK”

Verificamos respuesta AT+ROLE?  La respuesta debe ser “0”

Solo para estar seguros que conocemos la contraseña y la velocidad resisé los siguientes pasos:

Es importante ya que configuraremos

Cambiarlo a “MINOMBRE”:      AT+NAME=MINOMBRE
Saber el nombre del modulo:      AT+NAME?
Cambiarlo a 0000:                     AT+PSWD=1234  <---según la Contraseña a Conectar (max 4 char.)
Saber la contraseña:                               AT+PSWD?
Cambiarlo a 9600:                                 AT+UART=9600,0,0
Saber la velocidad (9600):          AT+UART?
Conectar a cualquier dispositivo:             AT+CMODE=1
Saber modo de Conexión:          AT+CMODE?  (0 Espesifico 1 General)

Ahora desconectamos el cable de key y reiniciamos el Arduino.

Verificamos preguntando una vez más lo esencial como Nombre, Contraseña, Modo, Velocidad.

(Puede que el nombre no arroje respuesta, pero siga adelante)

En caso ser exitosa la operación.

Para terminar desconecte por completo el Bluetooth, una ves apagado el Modulo

Solo alimente Vcc y GND las veces que sean necesarias hasta que vuelva al estado de Operación,

Eso es cuando esta parpadeando cada 1/2 segundo.

“Recomiendo etiquetar de alguna manera los Módulos,
a fin de asegurar que estamos Configurando un Módulo en específico”

Para el segundo Modulo Bluetooth HC-05, lo configuraremos en modo Maestro.

Configuración para HC-05 en modo Maestro

Una vez abierta la puerta de configuración “OK”

Para cambiarlo al modo esclavo:  AT+ROLE=1 la respuesta debe se un “OK”

Verificamos respuesta AT+ROLE?  La respuesta debe ser “1”

Punto importante es que la contraseña del esclavo sea la misma Contraseña que el Maestro entregue.

Así como su velocidad de operación. Lo dejamos en 9600 para seguir teniendo comunicación con Arduino.

Solo para estar seguros que conocemos la contraseña y la velocidad resisé los siguientes pasos:

Cambiarlo a “MINOMBRE”:      AT+NAME=MINOMBRE
Saber el nombre del modulo:      AT+NAME?
Cambiarlo a 0000:                     AT+PSWD=1234  <---según la Contraseña a Conectar (max 4 char.)
Saber la contraseña:                               AT+PSWD?
Cambiarlo a 9600:                                 AT+UART=9600,0,0
Saber la velocidad (9600):          AT+UART?
Conectar a cualquier dispositivo:             AT+CMODE=1
Saber modo de Conexión:          AT+CMODE?  (0 Espesifico 1 General)

En caso de solicitar Conectarse a una MAC específica, gracias a la App podemos ver su MAC.

Recomiendo ancar el Modulo Maestro a un Módulo Esclavo de esta manera aunque se apague y prenda nuevamente siempre ara conexión con solo ese modulo. Los pasos son los siguientes sin alterar el orden.

La MAC es muy fácil de ubicar en la App “Bluetooth Serial Controller” de cualquier modulo Esclavo, al intentar comunicarse haciendo búsqueda en la lupa. Revisar Tutorial “Comun. App-Android a Arduino”

Direcion especifica:                               AT+CMODE=0
Cambiarlo al modo maestro:       AT+ROLE=1
Espesificar Contraseña:              AT+PSWD=1234
Espesificar dirección MAC:        AT+BIND=98D3,31,B3FFB8  <---en este ejemplo “001312136293″
Iniciar SPP:                              AT+INIT
AT+IAC=9E8B33
AT+CLASS=0
AT+INQM=1,9,48
AT+INQ
AT+PAIR=0013,12,136293
AT+LINK=0013,12,136293

Todo debería arrojar un “OK”, digo debería ya que a mí no me mando OK siempre, pero funciono.

No hay estrés, prueben más adelante si logro la comunicación, ya en caso de contrario.

Repetir nuevamente el Proceso.

Ahora desconectamos el cable de key y reiniciamos el Arduino.

Verificamos preguntando una vez más lo esencial como Nombre, Contraseña, Modo, Velocidad.

(Puede que el nombre no arroje respuesta, pero siga adelante)

——————–“Encaso ser exitosa la operación”———————

Para terminar desconecte por completo el Bluetooth, una vez apagado el Modulo

Solo alimente Vcc y GND las veces que sean necesarias hasta que vuelva al estado de Operación,

Eso es cuando está parpadeando cada 1/2 segundo.

Comunicación Arduino – Arduino vía Bluetooth (HC-05 o HC-06).

 

Ya que no sabemos que tiene cargado el Arduino es importante primero programarlo

y así prevenir voltajes de entrada indeseados a nuestros componentes.

Recordemos que la transmisión (abreviatura: Tx) va a nuestra recepción (abreviatura: Rx) y viceversa.

Aunque el Modulo puede operar a 5V lo recomendable son los 3.3V para el ahorro de energía.

Y como respuesta Colocar un LED con una resistencia de 220 ohm del Pin 12 a GND.

El programa será el siguiente, tanto para HC-06 o HC-05 en modo Esclavo:

 

int ledPin = 12;  // usamos un pin de salida al LED
int state = 0;      // Variable lectrura serial
 
void setup() {
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);
    Serial.begin(9600);
}
 
void loop() {
    //si el modulo a manda dato, guardarlo en estado.
     if(Serial.available() > 0){
      state = Serial.read();
    } // esta parte del código es para solo 1 Carácter o Unidad.
 
    // si el estado es 0 ese sería Apagado “OFF”
    if (state == '0') {
         digitalWrite(ledPin, LOW);
          Serial.println("LED: off");
    }
 
    // si el estado es 1 ese sería Encendido “ON”
    else if (state == '1') {
        digitalWrite(ledPin, HIGH);
          Serial.println("LED: on");
    }
}

 

Como se podrán dar cuenta es el la misma configuración que nuestro pasado tutorial,

“Comunicación App-Android a Arduino”. Por lo que recomiendo revisarlo para comprobar funcionamiento de encendido y apagado de LED por Comunicación Serial “1” y “0”.

Una vez tenemos Asegurado nuestro Modulo HC-05 en modo esclavo lo conectamos según muestra el Siguiente Programa: (recordemos que gracias a la librería SoftwareSerial.h TX y RX se han cambiado)

/*
Programa Modulo Bluetooth-HOST
 
El siguiente programa enviara información mediante el modulo bluetooth.
Dado que el programa del módulo Bluetooth SLAVE
Espera que se le envié '1' y '0' cada 2 segundos, así encienda y apague el LED
 
*/
 
#include <SoftwareSerial.h>
 
// se define al Pin2 como RX, Pin3 como TX
SoftwareSerial mySerial(2,3);// RX,TX
 
void setup()
{//inicializa la comunicación serial
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
mySerial.write('1');  Serial.println("LED: on");
delay(2000);
mySerial.write('0');  Serial.println("LED: off");
delay(2000);
}

Con estas sencillas bases se comprende lo básico, como lo explico en el Primer tutorial,
“Comunicación App-Android a Arduino”  esto es el código básico para Comunicación con 1 solo Carácter, si por equivocación o practica se dieron cuenta que si mandan “10” o “01” el ultimo digito es el que prevalece.

/*
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 otro pin
//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 oposiciones
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;}

Anexo 1: Bluetooth Esclavo Servo

/*
      Programa Modulo Bluetooth-SLAVE

El siguiente programa recibe la informacion desde un modulo Bluetooth(HOST).
El envio de un '1', PRENDE el LED conectado al pin 12.
El envio de un '0', APAGA el LED conectado al pin 12.
*/
#include <Servo.h> 

Servo myservo;   // Crea un objeto servo para controlar el servomotor
char state = 0;

void setup()
{  //inicializa la comunicacion serial  
   Serial.begin(9600);
   myservo.attach(4);  // asocia el servo en pin 3 al objeto servo} 
   //se configura los pines de entrada y salida   
   delay(150);
}

void loop() 
{     if(Serial.available() > 0){
      state = Serial.read();
      Serial.println(state);
      }
      
         myservo.write(state);                  // fija la posición del servo de acuerdo al valor escalado 
         delay(15);                           // espera a que el servo se posicione
}
Anexo 2: Bluetooth Maestro Potenciometro
/*
          Programa Modulo Bluetooth-HOST

El siguiente programa enviara informacion mediante el modulo bluetooth.
Dado que el programa del modulo Bluetooth SLAVE
espera que se le envie '1' y '0' cada 2 segundos
asi ecienda y apage el LED

*/

#include <SoftwareSerial.h>

int sensorPin = A0; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor

// se define al Pin2 como RX, Pin3 como TX
SoftwareSerial mySerial(2,3);// RX,TX

void setup()
{//inicializa la comunicacion serial 
 Serial.begin(9600);
 mySerial.begin(9600);
 Serial.println("Ready");
 mySerial.print("Ready");
}
void loop()
{ int U = analogRead(sensorPin); // escala el valor para usarlo con el servo (valor entre 0 y 180) 
 mySerial.print(U); mySerial.print("."); Serial.println(U);
 delay(15);
}

4 Comments

  1. ok eso es para encender led ,y como puedo mover un servo con un potencimetro 2 arduinos , maestro ,esclavo y la programacion la modifico en donde?? un ejemplo de eso porfas.

    • Jose, tendrias que enviar el valor adquirido del ADC para mover un servo con el otro arduino. Seria algo asi, pones el POT en el canal analógico 0 del Arduino y el servo en el pin 9 del arduino receptor. Primero lees el canal analógico y lo envías mediante bluetooth y por ultimo tomas ese dato y lo pones en la función servo de Arduino. Saludos

    • Jose,

      Acabamos de actualizar el tutorial para que veas los códigos anexos al final. Saludos

  2. Buenas tardes, he configurado correctamente todo funciona bien… como haria si quiero enviar un dato del esclavo al maestro , como por ejemplo que apague un led del maestro..el led se apaga del maestro al esclavo correctamente pero a la inversa como seria , con el animo de darle una respuesta a mi maestro…

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *