[LinuxFocus-icon]
LinuxFocus article number 236
http://linuxfocus.org

[Photo of the Author]
par Guido Socher (homepage)

L´auteur:

Guido aime Linux non seulement parce que c'est amusant de découvrir les multiples possibilités de ce système, mais également grâce aux personnes impliquées dans sa conception.



Traduit en Français par:
Thierry Bayet <snspy/at/brutele.be>

Un panneau de commande avec affichage à cristaux liquides (LCD) pour votre serveur Linux

[Illustration]

Résumé:

Dans cet article nous concevrons un panneau de contrôle LCD basé sur l'afficheur LCD Hitachi HD44780 et le Micro-contrôleur RISC AT90S4433 AVR 8-Bit de chez Atmel. Les deux composants sont très courants et bon marché. Le panneau de contrôle comprend un système de chien de garde afin de superviser l'ordinateur et possède deux boutons pour permettre le dialogue avec l'utilisateur. Vous pouvez définir l'adresse IP, le masque de réseau, l'adresse de la passerelle, arrêter l'ordinateur, afficher les statistiques, autrement dit, tout ce que vous désirez puisque la majeure partie de la logique dépend d'un script Perl qui peut-être facilement modifié. Le panneau est connecté à votre ordinateur via le port série RS232.

Pour cet article vous avez besoin au minimum d'une installation partielle de l'environnement de développement AVR. La manière de l'installer est décrite dans cet article : Programmer le Micro-contrôleur ARV avec GCC.

_________________ _________________ _________________

 

Introduction

Ce périphérique combine les fonctionnalités de matériel déjà utilisé dans des articles antérieurs : Notre nouvelle conception va cependant beaucoup plus loin que cela. Elle ajoute des boutons pour l'interaction de l'utilisateur et inclut un chien de garde matériel pour superviser le serveur. De plus, elle fournit une ligne d'entrée analogique. Nous ne l'emploierons pas ici mais vous pourriez, par exemple, y connecter une sonde de température.

Pour élaborer cela, il vous faut quelques connaissances d'amateur en électronique. Les pièces détachées que nous utiliserons ne sont pas chères et tout compris, coûtent moins de 40 Euro.

L'idée derrière ce panneau est qu'il devrait vous permettre de contrôler un serveur sans moniteur ou clavier. Linux est un système d'exploitation très fiable et peut facilement être contrôlé à distance. Cependant lorsque vous le connectez pour la première fois à un réseau, vous devez configurer l'adresse IP, la passerelle et le masque de réseau. Ce panneau vous permet de définir ces adresses. Il vous donne également la possibilité d'arrêter le serveur alors que vous êtes encore à côté de lui.

La conception de ce panneau est très générique. Toutes les parties "spécifiques au serveur" sont définies dans un script Perl. Le matériel, l'état des boutons, le texte de l'afficheur, les LED ..., peuvent être contrôlés par des commandes ASCII. Vous pouvez par conséquent utiliser cet ensemble pour construire un lecteur de mp3 ou contrôler votre grille-pain, ou ce que vous voulez.  

Ce qu'il vous faut

Pour construire cela, vous avez besoin de ce qui suit:

1 x Micro-contrôleur Atmel At90S4433
1 x Support d'IC 28 broches de 7.25 mm
1 x Support d'IC 16 broches
1 x MAX232
1 x Petit relais 5V
1 x cristal 4MHz
2 x LED (verte et rouge)
1 x transistor BC547 NPN
1 x transistor BC557 PNP
4 x condensateur 1uF (courant ou incliné)
2 x condensateurs céramique 27pF
1 x condensateur 10nF
1 x condensateur 100nF
3 x résistances 4k7
2 x résistances 2k2
1 x résistance 10K
1 x résistance 3k3
2 x résistances 100 Ohm
3 x résistances 470 Ohm
3 x résistances 1K
1 x résistance 220 Ohm
1 x potentiomètre 4K7 (aussi petit que possible)
1 x diode Zener 4.3V
2 x petits boutons
1 x petite diode standard (par exemple 1N4148, toute diode bon marché)
1 x afficheur LCD de 2 lignes de 20 caractères avec interface compatible HD44780.

