Mando a distancia bluetooth con el móvil


Este es otro proyecto de fin de semana, que por peticiones de amigos procedo a publicar.  Harto de utilizar el mando a distancia de la AverMedia con mi ordenador, desarrollé un proyecto que es un mando a distancia por bluetooth que me permite utilizar mi móvil para controlar el MythTV en mi ordenador.

El proyecto consta de dos partes:

  • Una aplicación J2ME que se ejecuta en el teléfono móvil y que, tras escoger un dispositivo bluetooth al que conectarse, envía las teclas que pulsemos en el móvil como comandos.
  • Un servidor que funciona en Linux, escucha en un puerto RFCOMM de Bluetooth y  recibe comandos transformándolos en pulsaciones del teclado que envía al servidor X-

En cuanto a la aplicación J2ME hay poco que explicar, pogo a disposición tanto el jar como el código fuente en GPL. Está desarrollada utilizando el plugin EclipseME para desarrollo J2ME. Lo primero que hace al arrancar es buscar todos los dispositivos bluetooth y da uno a escoger. Cuando lo escogemos, abre un socket contra puerto 1 de RFCOMM del dipositivo bluetooth al que se conecta (en nuestro caso el ordenador), y cada vez que pulsemos una tecla envía una cadena del estilo “COMMAND X\n” por el socket donde X depende de la tecla pulsada (y \n es un retorno de carro, para los que no lo sepan…).

El servidor lo desarrollé primero como un módulo de LIRC, pero luego hallé una forma más fácil de implementarlo, con dos scripts de bash y un sencillo programa sendxevent (de  Doug McClendon – <filteredperception@sbcglobal.net>), que permite enviar eventos a las X-Windows. El servidor está en la carpeta server/ del tgz y consta de los ficheros:

  • btremote-server.sh: script que arranca el servidor bleutooth que que cuando recibe algo por el socket lo mando al script commands.sh.
  • commands.sh: script que transformacada comando recibido por el socket en una llamada al sendxevent. En éste se configura el mapeo entre los comandos y las teclas.
  • sendxeventent y sendxevent.c: programa que envía los eventos a las X. En este caso lo utilizo sólo para mandar pulsaciones de teclado

Para instalarlo es necesario copiarlos en la carpeta /usr/local/homemedia/bt/, o bien en cualquier otra ubicación editando los scripts. Para arrancarlo basta con ejecutar btremote-server.sh.

También necesita tener instaladas las utilidades bluez de Linux y que el ordenador sea visible para el resto de dispositivos BT.

Para realizar la misma función sería más versátil utilizar un programa que nos emulara un teclado bluetooth HID, y que el ordenador viera al móvil como un teclado BT. Ya hay algún proyecto así (como PhoneHID), pero no logré que funcionara en mi caso, así que publico este proyecto por si le puede interesar a alguien…