Spiga

Controlando la Raspberry Pi (Raspbmc) por IR

¡Buenas de nuevo! Después de otro tiempo de inactividad volvemos a la carga con un tutorial para novatos que hará las delicias de muchos.

Hace apenas un mes recibí un correo de un seguidor del blog que me pedía si podía hacer un tutorial sobre control por IR (infrared). Como me pareció una propuesta interesante pedí el componente necesario para hacerlo, que es tan sencillo y simple como un TSOP 4838.

Para los que no sean entendidos en el tema, que me incluyo, el TSOP 4838 es un receptor de infrarrojo que funciona de 2,5 a 5,5v según su datasheet, aunque nosotros lo vamos a hacer funcionar a los 3,3v que nos dan de salida los pines de GPIO de la Raspberry Pi. No os preocupéis porque funciona de maravilla.

Imagen ampliada de un TSOP 4838


El precio es de risa, y es que podemos adquirirlo en Farnell / element14 por menos de 1€. Os dejo con el enlace para los que queráis comprarlo:

Comprar TSOP 4838 en la web de Farnell España

Las ventajas son muchas si trabajamos con una distribución como Raspbmc, ya que nos va a permitir controlar XBMC con cualquier mando que tengamos en casa, sin necesidad de vernos limitados a la función CEC que implemente nuestra TV con el mando (contando que contemos con una TV con dicha característica, claro). Sin ir más lejos yo he reaprovechado un mando multimedia que tenía abandonado de mi Xbox y le he dado un nuevo uso.

Lo primero que vamos a hacer es preparar el receptor. Para ello he utilizado lo siguiente:

  • Receptor IR TSOP 4838
  • Tubo (macarrón) termoretráctil para evitar hacer soldaduras o dejarlas al aire
  • Tres cables del panel frontal (FPANEL) de un PC viejo, para no soldar a los pines GPIO
Lo que he hecho ha sido pelar los extremos de los cables del panel frontal, si mal no recuerdo el del reset y el del power, aunque da lo mismo los que uséis ya que el objetivo es aprovechar los conectores para los pines de la Raspberry. Un vez pelados he insertado en ellos el tubo termoretráctil y lo he calentado con un mechero para que haga la "soldadura" (vale, no lo hace, pero esto va a ir genial para aquellos que no tengan un soldador en casa o directamente no tengan los conocimientos para hacerlo). Os dejo con una foto del momento justo anterior a calentar dicho tubo con un mechero:

TSOP4838 con termoretráctil listo para "calentar"

El resultado final debería ser algo parecido a lo siguiente:

Una vez calentado el tubo para que hagan contacto las patas del TSOP con el cable


Ahora vamos a conectar directamente a la Raspberry. Para ello me he guiado de una excelente representación de los pines que tenemos en los foros de Stmlabs (Raspbmc). Os dejo con la imagen en cuestión para que sepáis como hay que conectar el TSOP.

Esquema de conexión a GPIO


En resumidas cuentas y para que no tengáis que comeros la cabeza: el pin 1 del TSOP al 18 de la Raspberry (DATA), el pin 2 del TSOP al 6 de la Raspberry (GROUND) y por úlitmo el pin 3 del TSOP al pin 1 de la Raspberry (3,3v).

Una vez conectado, y si no la hemos hecho nada mal a la hora de calentar el tubo termoretráctil. ya tendremos nuestro receptor funcional. La parte que viene a continuación ya es de software y vamos a necesitar Raspbmc, del que ya os he dado el enlace anteriormente. La ventaja de su última versión es que ya viene con LIRC instalado y preconfigurado, por lo que vamos a tener que hacer poquita cosa para poder ponerlo todo en marcha. De nuevo, para los que no sepan qué es os puedo decir que LIRC es un software que permite leer las entradas que hacemos por IR y, dependiendo de lo que queramos, tomar control de programas multimedia o ejecutar comandos mediante el uso del fichero lircrc (ver sección "The .lircrc file format").

Como os decía antes en Raspbmc -en su última versión estable- ya viene todo instalado y listo para que procedamos a la configuración, por lo que lo primero que debéis hacer es saber si vuestro mando se encuentra entre los ya configurados por los usuarios. Si tienes la gran suerte de tener uno de ellos puedes copiar el fichero en tu directorio personal con el nombre "lircd.conf". En mi caso no ha sido así y me he hecho mi propia configuración, ya de paso he subido el fichero y espero que vosotros aportéis el vuestro.

Paso 1:
Vamos a detener el servicio de LIRC para comprobar si nuestro receptor esta funcionando correctamente. Para ello entraremos por SSH y escribiremos lo siguiente:

sudo service lirc stop

Deberá responderos con:

pi@raspbmc:~$ sudo service lirc stop
[ ok ] Stopping remote control daemon(s): LIRC:.

Ahora probaremos a ejecutar mode2 con:

mode2 -d /dev/lirc0

Paso 2:
Si presionamos cualquier tecla de nuestro mando deberían salir un montón de letras en pantalla, de lo contrario revisa las conexiones del receptor y comprueba que esté conectado en los pines correctos (o eso o el receptor está muerto :P) Suponiendo que todo haya ido correctamente listaremos todas las posibles teclas a las que podemos asignar una función, para ello escribimos:

