Utiliser une télécommande infrarouge pour contrôler XBMC

Maintenant que notre mediacenter XBMC ronronne bien sur notre Framboise, on va profiter des ports GPIO pour lui ajouter un récepteur infra-rouge pour contrôler XMBC avec une télécommande IR quelconque.

Si vous n’avez pas la chance de pouvoir utiliser le CEC pour contrôler le Rapsberry avec la télécommande de votre TV (via HDMI), vous avez l’alternative des applis Android (XBMC remote ou YATSE). Mais quand on a la télécommande de la TV dans la main, on est quand même tenté de l’utiliser pour XMBC…

Matériel nécessaire

pour le câblage, il nous faudra :

  • un récepteur IR, évidemment. On en trouve à des prix totalement dérisoires (moins d’un euro pièce). Personnellement j’utilise le TSOP38238. Vous pouvez aussi récupérer un récepteur IR sur une vieille TV.
  • un peu de connectique pour réaliser la liaison avec les broches des ports GPIO. On peut faire ça comme des sales en fil à fil, ou utiliser par exemple des nappes GPIO qui remplissent parfaitement cette fonction.
  • Une télécommande infra-rouge.

Selon la propreté de votre montage, il vous en coûtera donc entre 0,50€ et 8€. Ce à quoi il faudra juste y ajouter un peu de temps (de câblage et de programmation), temps que je votre serviteur va essayer de vous faire économiser ici !

Câblage

Le récepteur IR est composé de 3 broches : alimentation 5.5V, masse et sortie. Vous devez les raccorder aux ports, comme indiqué ci-dessous :

Câblage du récepteur IR sur port GPIO du Raspberry (Crédit : planete-domotique.com/)

Si vous utilisez une nappe GPIO, sachez que le fil rouge correspond au +5V du GPIO. Reste ensuite à compter les fils pour trouver ceux qui correspondent aux broches nécessaires à l’installation (broches 1, 5 et 12).

Personnellement, avec ma plaque d’essai et mon cobbler GPIO, j’ai pu brocher directement le récepteur IR sur ma plaque, sans aucun autre fil électrique, comme illustré sur la photographie suivante :

Brochage direct du récepteur IR sur la plaque d'essai
Brochage direct du récepteur IR sur la plaque d’essai

Programmation

Que vous soyez sous OpenElec, raspbmc ou Xbian, tous les programmes nécessaires au contrôle par IR sont déjà installés, reste donc à les paramétrer. C’est donc lirc (et ses dérivés) que l’on va utiliser ici.

Démarrez le module lirc :

sudo modprobe lirc_rpi

Vérification de la réception IR

On peut maintenant tester si les commandes IR sont bien reçues :

sudo mode2 -d /dev/lirc0

A chaque envoi d’un signal IR, vous devriez maintenant voir des messages du style :

space 1223
pulse 281
space 1193
pulse 350
space 1199
pulse 264
space 1901
pulse 264
Si vous avez le message « mode2 : default_init() : Device or resource busy », c’est probablement qu’il y a déjà lircd qui tourne. Il faut donc d’abord le tuer :

sudo killall lircd

Enregistrement des signaux

Dans le fichier /etc/lirc/hardware.conf, vérifiez que vous ayez les lignes suivantes :

DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
LIRCD_ARGS="--uinput"

Arrêtez Lirc :

sudo /etc/init.d/lirc stop

Et lancez l’utilitaire d’enregistrement :

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

L’enregistrement se passe en deux étapes : la première consiste à enregistrer l’ensemble des signaux à assigner, et la seconde consiste en l’assignation elle-même.

Pendant la première phase, il faut donc que, pour chaque bouton de la télécommande que vous voulez assigner, vous mainteniez la pression sur le bouton pendant une seconde environ. Si aucun signal n’est envoyé pendant 10 secondes, le programme s’arrête. Une fois la première phase terminée, il faut relancer chaque signal séparément, et lui assigner le nom de la commande à lui assigner. Les principales commandes sont :

KEY_HOME
KEY_BACK
KEY_SELECT
KEY_LEFT
KEY_RIGHT
KEY_UP
KEY_DOWN
KEY_FASTFORWARD
KEY_FORWARD
KEY_REWIND
KEY_PLAYPAUSE
KEY_STOP
KEY_INF

