Carte extension "WRT-SIM 1.0"
pour WRT54G/GL

Il y a beaucoup de pages sur l'Internet qui décrivent comment améliorer les capacités d'un WRT54G. Certaines décrivent comment ajouter un adaptateur de ligne RS232 à un port série, un lecteur de carte SD/MMC, ou un capteur de température 1-wire. L'avantage de la carte WRT-SIM est qu'elle regroupe plusieurs de ces modifications sur une seule carte et qu'elle a été conçue pour se loger parfaitement dans un WRT54GL(et aussi dans quelques WRT54G(à partir de version 4.0) et quelques WRT54GS(à partir de version 3.0)). Le mien est un WRT54GL version 1.1. Toutes les modifications matérielles et logicielles décrites ci-après fonctionnent bien dessus. Je ne peux l'affirmer pour tous les modèles comme je ne possède pas un exemplaire de chaque. Vérifiez sur l'Internet ou ouvrez le boitier du votre. Sa carte doit être en forme de 'L' comme sur la photo ci-dessus. Dois-je mentionner que celà vous fera perdre la garantie ?

Matériel

--> Schéma, Circuit Imprimé

La carte WRT-SIM 1.0 a été conçue au moyen de l'excellent logiciel libre Kicad qui permet de mener à bien un projet depuis le schéma électronique jusqu'au circuit imprimé. La carte a été conçue pour être fabriquée avec peu de moyens : circuit imprimé simple face, composants faciles à trouver.
Télécharger le Schéma
Télécharger le Typon

--> RS232

L'adaptateur de ligne série RS232 peut être un MAX3232(3.3V, cher) ou un MAX232(5V, bien moins cher). Il faut mettre un fil vers l'alimentation appropriée au MAX que vous utiliserez. Sur la photo, il est cablé au +5V avec le fil orange. La carte WRT-SIM est "cousue" à celle du WRT. L'utilisation de fil isolé est recommandée.


--> SD Card

Comme il n'y a pas d'emplacement dédié à un lecteur de carte particulier sur la platine, on est libre de l'installer où l'on veut. Il y a toutefois une zone de pastilles libres pour en faciliter le câblage, ou pour souder directement une carte SD. La carte SD est reliée au 3.3V, à 4 GPIOs(General Purpose Input Output), et deux fois à la masse.


Le lecteur de cartes SD sur la photo est installé sur un morceau de bois. J'ai vu sur l'Internet que certains ont soudé directement une microSD. Ceci évite de se procurer un lecteur, mais empêche de l'enlever rapidement. Sur le dessus de la carte, le fil marron amène le 3.3V au lecteur de carte. Suivez le câblage mentionné sur le croquis si vous voulez utiliser les mêmes réglages(qui marchent) décrits plus loin.

Sous la carte, 4 fils sont connectés aux GPIOs. Le fil jaune plus épais apporte le 12V de l'alim du WRT54G au régulateur 5V.


--> 1-Wire

Le port 1-wire utilise un circuit série-vers-1-wire dédié, le DS2480B soudé directement côté cuivre. La protection contre les décharges électrostatiques(ESD) est confiée au circuit recommandé DS9503(côté cuivre aussi) mais comme je n'ai pu m'en procurer chez mon détaillant, j'ai mis, en guise de protection, une diode zener 7,5V et une diode Schottky. Jusque là, avec cette protection, je n'ai eu aucune destruction du DS2480B, ni aucun problème de communication sur le bus. Il y a deux emplacements pour des prises RJ11. Pour ceux qui voudraient câbler leur propre capteur de température, il y a aussi des pastilles de libre toutes proches.

Si vous utilisez le DS9503, vous devez couper une piste comme montré sur la figure de gauche. Si vous utilisez les diodes, vous devrez court-circuiter deux pistes sur le circuit imprimé comme montré sur la figure de droite.


--> Alimentation

La carte WRT-SIM comporte un régulateur 5V alimenté par le 12V du WRT. Il est hautement recommandé d'insérer un fusible ou une résistance fusible(0.47ohm/1W) dans le 12V venant de l'alim du WRT. Il y a assez de place pour mettre un radiateur au 7805. Ce 5V est utilisé par le DS2480B et le MAX232. Le 3,3V venant du WRT alimente la carte SD et le MAX3232 si vous choisissez de l'utiliser à la place du MAX232.