irrecord --list-namespace

Anotad todas aquellas que os puedan servir en Raspbmc, como por ejemplo KEY_STOP, KEY_PLAY, etc. Podéis ver el listado de las que he mapeado yo aquí, ya que me están funcionando todas sin problemas.

Paso 3:
Ahora pasaremos a crear nuestro fichero de configuración y asignaremos las teclas al mando. Para ello volvemos a escribir en la shell:

irrecord -d /dev/lirc0 ~/lircd.conf

Os pedirá que presioneis tantos botones del mando como sea posible hasta rellenar dos líneas de puntos en pantalla, es importante seguir las instrucciones que os va dando, porque de lo contrario no funcionará de forma posterior. Llegará un momento que os pedirá el nombre del botón que queréis asignar, y es entonces cuando debéis escribir los nombres que hemos obtenido en el paso 2 y presionar el botón al que queréis asignar dicha función.

Cuando hayáis terminado con todas las teclas deseadas pusláis "Intro" y debería haberos guardado un fichero de nombre lircd.conf en vuestro directorio personal en /home/pi. Con esto tenemos toda la faena hecha, por lo que volvemos a iniciar LIRC con:

sudo service lirc start

Paso 4:
Ahora falta decirle a Raspbmc que vamos a usar control remoto por IR, para ello nos vamos al configurador que tenéis en "Programas" dentro del propio XBMC, a la pestaña de "IR Remote" y allí marcad la opción "Enable GPIO TSOP IR Receiver" y "GPIO IR Remote Profile" seleccionad "Custom", que irá a cargar el fichero lircd.conf de nuestro directorio home.

Ahora os pedirá reiniciar para aceptar la nueva configuración y... ¡listo! Ya tenéis vuestro mando funcionando en Raspbmc.

Os dejo con un vídeo del mío funcionando para que os hagáis una idea.

Un saludo y espero haber sido de utilidad.

12 comentarios:

  Kolox

23 de mayo de 2013, 0:27

Mil gracias pro el tuto, probaré y te cuento ^^

  Unknown

11 de junio de 2013, 7:58

Buen tutorial.

Me suscribo a tu blog, porque no hay mucha información sobre la Raspi en español y de calidad.

Gracias David!!

  Rafael Berenguer

11 de junio de 2013, 21:56

Hola, me sale:
pi@raspbmc:~$ mode2 -d /dev/lirc0
mode2: could not open /dev/lirc0
mode2: default_init(): Device or resource busy

  DaRKnSiS

13 de junio de 2013, 17:16

Rafael, parece que no te está inicializando el dispositivo de IR. Prueba a revisar las conexiones y testea el TSOP, que no lo hayas sobrecalentado si has soldado. Por otro lado asegúrate que tienes marcada la opción de soporte GPIO IR en Raspbmc.

  Rafael Berenguer

13 de junio de 2013, 20:07

Era eso, se tiene que habilitar primero GPIO IR en el Raspbmc aunque sea con cualquier mando y tras reiniciar ya puedes seguir los pasos de tu manual, por cierto, excelente, gracias.

  DaRKnSiS

17 de junio de 2013, 16:48

Gracias Rafael :) Ya me cuentas si te ha funcionado todo, recuerda subir tu mapeo del mando, como yo hice, para ayudar al resto ;)

  Unknown

22 de diciembre de 2013, 17:00

Buen tutorial!
Tengo configurado el mando de un appletv y quisiera configurar otro, si sigo el tutorial,( como hice la primera vez ) se salta el paso de tocar todos los botones del mando y va directo a escribir el botón que quiero configurar...
Como puedo reiniciar la configuración para empezar de nuevo con otro mando?
Gracias

  Carlos Garcés

27 de enero de 2014, 17:32

No consigo que me funcione.
Parece que si que detecta el TSOP

pi@raspbmc:~$ dmesg|grep lirc
lirc_dev: IR Remote Control driver registered, major 249
lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
lirc_rpi: auto-detected active high receiver on GPIO pin 18
lirc_rpi lirc_rpi.0: lirc_dev: driver lirc_rpi registered at minor = 0
lirc_rpi: driver registered!
input: lircd as /devices/virtual/input/input1
pi@raspbmc:~$

Pero si hago

mode2 -d /dev/lirc0

Empiezan a salir números... sin pulsar ningun boton...
Alguna idea de cual es el error?

  Carlos Garcés

1 de febrero de 2014, 18:57

El TSOP no hacia contacto, después de soldar los cables, todo OK.

  MTX

11 de febrero de 2014, 23:28

Hola man. Gracias por este maravilloso post. para editar o borrar e larchivo lircd.conf , como se hace? Para añadir mas botones en la configuracion?
Gracias!

  Fernan

17 de febrero de 2014, 23:47

Hola!
Se puede hacer también con el TSOP1838?
Cambia algo la implementación?
Gracias!

  Fernan

20 de febrero de 2014, 13:03

Me respondo por si interesa a alguien:

The classic TSOP 17xx and 18xx are unstable at 3.3V and won't work without some kind of level converter (IC, photo diode etc.).

Con la salida a 3,3V puede no funcionar correctamente, abajo pongo la fuente, donde especifican alguno que si son compatibles.

http://aron.ws/projects/lirc_rpi/