Comunicación bluetooth con Pinguino

Hace algún tiempo compré un módulo bluetooth con la intención de trastear un poco con el. Hasta ahora no me había puesto con el, y no me ha sido del todo facil de configurar, así que me voy a hacer un recordatorio de como lo he hecho.

El módulo que yo tengo es el HC-06 (no se de que empresa), que últimamente se puede comprar en Ebay por menos de 5€. Yo lo compre hace bastante tiempo en ITEAD, pero no suelto sinó en una shield tipo XBEE. Es el de la foto siguiente. Se puede apreciar el módulo y las señales necesarias para la comunicación.

Módulo Bluetooth BTBEE

El primer problema es la alimentación. Este módulo funciona a 3,3V, por lo que si queremos usarlo con Pinguino, primero tenemos que conseguir la alimentación de 3,3. Esto es muy facil con un MCP1700, que es un regulador LDO de 3,3V de microchip, que se puede conseguir como sample. Tambien hay que tener en cuenta que la lógica también va a ser de 3,3V y que si conectamos la línea TX del Pinguino directamente al módulo lo podemos estropear. Solución facil; una resistencia en serie de unos 2k7 o bien un divisor de tensión  que de aproximadamente 3,3V cuando alimentemos con 5V. Hay soluciones mucho más "elegantes" a base de transistores, pero lo cierto es que así funciona bastante bien.

El circuito que he montado es el siguiente:

Circuito Pinguino con bluetooth

El circuito solo tiene lo necesario para alimentar al módulo y usarlo para comunicarse con el. Las líneas RX y TX del módulo y del pinguino se tienen que cruzar, es decir la línea TX del pinguino (pin 8) se conecta al RX (con la resistencia en serie) y viceversa. Con este circuito básico podemos comunicar el pinguino  mediante bluetooth.

La configuración "de fabrica" de este módulo es la siguiente:

  • NOMBRE BT: linvor
  • PIN: 1234
  • BAUD: 9600
  • PARIDAD: N (sin paridad)
  • BITS: 8
  • BIT STOP: 1
  • PROTOCOLO: Ninguno

Podemos usar esta configuración para comunicarnos por bluetooth. Solo tendriamos que configurar la comunicación serie del Pinguino (Serial.begin(9600);) y emparejar el módulo bluetooth. Partiendo de esta configuración, veamos como podemos cambiar la configuración del módulo.

La configuración del módulo se hace mediante comandos AT. Es decir una vez estamos conectados con el módulo, solo hay que enviarle una serie de "tramas" para cambiar la configuracion. Los comandos de configuración son los siguientes:

Comando AT:

Solo sirve para comprobar la comunicación. Si le enviamos la trama "AT" el módulo debe contestar con un "OK"

Velocidad:

La velocidad de comunicación se cambia con la trama "AT+BAUDx", donde x es un número de 1 a 8. El número indica la velocidad según la siguiente relación:

1———1200
2———2400
3———4800
4———9600
5———19200
6———38400
7———57600
8———115200

El módulo responde con "OKxxxx" donde las x representan la velocidad en número. Por ejemplo si enviamos "AT+BAUD8" el módulo debe contestar "OK115200".

Nombre:

El nombre del módulo es el que veremos más tarde cuando vayamos a emparejar el PC (o lo que sea) con el módulo para recibir los datos. La trama para cambiar el nombre es "AT+NAMEnombre" y el módulo contesta con"OKnombre".

PIN:

Es el código que utilizaremos para emparejarnos con el módulo bluetooth. Se cambia con "AT+PINxxxx", donde las x representan el código y contesta con "OKxxxx".

La mayoria de problemas que me he encontrado a la hora de configurar el módulo se han debido a dos cosas:

  1. El módulo no puede estar emparejado. Obvio, pero piqué como un pardillo.
  2. Las tramas de configuración no tienen ningún caracter de final de trama. Esto no es tan obvio, pero me habría ahorrado dolores de cabeza si hubiese leido el manual con algo más de detenimiento.

Inicialmente intenté configurar el módulo conectandolo directamente al conversor USB-RS232 TTL, y enviandole las tramas con un programa tipo hyperterminal (TeraTerm, PuTTY…), pero entre que algunos de estos programas ponen un "retorno de carro" al final de la trama y que yo era un poco lento tecleando, la cosa no funcionó.