La liste complète est disponible en exécutant la commande irrecord --list-namespace (ou ici). Vous pouvez arrêter le programme à tout moment en tapant Enter . Une fois terminé, vous pouvez vérifier le contenu du fichier généré (lircd.conf), qui ressemble à ça :

begin remote

name  /home/xbian/lircd.conf
flags RAW_CODES|CONST_LENGTH
eps            30
aeps          100

gap          107868

begin raw_codes

name KEY_UP
9008    4447     624    1606     618    1667
622     451     649     481     638     481
605     510     637     488     627    1672
550    1616     677    1551     628     499
606     492     628    1612     625    1602
629     502     622     554     572     513
590    1655     663     429     616     509
613     513     593     508     627    1603
712     432     606    1616     625     498
626    1606     619    1615     626    1604
648    1585     622     527     574    1639
588

name KEY_DOWN
9055    4494     571    1623     603    1622
609     503     599     552     581     549
581     510     609     510     627    1609
621    1605     606    1627     619     557
568     492     625    1648     612    1573
625     504     706     418     617

name KEY_LEFT
9009    4496     543    1670     592    1638
596     502     598     534     627     502
600     532     570     534     585    1642
602    1677     548    1653     578     530
649     482     622    1610     637    1640
554     534     589     536     575     528
595     532     575    1679     566     541
end raw_codes

end remote

Sachez que lors du lancement le irrecord, si des entrées sont déjà enregistrées, alors irrecord passe directement à la seconde phase de l’acquisition. Si vous souhaitez donc refaire la manip complète, partez d’un fichier d’enregistrement vide.

Juste après le begin remote, je vous conseille de changer la valeur de la ligne name, pour y donner le nom que vous voudrez à votre télécommande (par exemple la marque de celle-ci).

Paramétrage de lirc

Il faut donc ajouter le contenu de ce fichier au fichier de configuration de lircd (après en avoir fait une sauvegarde) :

sudo cp /etc/lirc/lircd.conf /etc/lirc/lircd.conf.bak
sudo cat /etc/lirc/lircd.conf.bak lircd.conf > lircd.conf2
sudo cp lircd.conf2 /etc/lirc/lircd.conf

Adresse du fichier de configuration de lircd

Il semblerait que l’adresse du fichier de configuration de lircd dépende de votre distribution. Je donne ici les commandes pour Xbian. Dans les deux commandes précédentes, remplacer /etc/lirc/lircd.conf par :

  • /etc/lirc/lircd-full.conf sous raspbmc
  • /storage/.config/lircd.conf sous OpenElec

On va en profiter pour demander le lancement du module lirc_rpi, en ajoutant au fichier /etc/modules/ la ligne suivante :

lirc_rpi

Rebootez maintenant la framboise :

sudo reboot

A redémarrage, vous pouvez lancer la commande irw et essayer quelques touches de la télécommande. Vous devriez donc maintenant voir les noms que vous avez assigné lors de enregistrement des signaux.

Mappage de XMBC

Reste à faire la correspondance entre les commandes lirc et XMBC en modifiant  :

nano /home/xbian/.xbmc/userdata/Lircmap.xml
<lircmap>
  <remote device="Nom de la télécommande">		
    <play>KEY_GO</play>
  </remote>
</lircmap>

Adresse du fichier de configuration de XBMC

Cette fois encore, adaptez le nom de l’utilisateur à votre distro. Un simple

 ~

vous donnera l’adresse de l’utilisateur.

Et normalement, vous devriez maintenant pouvoir utiliser votre télécommande pour contrôler votre mediacenter préféré. Personnellement, il y a des boutons que je n’ai pas réussi à programmer du premier coup, mais en refaisant la manip, ça marche !

Pour aller plus loin

lirc n’est pas propre au Raspberry, vous pouvez donc trouver une doc très complète sur le site de Documentation Ubuntu Francophone. Sinon, vous pouvez aussi visiter le site officiel du projet. Plus spécifiquement au Raspberry, je vous conseille aussi le Wiki de OpenElec.