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:
/*
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:
#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.