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.

Utiliser une télécommande infrarouge pour contrôler XBMC
4.7 (94.29 %) 14 votes
  • TERNISIEN

    Bonjour,
    Heu ! Quelqu’un a de l’aspirine ?
    Je plaisante, mais c’est trop compliqué pour moi. Par contre le minitel ça me parle (rire).
    En tout cas c’est sympa Dorian de faire profiter les autres de ton savoir.
    Cordialement

  • Pingback: Installation de XBMC+SMB+Transmission sur Raspberry Pi | Le Blog de Dorian()

  • blokoko

    j’ai un problème a partir de l’étape « Enregistrement des signaux »
    Lorsque je fait « less /etc/lirc/hardware.conf »
    Je ne trouve pas de :
    DRIVER= »default »
    DEVICE= »/dev/lirc0″
    MODULES= »lirc_rpi »
    LIRCD_ARGS= »–uinput »

    J’ai tenté de sauté cette étape mais lorsque j’essaye de faire
    sudo /etc/init.d/lirc stop
    Il me sort sudo: /etc/init.d/lirc: command not found.

    Mon rpi tourne sous Xbian 1.0 beta2

    Merci d’avance

    • Salut !
      Si les lignes n’existent pas dans le fichier de configuration, alors ça veut dire que c’est à toi de les mettre (avec nano par exemple).
      Pour ton autre problème, essaie sudo lirc stop (ou à défaut commence par un whereis lirc).

      • blokoko

        Ok je veux bien, mais je vois pas vraiment où placer ça, le fichier hardware.conf est déjà bien remplit.

        En ce qui concerne lirc, il se trouve dans le dossier /etc/lirc, mais il me sort là même chose lorsque je rentre sudo /etc/lirc

        C’est un vrai casse tête surtout pour un débutant comme moi.

        (pour info je suis connecté en SSH, donc si il y a besoin de copier coller, etc)

      • blokoko

        C’est bon ! en suivant le tuto dispo sur ubuntu ca fonctionne à merveille.
        Merci pour tout

  • thosef

    Bonjour !
    Alors moi j’ai un problème à l’étape : Enregistrement des signaux
    En effet mon fichier est vide et lorsque je veux l’enregistrer avec nano, une erreur « [ Error writing /etc/lirc/hardware.conf: Read-only file system ] apparaît…
    Du coup j’ai essayé de stopper lirc avec « /etc/init.d/lirc stop » mais là j’ai le droit à une erreur : « sh : /etc/init.d/lirc: not found »
    Ma raspberry tourne sous openelec et je suis en ssh…
    Pouvez vous m’aider svp ?

    • Le [read only file system] semble vouloir dire que toute ta carte SD est en lecture seule… Tu as déjà modifié des fichiers dessus ? Si non, c’est peut-être simplement que tu as malencontreusement verrouillé ta carte en la manipulant. En cas, tu peux toujours essayer un chmod +r sur le fichier.

      Sinon, ça peut être aussi que ta carte SD est en train de mourir : sous certaines distro Linux (toutes ?), s’il y a des erreurs sur le disque dur, le système le monte en lecture seule, pour que tu puisses sauvegarder tes données avant un vrai crash.

  • Pingback: Utiliser une télécommande IR pour exécuter des commandes Linux | Le Blog de Dorian()

  • dominique

    Bonjour,
    je rencontre un problème avec XBMC installé sur Raspian, lorsque je tente de lire un fichier vidéo (Mp4 avi) je n’ai que le son parfois une image fixe du début de la vidéo, peu être avez-vous une solution ?

    • Salut !
      Alors vu de loin, ça ressemble à un problème de décodage. Peut-être as-tu besoin d’acheter les codecs MPEG-2 (ici par exemple)
      Tu as ce problème avec tous les MP4 ou seulement un fichier spécifique ?

  • dominique

    Merci pour votre réponse, j’ai trouvé une solution à mon problème en augmentant la mémoire gpu portée à 128 !

  • David

    Bonjour,
    Tout d’abord merci pour cet article, ma config n’est pas encore terminée mais j’ai déjà quelques touches qui fonctionnent sous xbmc et ce en moins de 45minutes. je voudrait juste ajouter les imprévus que j’ai rencontré pour le moment afin qu’ils puissent servir à d’autres:
    je suis sur un raspberry pi 2, avec raspian
    Lors de

    sudo modprobe lirc_rpi j’ai eu une erreur de chargement du module
    Il m’a simplement falut désactiver la fonction tree, raspi-config puis aller dans avancé, tree, désactiver, puis reboot

    A l’éxcution de: sudo mode2 -d /dev/lirc0 j’ai eu une erreur « mode2: command not found »
    apt-get install lirc à corrigé le problème

    Avec l’utilitaire irrecord si je veut recommencer ma config, vider le fichier
    ~/lircd.conf n’est pas suffisant, il me faut carément le supprimer

    XBMC devenu kodi, chez moi les fichiers xml sont dans .kodi et non dans .xbmc

    Pour le reste je dois relire a tete reposé le mapage en lirc et les fichiers xml de kodi/xbmc, mais j’ai déjà par défaut les fleches directionelles, ok, play qui fonctionnent

    • Merci pour ta contribution !
      Effectivement, ce qui est compliqué avec le Raspberry, c’est que les paquets et les configs out of the box sont très dépendants de la distro choisie, c’est pourquoi je précise bien dans mon billet que ma méthode, valide sous XBian, est à adapter pour les autres distros.

  • Alexandre

    Bonjour, tout d’abord, bravo pour ton tuto. J’ai un problème, je tape les codes pour démarer le module etc , j’ai aucun message d’erreur mais je ne recois aucun signal quand j’envoi un signal par la télécommande. J’ai vérifié 3 fois les branchements mais ils sont bons… Bizarre. As tu une solution? Merci d’avance. Je te tiens au courant si je trouve le problème

  • Frd_csnm

    Bonjour,
    Super tuto. En complétant avec le wiki ça donne de très bon résultat. merci encore !
    J’ai réussi à faire fonctionné ma télécommande avec mon ir. trop fier ! 🙂
    Tout marche pour le mieux.
    Sauf quand je debranche mon cable réseau 🙁
    Pour le coup ça me fait des répétition de touche.
    Je suppose que c’est porblème de masse ou d’alimentation. Mais franchement je suis perdu

  • Pingback: Faire fonctionner lirc sur le Raspberry Pi 2 | Le Blog de Dorian()

  • Pingback: Contrôler le diaporama avec une télécommande IR | Le Blog de Dorian()