Tutoriel: piOff

Mis à jour : 1 sept. 2019


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

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



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



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 provoque 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 ma page github.


673 vues
logo_papsdroid_64x64.png
suivre l'actualité du blog sur Facebook:
  • Facebook Social Icône

© 2019, de papsdroid.fr,  administré depuis un Raspberry pi4