Télécommande Infrarouge
Il y a quelque temps déjà, j'avais écrit un article dans GLMF à propos du projet Lirc permettant d'utiliser n'importe quelle télécommande infrarouge pour contrôler des applications sous GNU/Linux. Le montage principal proposé par le projet est fort simple : un récepteur TSOP1736 connecté via quelques composants sur un port série. Malheureusement, le montage utilise directement la ligne DCD du port série via un module kernel. Ceci rend la chose impossible à utiliser via un convertisseur USB/série ou un système ne disposant pas de la ligne en question. De plus, l'utilisation d'un module rend difficile le portage sur un autre système. En cherchant un peu, je suis tombé sur le projet avrlirc de Paul Fox. Un pur bonheur...

Comme son nom l'indique la solution proposée par Paul utilise un microcontrôleur Atmel AVR. Un Attiny2313 pour être précis (mon préféré).
Côté hardware, le montage est simpliste. L'AVR est tout simplement utilisé avec un quartz de 14.7475 Mhz afin de pouvoir communiquer sans erreur avec un port série en 115200bps (voir page 140 du datasheet Attiny2313) . D'autres configuration, même sans quartz sont possibles. Le récepteur TSOP1736, le même que pour le montage série Lirc, est directement connecté à la broche 11 du microcontrôleur. La led connectée sur 9 est optionnelle, elle permet de visualiser une réception IR. Le reste relève de la mise en oeuvre classique de l'Attiny2313.
Attention toutefois, il ne faut en aucun cas connecter directement RX/TX sur le port série d'un PC, les tensions sont totalement incompatibles et cela risque de fumer et sentir mauvais très rapidement. Il existe plusieurs solutions pour ajuster les niveaux de tensions. La mise en oeuvre d'un MAX232 en est une. Pour ma part, j'ai tout simplement utilisé le montage permettant d'accéder à la console de la Fonera. Mon propre montage d'interface TTL/RS232.
Côté software nous avons deux éléments. D'une part le firmware pour l'AVR. Ecrit en C et compilable avec GCC. Il ne nécessite qu'une petite modification concernant la vitesse du port série (macro FOSC). On compile et on charge dans l'AVR via AVRdude (n'oubliez pas de configurer les fuses pour l'utilisation du quartz).
Enfin, nous avons un sympathique code, avrlirc2udp. C'est la partie cliente écoutant le port série et envoyant les données au démon lircd.
Une fois tout cela joyeusement assemblé on installe, avec Debian, le paquet lirc. Pour enregistrer une télécommande on utilisera :
% ./avrlirc2udp -H -t /dev/ttyUSB0 -h localhost
Puis :
% sudo irrecord --driver=udp mon_fichier
Il suffit ensuite de suivre les indications et on obtient un fichier contenant les associations bouton/code pour la télécommande en question. On copie simplement de fichier sous /etc/lirc/lircd.conf puis on configure /etc/lirc/hardware.conf en spécifiant :
LOAD_MODULES=false DRIVER="udp" DEVICE="none"
Et voilà. Il ne reste plus qu'à configurer son ~/.lircrc pour associer les boutons aux actions des applications supportant Lirc (xmms, mplayer, etc). Chose intéressante, comme tout se passe en UDP il est parfaitement possible de mettre le récepteur sur un machine différente de celle qui est pilotée. Mieux encore, comme l'utilisation du port série est devenu parfaitement normale (utilisation de RX et non de DCD) ceci devient utilisable sur, par exemple, une Fonera. C'est la prochaine étape pour moi : le portage d'avrlirc2udp sur la fonera et la configuration du port série, non plus pour une console mais comme un port standard pour la connexion du montage. Au final, ma Fonera sera donc en mesure de recevoir des codes IR/RC5 et, soit les utiliser, soit les forwarder à une autre machine en UDP via Wifi.