Fonera en récepteur infrarouge
Dans un précédent article, je vous parlais de la nouvelle solution pour mettre en place un récepteur IR compatible Lirc sous GNU/Linux sans utiliser de module kernel via un petit montage utilisant un AVR Attiny2313. Utilisant une simple ligne RX en TTL il devient possible de l'utiliser sur un système embarqué disposant d'un port série simple (RX/TX en TTL 0/5V), j'ai nommé : La Fonera !

La solution est toute simple. Puisque le montage AVRLirc utilise une ligne RX il est possible de le connecter au port série normalement utilisé pour la console série de La Fonera. Le connecteur dans le routeur se présent ainsi :

Il suffit de connecter la patte 3 de l'AVR sur RX sans oublier la masse et récupérer l'alimentation +5V sur le circuit du routeur, tout près du connecteur d'alimentation. Le Vcc du connecteur console ne délivre qu'une tension de 3.3V.
Il faut ensuite construire un firmware OpenWRT et le configurer pour ne plus utiliser la console série. Plusieurs éléments de configuration doivent être changés.
- Configurer le kernel via
make kernel_menuconfigpuis retirer des arguments par défaut passés au kernel la mention de la console série (Kernel Hacking / Default kernel command string). - Toujours dans la configuration du kernel, supprimer la console série : Device Drivers / Character devices / Serial drivers / Console on 8250/16550 and compatible serial port doit être désactivé.
- Désactiver la console série dans l'inittab du firmware. Il suffit de supprimer la ligne concernant ttyS0 dans
package/base-files/files/etc/inittab.
Une fois le firmware construit et installé sur La Fonera, le seul moyen de contacter le système est Telnet. Laissez démarrer le système (la première fois cela met un peu de temps en raison de l'effacement de la Flash non utilisée), connectez-vous en Telnet et définissez un mot de passe pour l'utilisateur root. Ceci aura pour effet d'activer le serveur SSH et de désactiver telnetd.
Configurez le système pour qu'ipkg puisse être utilisé correctement puis installer avrlirc2udp, le client. Voici un paquet binaire pour Kamilaze 7.09 et un tarball des sources à placer dans le répertoire package de l'arborescence OpenWrt :
Il ne vous reste plus qu'à configurer Lircd sur la machine hôte de votre choix en réception UDP (comme dans le billet précédent sur le sujet) et, sur le routeur d'utiliser :
avrlirc2udp -H -t /dev/ttyS0 -h 192.168.0.1
Vous disposez maintenant d'un routeur capable de recevoir des signaux IR et de les transmettre au serveur Lirc via une liaison filaire ou Wifi.
RedBoot reste utilisable au démarrage du routeur et le fait qu'il envoi des données sur le port série n'est pas un problème. La ligne TX du port du routeur n'est pas connecté. Il en va tout autrement s'il s'agit d'utiliser ce port série pour autre chose comme un modem ou un afficheur LCD. Sans doute la prochaine étape du voyage dans le hack de La Fonera.
PS : Si, comme moi, vous avez reconfiguré RedBoot pour un délai plus important (10s) il est possible de se passer du port série. Au moment du démarrage du routeur, RedBoot est en attente de connexion sur le port 9000 (à condition qu'il soit configuré correctement, IP, masque, etc). 10 secondes laissent largement le temps de se connecter avec un telnet. Malheureusement, je n'ai pas trouvé d'autre moyen pour envoyer un ^C que de faire :
% cd /tmp % cat > break [CTRL+V][CTRL+C][Entrée] [CTRL+D]
puis
% nc -vvv 192.168.0.12 9000 < break; telnet 192.168.0.12 9000
C'est pas beau, il y a sûrement mieux, mais ça marche.