Tous les afficheurs que j'ai vus avec 14 ou 16 broches sur le connecteur étaient compatibles HD44780. Vous pouvez également utiliser un afficheur de 3 ou 4 lignes mais vous devrez légèrement modifier le programme .

De plus vous aurez besoin de quelques fils et de quelques connecteurs pour l'alimentation et la RS232. Si vous avez un afficheur de 2 lignes vous pouvez le monter dans une fine feuille d'aluminium et l'intégrer dans une baie de 5.25" sur votre serveur.  

Schéma et carte

J'ai utilisé Eagle pour Linux pour concevoir le schéma et la carte. C'est un excellent programme mais il vous faudra un peu de temps pour apprendre à l'utiliser. Vous pouvez obtenir une version gratuite pour une utilisation privée sur : cadsoftusa.com.

Le schéma (cliquez dessus pour l'agrandir):
[Schéma]

La carte (cliquez dessus pour l'agrandir):
[carte]


La disposition des éléments de la carte sur fond blanc pour une meilleure impression: carte avec fond blanc (Note: Ce n'est pas le fichier requis pour élaborer le circuit imprimé de la carte.)
Les fichiers Eagle (compressés avec gzip, notez que certains navigateurs décompressent pendant le téléchargement):  

Le circuit

Je vais expliquer brièvement le diagramme du circuit ci-dessus. L'AT90S4433 a 3 ports : PB, PC et PD. PC peut-être utilisé comme port d'entrée analogique ou digital. Tous les ports peuvent être utilisés comme lignes d'entrée et de sortie digitales. C'est le programme qui contrôle cela via DDR (Data Direction Register)Registre de Direction des Données. Nous utilisons toutes les broches sauf la 23 comme lignes digitales (0 ou 5 V). Le Max232 est un convertisseur de tension. L'interface RS232 utilise +-10V et le Max232 le convertit en 0-5V. Sur la broche 1 (broche de remise à zéro) de l' AT90S4433 vous trouvez quelque chose nommé circuit d' arrêt partiel (Brownout). Ce circuit maintient la remise à zéro en position basse (active) dans les cas d'alimentation insuffisante afin d'empêcher le CPU d'exécuter de mauvaises instructions ou de mal fontionner. Ceci peut se produire quelques millisecondes pendant la mise en route ou l'arrêt. Le but est de garantir que le programme du Micro-contrôleur démarre correctement.

Certains d'entre vous pourraient se demander pourquoi il y a une diode en parallèle à la bobine du relais et que la polarité telle qu'elle est représentée n'aura jamais rien à faire. Cette diode est très importante ! Lorsque vous coupez le relais, une tension très élevée est générée par la bobine. Elle peut détruire le Micro-contrôleur. Cette tension est de polarité inverse à la tension d'alimentation de la bobine. La diode peut être une petite diode bon marché, mais il est important de l'avoir.

Les deux boutons poussoirs doivent être liés au connecteur nommé "DIGITAL IN PUSH BUTTON" dans le schéma. Ils connectent PD3 ou PD6 à la masse lorsqu'ils sont pressés.  

Comment réaliser le circuit imprimé

Pour graver le circuit imprimé vous devez d'abord imprimer ce fichier PostScript (linuxlcdpanel.ps.gz) sur une feuille transparente. Dans les magasins pour architectes vous pouvez trouver des feuilles de plastique semi-transparentes nommées Sinolit. Elles sont produites pas Regulus et sont normalement utilisées pour les imprimantes Offset. Une alternative peut être un papier de 60g + un produit de pulvérisation transparent (pausklar 21 de Kontakt Chemie). L'avantage du papier et de Sinolit vient de ce que le toner de l'imprimante Laser colle vraiment au papier/à la feuille plastique et offre un bon contraste.
J'ai converti le fichier PostScript en PDF au cas ou vous n'auriez pas d'imprimante PostScript. La qualité est cependant moindre.
Le temps d'exposition pour les plaques de cuivre avec procédé photo dépend de la source lumineuse. Pour une lumière artificielle normale il faut compter 1-2 minutes. Vous pouvez également utiliser la lumière du jour, mais essayez d'éviter la lumière directe du soleil (elle est trop forte). Vous pouvez faire l'expérience sur un petit morceau de plaque photosensible pour définir le temps d'exposition idéal avant d'utiliser la bonne plaque.
[avant gravure]
La carte exposée et révélée avant gravure


La carte exposée a besoin maintenant d'être révélée quelques minutes dans du NaOH (Natriumhydroxid). Ensuite, vous devez regarder attentivement le résultat et faire les corrections avec un marqueur de peinture noire Edding 780 (ce n'est pas le marqueur indélébile pour surcharge, c'est un marqueur contenant de la peinture). Je fais habituellement les pastilles un peu plus grosses parce que je trouve celles de Eagle trop petites pour une utilisation non professionnelle.
[après gravure]
La carte avant de percer les trous


Note: il semble impossible aux fabricants de s'entendre sur un brochage commun ou sur des conventions de nommage pour les relais. J'utilise un petit relais 5V manufacturé par Matsushita. Votre relais peut avoir un brochage différent, modifiez donc la carte en conséquence (avec un marqueur résistant à la gravure).

Lorsque vous êtes satisfait vous pouvez plonger la carte dans du FeCl3 (Hypochlorite de fer). Le FeCl13 donne de bons résultats à température ambiante. Il est très facile à utiliser et donc idéal pour le bricolage à la maison. Vous obtiendrez de meilleurs résultats si la carte est placée verticalement dans un conteneur profond. Les ions de cuivre sont plus lourds que les ions de fer et si vous remplissez de FeCl13 un petit récipient plat, les ions de cuivres s'accumuleront au fond du récipient.

Quand la carte est prête effacez l'encre du marqueur avec de la térébenthine. Vous pouvez laisser "l'encre" photo-résistante. Elle s'évaporera lorsque vous souderez dessus et protégera le cuivre.  

Le programme du Micro-contrôleur

Le programme pour le Micro-contrôleur se compose des fichiers suivants : Afin de comprendre le programme en détail, il vous est recommandé de lire les caractéristiques techniques du Micro-contrôleur. Elles sont accessibles à partir de la section références à la fin de cet article (ou sur www.atmel.com)
Cependant pour utiliser ce panneau vous n'avez pas besoin de comprendre le programme, vous avez juste besoin de décompresser les archives du code source ( sélectionnez linuxlcdpanel-0.7.tar.gz sur la page de téléchargement) et de taper:

make
make load

ou vous pouvez éventuellement utiliser le programme pré-compilé et le charger par la commande
make loadprebuild

Très facile. Vous trouverez une description de la manière de programmer le Micro-contrôleur dans le premier article: Programmer le Micro-contrôleur ARV avec GCC.  

Test du panneau LCD

Le panneau LCD est prévu pour fonctionner avec l'alimentation interne 5V de votre serveur (fil rouge=5V, fil noir=masse). Mais ne les connectez surtout pas à l'alimentation de l'ordinateur la première fois. Vous avez peut-être fait des erreurs pendant la soudure et l'assemblage. L'alimentation de l'ordinateur est puissante, et autant votre ordinateur que votre carte peuvent partir en fumée si tout n'est pas correct. Testez d'abord avec une alimentation stabilisée externe avec limitation de courant ! Maintenant vous pouvez télécharger le programme vers l'EEPROM comme décrit plus haut. Ensuite vous devriez voir apparaître un défilement de la bannière "linuxfocus.org" sur l'afficheur LCD. Maintenant connectez l'interface RS232:

broche 14 MAX232 sur CTS (DB-9 broche 8)
broche 7 MAX232 sur RXD (DB-9 broche 2)
broche 13 MAX232 sur TXD (DB-9 broche 3)
Vous avez également besoin de connecter entre eux DTR, DSR et CD (DB-9 broches 4, 6 et 1)

Ceci est également documenté dans le diagramme du circuit ci-dessus.

[discuter avec le panneau LCD par la ligne série] Pour utiliser la ligne série vous devez l'initialiser. L'archive du code source linuxlcdpanel-0.7.tar.gz contient un programme appelé ttydevinit qui s'occupe de cette initialisation. Disons que vous avez connecté le panneau sur COM2 (ttyS1) alors vous pouvez lancer la commande:

./ttydevinit /dev/ttyS1

Maintenant le pilote de la ligne série est initialisé pour fonctionner à 9600 Bauds et vous pouvez commencer à "discuter" avec votre panneau LCD. Ouvrez 2 fenêtres xterm. Dans l'une vous tapez "cat > /dev/ttyS1". Maintenant vous pouvez par exemple entrer la commande l=11 (allumage de LED 1) ou l=10 (extinction de LED 1). Vous pouvez voir dans le premier xterm que votre panneau LCD accuse réception de la commande par "ok".
Toutes les commandes disponibles sont expliquées dans le fichier README.commands.

L'archive du code source contient un script Perl nommé ttytest.pl qui ne fait qu'allumer et éteindre les LED rouge par intermittence. Il est censé être utilisé comme un simple programme exemple qui montre comment piloter le panneau LCD. Vous pouvez vous en servir comme base pour vos propres programmes. Lisez le code source. Il demande quelques connaissances en Perl, mais c'est un programme plutôt court.  

Connection du chien de garde

Le chien de garde est coupé par défaut. Vous l'activez par la commande w=1 et vous définissez le délai par s=x ou x est une valeur entre 1 et 255. Par exemple s=10 vous donnera un délai d'une valeur de 10*16sec=160sec. Le pilote a besoin de définir le délai périodiquement pour permettre au chien de garde de fonctionner correctement. Si votre serveur se verrouille, alors le pilote n'est pas réinitialisé et le chien de garde agit. Je sais que les serveurs Linux ne décrochent jamais. Cependant si c'était le cas, il faut savoir qu'il n'y a habituellement personne sur le site pour faire une remise à zéro, ou que personne ne sait où se trouve le serveur parce qu'il n'y a jamais eu de problème depuis les 2 dernières années.

Le chien de garde est conçu de telle manière qu'il ne joue son rôle qu'une seule fois. Cela afin d'éviter une remise à zéro pendant le redémarrage du système. Lorsque le serveur est de nouveau opérationnel, le pilote doit le réactiver.

Pour connecter physiquement le chien de garde, vous devez trouver les deux fils connectés au bouton de remise à zéro de votre serveur. Parallèlement à ce bouton de remise à zéro vous devez connecter le relais à partir de votre chien de garde.  

Comment utiliser le chien de garde

Le chien de garde garantit que le système est toujours capable d'exécuter les programmes. Il ne garantit pas qu'un serveur Web ou une application de base de données fonctionnent toujours correctement. Pour vérifier cela vous devriez utiliser une entrée crontab ou d'autres programmes. Vous pouvez être certain que le crontab fonctionnera probablement parce que le chien de garde s'assure que les programmes en général sont toujours actifs.

Vous pouvez par exemple concevoir un script qui est déclenché par cron et télécharge une page Web de votre serveur toutes les 15 minutes, mais vous devez être prudent : un serveur Web peut être surchargé par un tas de requêtes et il est dès lors normal qu'il ne réponde pas à toutes. Vous pourrez cependant compter le nombre de fois que le serveur ne répond pas et si, par exemple, il ne répond toujours pas après 10 vérifications, alors redémarrez le serveur ou basculez vers un redémarrage normal (pas une remise à zéro matérielle par le chien de garde).

Indépendamment de l'application, vous devriez également surveiller l'utilisation du disque. La commande shell suivante retourne une valeur si une des partitions est remplie à plus de 80%:

df | egrep ' (8.%|9.%|100%) '

Cela peut également être utilisé conjointement avec une entrée crontab afin de vérifier régulièrement l'utilisation du disque.  

Les scripts sur le serveur

Presque toute la logique de notre panneau d'affichage à cristaux liquides dépend d'un script Perl nommé llp.pl. Copiez ce fichier dans /usr/sbin. Copiez ensuite le programme ttydevinit dans /usr/bin et le fichier ifconfig_llp.txt (depuis le répertoire etc des archives du code source) dans /etc. Editez enfin, le fichier ifconfig_llp.txt et changez les adresses selon les besoins :

NETMASK=255.255.255.0
IPADDR=10.0.0.4
GATEWAY=10.0.0.2

Maintenant, faites une copie de votre script original /etc/rc.d/init.d/network et copiez le script /etc/network de l'archive du code source dans /etc/rc.d/init.d/network. Ce script et les noms de répertoire sont seulement valides sur Redhat et Mandrake. Le script /network_all_distributions est plus élémentaire et fonctionnera sur toutes les distributions Linux, mais vous devez trouver l'emplacement des répertoires init-rc de votre distribution Linux. C'est légèrement différent d'une distribution à l'autre.

Éditez le fichier /etc/rc.d/init.d/network et changez la ligne

/usr/sbin/llp.pl /dev/ttyS1&

si vous n'utilisez pas COM2.

Vous pouvez maintenant lancer :

/etc/rc.d/init.d/network start

et voir votre panneau LCD en action. Note: Il est possible de jouer avec la modificationde des adresses IP. Les changements ne prendront effet qu'après le prochain redémarrage. Par conséquent testez et restaurez-les avant d'arrêter votre serveur (vous pouvez aussi éditer /etc/ifconfig_llp.txt pour annuler vos changements).  

Fichiers de log

Le script llp.pl crée un fichier nommé llp.log dans /var/log. Ce log ne se remplit que très lentement. Normalement, il n'est pas nécessaire de prévoir une rotation automatique. Vous pouvez le purger avec un programme tel que logrotate si vous le désirez. Il n'est pas nécessaire de gérer la post rotation. Une ligne du fichier de configuration de logrotate pourrait ressembler à ceci:

/var/log/llp.log {
nocompress
monthly
}

Le fichier log contiendra des entrées lorsque le système sera arrêté manuellement, qu'une adresse IP sera modifiée (IP, GW,netmask) ou lorsque le chien de garde matériel déclenchera une remise à zéro. Naturellement vous ne pouvez pas enregistrer la valeur du délai du chien de garde lorsque cela se produit (puisque le système prend la main), par contre elle sera enregistrée au prochain démarrage.  

Le panneau en opération

Voici quelque "photos" du panneau LCD en action. Ce ne sont pas toutes les fonctions offertes par ce panneau. Il y en a beaucoup plus et vous pouvez y ajouter les votres.

L'écran principal. Montrant un nom (linuxfocus dans ce cas), la durée de fonctionnement et la charge. Il se met à jour périodiquement.
[main]

Le menu de configuration IP
[IP configuration menu]

Exemple d'une adresse IP en cours de modification
[change IP]

Comment changer l'adresse de la passerelle (route par défaut)
[GW]  

Conclusion

[the final panel] Pour construire ce panneau à cristaux liquides (LCD) il faut des connaissances d'amateur en électronique, mais ce n'est pas un circuit très complexe. Notre panneau LCD Linux offre plus de fonctionnalités que bien d'autres panneaux de contrôle déjà vus et il est très générique et très bon marché.

Bonne soudure :-)
 

Références



Site Web maintenu par l´équipe d´édition LinuxFocus
© Guido Socher
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
en --> -- : Guido Socher (homepage)
en --> fr: Thierry Bayet <snspy/at/brutele.be>

2005-01-14, generated by lfparser_pdf version 2.51