Go Down

Topic: Conexión bluetooth mediante módulo HC-06 (Read 1 time) previous topic - next topic

Zokru

Para ser lo más descriptivo posible voy a dar toda la información que me parece relevante:

  • Uso un Arduino Uno
  • El módulo bluetooth es el HC-06
  • Las conexiones del Arduino al módulo bluetooth son: +5V a +5V // GND a GND // Pin 4 a Tx // Pin 2 a Rx
  • He usado el código que aparece a continuación:


Code: [Select]
/*

Este codigo de ejemplo muestra el uso del modulo bluetooth HC-06

- Permite configurar el modulo a traves de la consola serial

- Permite enviar datos desde la consola a un dispositivo bluetooth

- Permite recibir datos desde un dispositivo bluetooth y mostrarlos en concola

*/

//Se importa la biblioteca para crear puerto serial virtual

#include <SoftwareSerial.h>

/*

Creacion de puerto serial virtual.

Se crea como una variable de tipo SoftwareSerial.

Esto se denomina un "objeto" de la clase SoftwareSerial

*/

SoftwareSerial BT1(4, 2);

// El pin 4 es Rx y el pin 2 es Tx

/*

Declaramos la variable que usaremos para guardar los datos

que recibimos del bluetooth

*/

String command = "";

void setup()

{

// Inicializacion de puerto serial

Serial.begin(9600);

// Inicializacion puerto serial virtual BT1

BT1.begin(9600);

delay(1000);

// Escribimos en consola

Serial.println("Configuracion bluetooth");

}

void loop()

{

// Si hay datos en el puerto serial del bluetooth

if (BT1.available()>0){

// Leemos todo el buffer

command = BT1.readString();

// Enviamos el texto recibido en consola

Serial.println(command);

}

// Si hay datos en el puerto serial

if (Serial.available()>0){

// Leemos hasta encontrar el caracter '\n'(carriage return)

String S = Serial.readStringUntil('\n');

// Imprimimos en consola el texto leido

Serial.println("---> " + S);

// Enviamos el texto al puerto serial del bluetooth

BT1.print(S);

// Enviamos un carriage return al puerto serial del bluetooth

BT1.print('\n');

Serial.println("");

}

}

/*

Comandos utiles:

AT+NAMENOMBRE -> Cambia el nombre a NOMBRE

AT+BAUDBPS -> Cambia la tasa de datos a BPS

AT+PINXXXX -> Cambia el pin a XXXX

*/


Dicho esto, he probado a conectarme con el móvil al bluetooth usando el pin por defecto (1234), pero al mandar o recibir mensajes no muestra en la pantalla receptora lo que debería (mando "hola" en ambas direcciones, en el móvil aparen signos de interrogación dentro de un rombo y en el pc aparece "N").

Además, sin estar conectado con el móvil, el módulo bluetooth no responde ni actúa de acuerdo a los distintos comando AT (ni siquiera AT solo, que debería contestar OK).

Después de tocar un poco el código y probar, he llegado a que usando: BT1.begin(38400); puedo mandar mensajes del móvil al pc, pero no a la inversa y sigo sin poder usar los comandos AT. He probado todas las tasas de transmisión que he encontrado en los foros sobre este problema y con ninguno el módulo me responde OK al comando AT. Aquí tenéis el código del programa que he usado para probarlo:

Code: [Select]
#include <SoftwareSerial.h>

// PINs definition
#define Serial_HC06_RxD 4
#define Serial_HC06_TxD 2

SoftwareSerial Serial_HC06(Serial_HC06_RxD, Serial_HC06_TxD); // HC06 (Bluetooth) serial port

//---------------------------------------------------------------------------------------------
void setup(){

Serial.begin(9600);     // Serial port init

Test(2400);
Test(4800);
Test(9600);
Test(19200);
Test(38400);
Test(57600);
Test(115200);
Serial.print("---------------------------END");
}

//---------------------------------------------------------------------------------------------
void Test(long Speed){

Serial.println("\n--------------------------- " + String(Speed));
Serial_HC06.begin(Speed);
delay(1000);

Serial.println("AT:");
Serial_HC06.print("AT");
Display_HC06();

Serial.println("at:");
Serial_HC06.print("at");
Display_HC06();

Serial.println("ATln:");
Serial_HC06.println("AT");
Display_HC06();

Serial.println("atln:");
Serial_HC06.println("at");
Display_HC06();
}

//---------------------------------------------------------------------------------------------
void Display_HC06(){
  delay(1000);
  while (Serial_HC06.available()){
    Serial.println(Serial_HC06.read());
    delay(500);
  }
}

//---------------------------------------------------------------------------------------------
void loop(){
}


Muchas gracias por vuestro tiempo y un saludo.

Zokru

Después de hacer algunas pruebas más, he visto que a la tasa de transmisión de 38400 bauds en la comunicación con el bluetooth, puedo enviar y recibir mensajes entre el móvil y el pc, pero cuando lo mando escribiéndolo en el monitor serial no siempre llega al movil, mientras que si uso:
Code: [Select]
BT1.print("MENSAJE");, llega siempre al movil (no se si es relevante). De cualquier modo, los comandos AT siguen sin funcionar.

Lucario448

En ese caso, para usar el Arduino como "puente", el código sería el siguiente:

Code: [Select]
#include <SoftwareSerial.h>

#define Serial_HC06_RxD 4
#define Serial_HC06_TxD 2

SoftwareSerial Serial_HC06(Serial_HC06_RxD, Serial_HC06_TxD); // HC06 (Bluetooth) serial port

void setup(){
Serial.begin(9600);
Serial_HC06.begin(38400);
}

void loop() {
if (Serial.available()) Serial_HC06.write(Serial.read());
if (Serial_HC06.available()) Serial.write(Serial_HC06.read());
}

Go Up