3 minute(s) de lecture

PiOff S’il y a bien un truc qui énerve quand on découvre un Raspberry pi: c’est l’absence de bouton Off pour éteindre le système. Pas d’autre moyen alors que de lancer un terminal, et d’exécuter en ligne de commande “sudo poweroff”. Rien de sorcier sauf quand on cherche des heures sur le net comment faire, ou que les lignes de commande vous file de l’urticaire: ça énerve….

Il n’est pas du tout recommandé d’éteindre son Raspberry pi en coupant l’alimentation électrique “sauvagement”: à court terme cela met à mal la carte SD qui va très vite se retrouver corrompue, et le système sera alors incapable de redémarrer correctement, promesse d’une réinstallation totale du système avec reformatage de la carte SD si elle n’a pas été détruite.

Dans ce tutoriel je propose de fabriquer un circuit électronique très simple qui permet d’éteindre proprement sa framboise préférée à l’aide d’un bouton poussoir.

Le circuit électronique

circuit électronique Le principe est simple et je l’utilise quasiment sur tous mes autres tutoriels. Le pin40 (GPIO21) est relié à l’alimentation +3.3v du Raspberry pi via 2 résistances en séries de 10kΩ. Le bouton poussoir est quand à lui relié à la masse d’un côté, et relié à la jonction des 2 résistances de l’autre.

Ainsi lorsque le bouton poussoir n’est pas enfoncé: le signal qui arrive au port pin40/GPIO21 est HIGH, l’intensité du courant est faible vu les résistances (20kΩ en tout). Lorsqu’il est enfoncé: la jonction des résistances se retrouve court-circuitée à la masse, le signal arrivant au pin40/GPIO21 est alors vu comme LOW via la résistance de 10kΩ par le Raspberry. La seconde résistance a toute son importance: elle évite lorsque le bouton poussoir est enfoncé de provoquer un court-circuit entre la masse et l’alimentation +3.3V.

Attention j’ai pu voir beaucoup de tutoriels sur le net avec un bouton poussoir utilisé sans résistance et qui provoque un court circuit entre le pin GPIO et l’alimentation +3.3v. C’est fortement déconseillé: le GPIO du Raspberry n’est pas protégé contre les courts-circuits et finira tôt ou tard par cramer car cela provoque un pic de courant vraiment intense, qui plus est inutile.

Assemblage des composants

circuit électronique

Pas besoin d’aller faire fabriquer un PCB pour souder les composants: une simple plaque époxy pré-trouée et pastillée au pas 2,54mm, taille 57cm suffit. J’utilise un connecteur 3pin mâle afin de relier la carte aux pins (pin40, +3.3v et GND) du Raspberry pi avec 3 câbles souples femelle/femelle.

soudure des composants

La première photo c’est la vue du dessus, avec le pin 3*mâle à gauche, les deux suivantes sont la même photo vue du dessous, avec matérialisation des soudures en rouge. J’ai utilisé des petites entretoises en plastique 6mm pour maintenir le circuit sur-élevé.

Programme python

Le programme python est composé d’une classe Button_quit qui gère l’état du pin40/GPIO21 défini en mode input, et va exécuter une fonction lorsque que l’état par défaut HIGH passe à LOW. Pour éviter les multiples rebonds lors d’un appui “mécanique” sur un bouton poussoir, cette fonction attend toujours un délais de 300ms avant de considérer que l’état stable peut être lu. Les rebonds sont donc géré par software.

Lorsque le changement d’état du pin est détecté: la classe Button_quit va exécuter une commande os.system(‘sudo halt’) qui provo que l’extinction du Raspberry pi, équivalent à un “sudo poweroff” en ligne de commande, et en quelques secondes vous pouvez alors débrancher électriquement le Raspberry pi en toute sécurité.

Il suffit d’exécuter le programme principal piOff.py en arrière plan pour que le bouton soit opérationnel. Vous pouvez aussi importer dans votre propre code python la classe Button_Quit du programme buttonQuit.py pour y ajouter votre propre code si vous comptez utiliser le port GPIO pour faire autre chose.

Télécharger le code python sur le repository Github.