Éteindre un Raspberry Pi avec un simple bouton
Éteindre un Raspberry Pi avec un simple bouton
Éteindre un Raspberry Pi avec un simple bouton
bouton
Il existe deux méthodes :
Le bouton-poussoir est un très simple composant électronique. Il est composé d'un simple circuit
interne connectant électriquement un première broche à une seconde broche si on appuie sur le
bouton.
Le bouton-poussoir a une très faible résistance interne. Pour cette raison, il est usuel de connecter
une broche de lecture via le bouton vers la masse plutôt que de lire une tension positive sur une
broche : dans ce dernier cas, vous devriez utiliser des résistances pour protéger votre broche de
lecture contre les défaillances de courant.
Dans son circuit interne, les broches opposées fonctionnent ensemble, tandis que l'appui sur le
bouton crée une interconnexion de circuits. Le circuit interne peut être schéma de cette manière :
Cela peut être un peu déroutant pour certaines personnes qui imaginent un simple bouton-poussoir
avec seulement 2 broches (au lieu de 4) connectées lorsque le bouton est enfoncé.
Le bouton-poussoir fournit une information logique (appuyé/relâché). Il doit donc être raccordé à une
broche en mode entré (“INPUT”).
Quand le bouton est relâché, pour ne pas laisser flottante l’entrée de la broche (cas d’un interrupteur
mécanique par exemple), il est nécessaire d’utiliser une résistance de rappel (pull down) ou de tirage
(pull up).
0V quand le bouton est relâché : état bas 3.3V quand le bouton est appuyé : état
= LOW bas = LOW
3.3V quand le bouton est appuyé : état 0V quand le bouton est relâché : état
haut = HIGH haut = HIGH
Un bouton n’est pas un objet parfait : lorsqu’on agit dessus (appuyer ou relâcher), le signal ne
commute pas parfaitement de 3.3V à 0V (ou le contraire). Il peut se passer quelques millisecondes
pendant lesquelles le signal va « rebondir » avant de se stabiliser. Ce rebond peut provoquer un
comportement inattendu du programme.
Une des solutions est d’utiliser un condensateur en parallèle avec le bouton. Ce composant permet
d’absorber les rebonds en se chargeant (ou se déchargeant) progressivement. La commutation du
port numérique n’a lieu qu’une fois le condensateur suffisamment chargé, soit un peu après la
commutation du bouton.
Au bout de 5t (plus de 99%), le condensateur est considéré comme chargé. Le raisonnement est
inverse pour la décharge : à chaque constante de temps, le condensateur se vide du tiers de la
tension restant à ses bornes. Au bout de t, il reste (1/3) × U ; au bout de 2t, il reste (1/9) × U , etc..
Au bout de 5t, la tension résiduelle est inférieure à 1% de la tension d’origine, le condensateur s’est
vidé !
La version scriptée
Le script python interrogera la broche GPIO désignée et initiera l'arrêt du système si elle est abaissée
(court-circuitée) pendant plus de 0,5 seconde.
Dépendances
Le script utilise gpiozero qui simplifie l'interface des périphériques GPIO avec Raspberry Pi.
Instructions
Scripts
rebooter.py
Python
#!/usr/bin/python3
stopPin = 26
stopButton = Button(stopPin) # defines the button as an object and chooses GPIO pin
def isRoot():
if getuid() != 0:
return False
else:
return True
def main():
print("\nMonitoring pin {} for reboot signal.".format(stopPin))
print("Ctrl-C to quit.\n")
try:
while (True):
if stopButton.is_pressed:
sleep(0.5)
if stopButton.is_pressed:
system("shutdown now -h")
sleep(0.1)
except KeyboardInterrupt:
print('\n\nKeyboard interrupt.')
finally:
pass
return
if __name__ == "__main__":
if not (isRoot()):
print("\nScript must be run as root.")
exit(1)
else:
main()
exit(0)
rebooter.service
TypeScript
[Unit]
Description=Rebooter Service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/rebooter.py
[Install]
WantedBy=multi-user.target
Dans la version 225 et supérieure du système, l'arrêt et la mise sous tension sont possibles en court-
circuitant la broche 5 du GPIO GPIO3. Cette fonctionnalité est activée en ajoutant la ligne suivante au
fichier /boot/config.txt et en redémarrant :
TypeScript
dtoverlay=gpio-shutdown,gpio_pin=3
Note : le qualificatif gpio_pin=3 est redondant car cette broche est la valeur par défaut.
La broche GPIO3 dispose d'une résistance de tirage externe, donc un court-circuitage à la masse
brièvement déclenchera une extinction. Un court-circuitage ultérieur à la masse (tant que
l'alimentation est toujours connectée) redémarrera le système.
Nom : gpio-shutdown
Info : Déclenche une extinction lorsque l'état de la broche GPIO change.
La broche GPIO spécifiée est configurée comme une commande d'entrée
qui génère des événements KEY_POWER.
# dpkg-reconfigure console-setup
# service console-setup reload
# init q
Commande : dtoverlay=gpio-shutdown,<param>=<val>
Paramètres : gpio_pin Broche GPIO pour déclencher (par défaut 3)
Pour le modèle Raspberry Pi 1 B rev 1,
définissez explicitement cette valeur sur 1,
par exemple :
dtoverlay=gpio-shutdown,gpio_pin=1