Firmware

Le micro-logiciel(ou firmware) d'origine intégré dans le WRT54G/GL est basé sur GNU/Linux. Le micro-logiciel d'origine peut donc être modifié et remplacé pour satisfaire aux besoins de la carte. Plusieurs firmwares peuvent tourner sur le WRT54G/GL. Tout le logiciel décrit ci-dessous tourne sur le firmware OpenWrt 10.03 (brcm-2.4) pour WRT54G. La documentation concernant l'installation sur le routeur est sur leur site Web: http://openwrt.org

Le firmware de base est un firmware minimal qui occupe une partie seulement de la mémoire flash. Au premier redémarrage après l'installation, la mémoire flash restante est formatée(soyez patients, cela peut prendre un certain temps) et est disponible en lecture écriture. Le contenu de cette zone mémoire est monté sur "/overlay" lui même monté par dessus "/". Après l'installation du firmware de base, il reste donc de la place pour installer des outils supplémentaires et les paramétrer.

Après l'installation vous pouvez accéder au WRT soit avec un navigateur internet http://192.168.1.1, soit par "telnet 192.168.1.1" depuis un terminal distant ou avec un vrai terminal raccordé au port RS232(115200,8,N,1) du WRT. Avant d'installer des logiciels il faut configurer le mot de passe, le nom d'hôte du WRT, la zone géographique et le réseau. Si vous n'utilisez pas le DHCP, n'oubliez pas de spécifier un DNS et une passerelle(gateway). C'est obligatoire si l'on veut pouvoir installer du logiciel par l'Internet.

Logiciels

L'installation et la désinstallation des logiciels peuvent s'effectuer par l'interface Web ou en ligne de commande avec un utilitaire facile d'emploi : "opkg". Les logiciels sont téléchargés depuis l'Internet sous forme de paquets et installés automatiquement par opkg. Il faut donc avoir préalablement configuré le réseau(n'oubliez pas de spécifier un DNS et une passerelle(gateway)). Les logiciels peuvent être composés d'un ou de plusieurs paquets. Les paquets dont le nom commence par "kmod-" sont des modules du noyau.

- Par l'interface Web:

  • Web : System > Software
Cliquez sur "Update package lists" pour rafraichir la liste des logiciels disponibles. Si vous n'êtes pas à l'aise avec l'anglais, vous pouvez installer immédiatement un des paquets linguistiques suivants:
luci-i18n-catalan
luci-i18n-english
luci-i18n-french
luci-i18n-german
luci-i18n-greek
luci-i18n-italian
luci-i18n-japanese
luci-i18n-portuguese
luci-i18n-portuguese_brazilian
luci-i18n-russian
luci-i18n-spanish

- En ligne de commande avec opkg:

# Mini-manuel d'opkg
# avant toute opération sur les paquets et pour
# rafraichir la liste des logiciels disponibles :
opkg update

# installer un paquet logiciel :
opkg install nom-du-paquet

# enlever un paquet logiciel :
opkg remove nom-du-paquet

# enlever un paquet logiciel et ses dependances orphelines:
opkg remove --autoremove package_name

# obtenir la liste des paquets installables :
opkg list

# obtenir la liste des paquets installés :
opkg list_installed

# obtenir le contenu d'un paquet installé :
opkg files nom-du-paquet

#pour plus d'aide sur opkg :
opkg

--> RS232

Avoir un port RS232 est très utile pour observer le démarrage complet du WRT54G. Ou pour y accéder si vous avez trop joué avec la configuration du réseau. Il vous faudra pour ça un terminal ou un logiciel de terminal (minicom pour Linux et Unices, Hyper-Terminal(ça existe toujours?) pour Windows) et un câble série croisé (2xDB9 femelles,2-3,3-2,5-5). Si minicom affiche une erreur, essayez "minicom -s" et changez les réglages. Ceux-ci sont 115200bauds, 8bits, No parity, 1 stop bit, pas de contrôle de flux matériel ou logiciel. Aucun mot de passe ne vous sera demandé.