Al final me hice un programa de Pinguino que hacía la configuración. Es el siguiente programa:

void setup() {
  Serial.begin(9600);
  Serial.print("AT+NAMEBTBEE");
  delay(1000);
  Serial.print("AT+PIN1243");
  delay(1000);
  Serial.print("AT+BAUD8");
}

void loop() {
}

Con esta configuración, ahora el módulo funciona a 115200 baudios, se llama "BTBEE" y el pin para emparejarse con el es 1243. Bien, pues nos vamos a emparejar con el para probar la comunicación. 

En el PC, nos vamos a agregar dispositivos bluetooth. Esto inicia la busqueda y debe encontrar el dispositivo "BTBEE".

Lo seleccionamos y lo emparejamos indicando el pin cuando nos lo solicita. Una vez emparejado el sistema nos avisa de que tenemos un puerto serie estandar sobre bluetooth, informandonos además de cual es el COM con el que debemos comunicar. Si no nos da tiempo a ver el globo de información siempre podemos recurrir al "Administrador de dispositivos".

Ahora el módulo está vinculado con el PC, y se emparejará cuando una aplicación se conecte al COM para enviar o recibir datos.

Para probar la comunicación he añadido al circuito anterior un potenciometro y un led. La idea es enviar al PC la lectura de una entrada analógica usando el bluetooth. El led se encenderá cuando la entrada analógica supere los 2,5V. El circuito ahora queda así:

Y el programa es este:

void setup()
{
	pinMode(7,OUTPUT);
	Serial.begin(115200);
}

void loop() {
  int sensorValue = analogRead(A0);
  if (sensorValue>512)
		digitalWrite(7,HIGH);
  else
		digitalWrite(7,LOW);
  Serial.printf("@%drn",sensorValue);
}

Y cuando conectamos un programa tipo hyperterminal al COMx de la conexión bluetooth, empezará a recibir los datos:

Bueno, pues ya tenemos  conexión bluetooth, lo siguiente es hacerle telemetria a pingubot jeje.

3 comments for “Comunicación bluetooth con Pinguino

  1. Bernardo Falero
    octubre 30, 2012 at 12:45 pm

    Hola, me gustaría hecerte una consulta: Tengo un aparato de medida que manda la información (y también se alimenta de corriente) a través de un cable USB conectado a un PC.
    Sabes si existe un dispositivo comercial (o como fabricarlo) al que yo pueda conectar el aparato (a traves del cable UBS) y que se alimente de corriente y retransmita las señales del equipo de medida a través de Bluetooh?
    Muchas gracias, Bernardo
    Nora: El equipo de medida no dispone de puerto serie por lo que no es posible ponerle un adaptador serie-bluetooh. Además el equipo de medida se alimenta directamente del cable usb conectado al ordenador

  2. Gonzalo Penalva
    enero 19, 2014 at 8:28 pm

    Hola Bastian, soy Gonzalo Penalva, del CIPFP Luis Suñer. Tengo un problema con Pingubot y el módulo Bluetooth que me está volviendo loco. He hecho todos los pasos que has puesto en el blog y me funciona perfectamente. El problema es cuando el Pingubot tiene que recibir los datos que le llegan desde el bluetooth. Recibe siempre ceros. He probado el mismo código en Arduino y funciona perfectamente. Estoy trabajando con la última versión del bootloader y del IDE de Pinguino (la X4). Además he retirado las resistencias que van a los LEDs de usuario de la placa de pingubot, porque interferían en la comunicación, pero así todo sigue sin funcionar la recepción de datos. El código es el siguiente:

    char val;

    void setup() {
    pinMode(6,OUTPUT);
    digitalWrite(6, LOW);
    Serial.begin(9600);
    Serial.printf(“AT+NAMEPINGU”);
    delay(1000);
    Serial.printf(“AT+PIN2222”);
    delay(1000);
    Serial.printf(“AT+BAUD4”);
    delay(1000);
    }

    void loop() {
    if ( Serial.available() ) {
    val = Serial.read();
    if ( val == ‘H’ )
    digitalWrite(6, HIGH);

    else if ( val == ‘L’ )
    digitalWrite(6, LOW);
    }

    delay(100);
    }

    Espero que me puedas ayudar porque ya no sé qué más probar.
    Un saludo!!

Comments are closed.