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…
Table des matières
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 :
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 :
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
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 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.