--> SD/MMC Card

Pour utiliser le lecteur de cartes il faut installer du logiciel supplémentaire. Ne mettez pas encore de carte dans le lecteur.
# avant toute opération sur les paquets
opkg update
Le module noyau pour la lecture des cartes SD/MMC:
# installer le pilote pour SD/MMC
opkg install kmod-broadcom-sdhc
Le support du système de fichier(ext2 dans le cas présent):
# ext2 (Linux)
opkg install kmod-fs-ext2
Pour configurer le câblage, éditer le fichier /etc/sdcard.conf:
vi /etc/sdcard.conf
Si vous avez câblé la carte SD comme moi, ça doit ressembler à ça(j'ai enlevé les commentaires...):
partition=1
mountpoint=/mnt/sdcard
cs=7
clk=3
din=2
dout=4
major=0
maxsec=32
rahead=2
dbg=0
Puis on lance le script de démarrage du service sdcard pour vérifier la configuration du câblage:
/etc/init.d/sdcard start
[INF] sdhc: Version: 2.0.2  Parms: major=0 din=2 dout=4 clk=3 cs=7 maxsec=32 rahead=2                                        
[ERR] sdhc: init: No card detected                                                                                           
[ERR] sdhc: init: No card detected                                                                                           
[INF] sdhc: Module unloaded due to error                                                                                     
L'erreur est normale, comme il n'y a pas de carte dans le lecteur. Le câblage est correct, il est temps d'insérer une carte dans le lecteur. Celle doit être formatée en ext2. Une fois insérée, simplement relancer le script sdcard:
/etc/init.d/sdcard start
[INF] sdhc: Version: 2.0.2  Parms: major=0 din=2 dout=4 clk=3 cs=7 maxsec=32 rahead=2                                        
[INF] sdhc: SD Card detected & initialized                                                                                   
[INF] sdhc: Assigned dynamic major number 254                                                                                
Partition check:                                                                                                             
 /dev/sdcard: p1                                                                                                          
[INF] sdhc: Module loaded                                                                                                    
sdcard - Card detected and initialized                                                                                       
sdcard - /dev/sdcard/part1 mounted on /mnt/sdcard                                                                            
La carte a bien été detectée et est maintenant montée sur /mnt/sdcard. Pour l'avoir montée au démarrage, il faut autoriser le service par l'interface Web(Services>Initscripts>sdcard enable) ou avec la ligne de commande:
ln -s /etc/init.d/sdcard /etc/rc.d/S49sdcard
Voilà pour la carte SD...

--> 1-Wire

Un moyen simple de découvrir le bus 1-wire est d'essayer les outils "owfs". Ces outils peuvent fonctionner seuls (owfs,owhttpd,owftpd) ou par dessus "owserver". owfs permet de voir les périphériques 1-wire comme des fichiers et des dossiers. owhttpd permet de voir les périphériques 1-wire avec un navigateur. owftpd permet d'y accéder avec un client FTP. owserver est un serveur et ne comporte pas d'interface(voir plus bas). Environ 300k octets sont nécessaires pour owhttpd, owftpd ou owserver, 400k pour owfs. L'installation sur OpenWrt est très simple:
# avant toute opération sur les paquets
opkg update
# paquets owfs 1-wire
opkg install owfs
# ou
opkg install owhttpd
# ou
opkg install owftpd
# ou
opkg install owserver
Après l'installation, on peut lancer n'importe lequel, mais seulement un à la fois. Pour lancer un autre serveur 1-wire, il faut stopper le premier sinon ça ne marchera pas, et sans péter aucune erreur. Conseil: comme ces serveurs tournent par défaut en arrière plan, une bonne option à ajouter à la ligne de commande quand on les essaye est "--foreground". Ceci permet de les arrêter (par CTRL+C) sans avoir à les tuer ou à redémarrer. Pour plus d'information de débuggage on peut ajouter des options comme: "--foreground --error_print 3 --error_level 5"
owfs - il faut spécifier le port série utilisé et un dossier pour monter l'arborescence 1-wire:
mkdir 1wfiles
owfs -d /dev/tts/1 1wfiles
ls 1wfiles

owhttpd - Les options pour lancer owhttpd sont similaires, il faut indiquer un numéro de port:
owhttpd -d /dev/tts/1 -p 3001
et vous pouvez voir le résultat dans votre navigateur : http://192.168.1.1:3001

owftpd - Toujours très ressemblant pour owftpd:
owftpd -d /dev/tts/1 -p 55
Lire une température sur un capteur en 12bits avec wget:
wget ftp://192.168.1.1:55/28.7E6EEE020000/temperature12

owserver - Pour lancer owserver:
owserver -d /dev/tts/1 -p 3001
Comme je l'ai dit précédemment, owserver n'a aucun interface direct courant. Pour lui faire de simples requêtes il faut installer owshell:
opkg install owshell
et lancer une des commandes shells. A partir de maintenant on ne précise plus l'adresse du port série(-d /dev/tts/1) mais le couple adresse:port ou IP:port d'owserver (-s localhost:3001). Examples:

owdir pour parcourir l'arborescence des périphériques 1-wire
owdir -s localhost:3001

owread pour lire une temperature sur un capteur de température DS18B20:
owread -s localhost:3001 28.7E6EEE020000/temperature12
       14.25

owwrite pour fixer un seuil de thermostat bas sur un DS18B20 à 5 degrés:
owwrite -s localhost:3001 28.7E6EEE020000/templow 5

owpresent renvoie 1 si une valeur existe, sinon 0. pour tester l'alarme d'un DS18B20:
owpresent -s localhost:3001 alarm/28.7E6EEE020000
1

En plus de répondre à de simple requêtes en ligne de commande, owserver peut alimenter les autres serveurs. L'avantage de faire tourner owfs, owftpd ou owhttpd par dessus owserver est qu'il peuvent tourner tous en même temps, owserver seul ayant le contrôle du matériel. Ou les faire tourner sur une autre machine, distante.
Pour lancer owfs sur owserver, d'abord démarrer owserver:
owserver -d /dev/tts/1 -p 3001
puis owfs:
owfs -s localhost:3001 1wfiles
owhttpd sur owserver:
owhttpd -s localhost:3001 -p 3002
et vous pouvez voir le résultat dans votre navigateur : http://192.168.1.1:3002

owftpd sur owserver:
owftpd -s localhost:3001 -p 55
lire une température en précision 9 bits sur un capteur DS18B20 avec wget:
wget ftp://192.168.1.1:55/28.7E6EEE020000/temperature9
Pour lancer ces services au démarrage du WRT, ajouter les lignes de commandes nécessaires dans le fichier /etc/rc.local avant "exit 0".
C'est tout pour les outils owfs. Tous ces outils fonctionnent parfaitement avec la carte WRT-SIM. J'ai mis jusqu'à 10 capteurs sur un simple bus sans alim. Et j'ai utilisé aussi des DS1990A sans problème. J'ai mis des DS18B20 au bout d'un cable de 15m (paire torsadée) et ça marchait encore bien.

Dons

Ce travail de conception a été fait à l'aide de logiciels libres et gratuits. Il est offert gratuitement et sans limitation. Malgré tout certaines choses ont un coût : l'hébergement de ces pages est réalisé pour l'instant sur mes pages personnelles, mais à terme, j'aimerais les faire héberger sur un espace dédié ; et puis il faut aussi nourrir la bête pendant qu'elle travaille à mettre au point et tester les nouveaux logiciels et à écrire une documentation claire et lisible, ce qui manque souvent. C'est pourquoi j'ai ajouté les magnifiques boutons PayPal ci-dessous afin que ceux qui profitent de mon travail et qui ne pourraient s'empêcher de vouloir me payer un café, une bière ou une pizza puissent le faire. Faire un don sur le site Paypal est aussi le moyen de me contacter et d'obtenir une réponse rapide. Même les plus petits dons sont les bienvenus. Merci.


Il est bon d'avoir à soi quelque chose, pour le donner. [Paul Claudel]

Téléchargements

Télécharger le Schéma
Télécharger le Typon

© Marc BERLIOUX 2011