Firtec

Protocolo RFCOMM

RFCOMM es la abreviatura del término inglés Radio Frequency Communication (Comunicación por radio frecuencia).
El protocolo RFCOMM es un conjunto simple de protocolos de transporte, construido sobre el protocolo L2CAP y proporciona sesenta conexiones (canales que pueden variar dependiendo de las normas de cada país) simultáneos para dispositivos Bluetooth emulando el puertos serie RS-232.
RFCOMM es a menudo denominado emulación de puertos serie, y es justamente esto lo que resulta interesante a nivel de conectividad con microcontroladores.

Existen en la actualidad varios dispositivos Bluetooth diseñados para ser conectados a microcontroladore, estos envían información por Bluetooth y del lado de la PC la recibimos con una simple interfaz serial que en lugar de ser vinculada a un puerto físico, ha sido vinculado a este "puerto virtual" generado por RFCOMM. (Puede ver un ejemplo funcionando con un PIC).

Implementar su uso es bastante simple, siempre partiendo del punto que tenemos conectividad Bluetooth funcionando normalmente entre dispositivos Bluetooth.
Veamos un ejemplo de uso en Linux Debian. Lo primero que necesitamos es conocer la dirección del dispositivo al que vamos a conectarnos.

Para esto escribimos en consola:

sudo hcitool scan

Esto nos buscará los dispositivos visibles por el receptor Bluetooth de nuestra computadora Linux y nos devolverá su dirección MAC. Contestará algo como esto:

20:12:05:27:00:70  HC06

Dependiendo claro del dispositivo detectado, en nuestro caso un HC-06, un enlace Bluetooth para microcontroladores en general.
Nos aseguramos que el modulo este cargado.

sudo modprobe rfcomm

Agregamos el usuario a uucp

sudo gpasswd -a <usuario> uucp

Buscamos dentro de la carpeta /etc/bluetooth/rfcomm.conf  y editamos este archivo usando la dirección MAC del dispositivo, algo como esto:

rfcomm0 {
 bind yes;    
 device 20:12:05:27:00:70;
 channel 1;
 comment "Descripción";
}

Donde canal es uno de los 60 disponibles, y bind yes es para que la conexión siempre este disponible.
Ya estamos en condiciones de establecer comunicación, para esto escribimos el siguiente comando usando como argumento el número MAC encontrado .

sudo rfcomm bind rfcomm0 20:12:05:27:00:70

Si es la primera vez que me conecto con el dispositivo este pedirá un PIN de emparejamiento, en el caso de estos dispositivos siempre es 1234, en otros 0000, esto depende del dispositivo y viene indicado en su manual de uso.
El PIN solo lo pedirá un vez y luego este es "recordado" para las veces futuras que usemos la conexión.

El comando sudo rfcomm bind rfcomm0 20:12:05:27:00:70  tiene validez mientras dure la sesión, esto creará un nodo virtual que será quien se entienda con el hardware, puedo verificar que el mismo ha sido creado verificando su existencia dentro de la carpeta /dev. Tener presente que este archivo solo existe mientras este activa una comunicación, y no funcionara sin este archivo "temporal".

Para conectarme por RS232 a un microcontrolador solo debo usar una interfaz serial, por ejemplo el CuteCom indicando que usaremos el nodo virtual rfcomm0.
En general ajuste de los baudios es irrelevante puesto que la comunicación real se maneja en otro nivel, sin embargo se ha visto que hay sistemas que se "fijan" en este valor por lo que conviene colocar valores coherentes y coincidentes en el receptor y el emisor.

Si estamos usando Windows el procedimiento es un poco mas sencillo pero el resultado es exactamente el mismo, un puerto RS232 construido sobre un Bluetooth.
Es de remarcar que para que esto funciona tanto en Windows como en Linux o cualquier sistema, la conectividad Bluetooth debe estar funcionando para tener cierta certeza que todos los protocolos del Stack Bluetooth están instalados y activos.

Para verificar el funcionamiento incluso sin una interfaz serial podemos hacer lo siguiente, desde un microcontrolador enviar por Bluetooth un dato cualquiera, un contador en ascii, una letra, etc, en la consola escribir:

Connection from 20:12:05:27:00:70 to /dev/rfcomm0   
Responde >>> Press CTRL-C for hangup

Todo lo que reciba por el puerto será escrito en el nodo virtual rfcomm0, podemos ver los datos mientras son enviados, mirando en el archivo con con el comando cat.

cat /dev/rfcomm0.

Como podemos ver las opciones de uso del protocolo Bluetooth en el campo de la electrónica soy muchos y muy útiles llevando la conectividad, tanto para dispositivos electrónicos experimentales como profesionales a otros niveles.