Conectar y comunicar módulo Bluetooth + Arduino

Esta entrada es un poco a lo loco!!!. Recientemente me han pasado una consulta sobre conexión y comunicación entre un Arduino Mega y una shield con un módulo Bluetooth. En tema es que yo hace tiempo hice algo con Bluetooth, pero es que ahora me he pasado al módulos con WiFi :). Total, que por ayudar que no quede!!!

Cómo no tenía ninguno de esos módulos Bluetooth ya preparados para conexión con Arduino, encontré en casa un módulo "en bruto" así que tocó hacer un poco de cirugía de guerra para hacerlo funcionar.

Ya veis la pinta que tiene,...se aguanta con un celo. El pinout de estos módulos es éste (en función del modelo, el mío es un HC-05):

Únicamente he conectado los pines necesarios: Rx, Tx, KEY, Vcc y GND, nada mas!!!. Y conectados a un Arduino UNO

Primeros pasos

Configurar módulo BT con comandos AT

Lo primero que tenemos que hacer para que funcione nuestro módulo cómo nosotros queremos (a parte de conectarlo correctamente a nuestra placa Arduino) es configurar sus parámetros, para ello es necesario que acepte comandos AT, para ello tenemos que poner el pin denominado KEY a HIGH, es decir, con voltaje.

  pinMode(KEY_PIN, OUTPUT);
  digitalWrite(KEY_PIN, HIGH); delay(500);

Una vez tenemos esto comenzamos a configurar nuestro módulo. En el código de ejemplo que os dejaré mas abajo, ejecuto pocas instrucciones y básicamente configuramos el nombre de nuestro dispositivo test_arduino (todo el código está disponible en mi GitHub)

void setup()  
{
  // Entramos en modo comandos AT para configurar nuestro módulo bluetooth
  pinMode(KEY_PIN, OUTPUT);
  digitalWrite(KEY_PIN, HIGH); delay(500);

  BT.begin(9600);     //Velocidad del puerto del módulo Bluetooth
  Serial.begin(9600); //Abrimos la comunicación serie con el PC y establecemos velocidad

  Serial.println("Configuracion AT");
  enviar_comando_AT("AT");

  Serial.println("Version:");
  enviar_comando_AT("AT+VERSION");

  Serial.println("Nombre dispositivo:");
  enviar_comando_AT("AT+NAME=test_arduino");

  //Cerramos el modo comandos AT
  digitalWrite(KEY_PIN, LOW); delay(500);

}
Preparar escucha

Una vez tengo configurado el módulo BT con los comandos AT, comienzo a el loop() con simplemente escuchar por el puerto serie establecido con el módulo BT y Arduino y volcar la información por el Serial para ver lo que me ha llegado.

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

  if (Serial.available())
  {
    BT.write(Serial.read());
  }
}

Arrancando este programa, tendremos algo similar a esto en la salida del puerto serie de Arduino:

Establecer conexión y comunicarse

Establecer conexión

Yo he utilizado mi móvil Android para conectarme a la señal que emite el módulo Bluetooth

Cómo en mi configuración de comandos AT no he especificado el comando AT+PINpor defecto el PIN de conexión es 0000

Enviar datos por Bluetooth

Para enviar dados desde mi móvil Android he utilizado una aplicación que permite enviar por Serial Bluetooth. He utilizado BlueTooth Serial Controller, pero podéis utilizar cualquier otra aplicación.

Una vez instalada, conectamos a nuestro dispositivo Bluetooth test_arduino:

Ahora desde la app enviamos un mensaje Hola mundo!!!, y vemos como nuestro módulo recibe al instante:

Envío

Recepción

Cómo verlo en screenshot es un poco feo, he grabado un pequeño vídeo donde se puede ver mejor.

El código completo

El sketch de Arduino lo podéis encontrar en mi canal de GitHub https://github.com/akirasan/arduino_bluetooth

Recordar de modificar en el código los pines que utilizáis en vuestro proyecto.

Se que me falta mucha información, pero cómo he comentado al inicio ha sido una post del estilo pim-pam. Creo que por lo menos puede ayudar a focalizar el inicio en la comunicación con Arduino + Bluetooth.